【oracle】輸出調試資訊____oracle

來源:互聯網
上載者:User

在對oracle的預存程序、函數進行調試時,可能都需要輸出一些調試資訊,oracle內建的DBMS_OUTPUT.PUT_LINE()方法大部分情況下能夠滿足要求,但是如果輸出的內容超過256個字元時,就不支援了,可以採取以下幾種方法:

1.最基本的DBMS_OUTPUT.PUT_LINE()方法。
隨便在什麼地方,只要是BEGIN和END之間,就可以使用DBMS_OUTPUT.PUT_LINE(output);
然而這會有一個問題,就是使用該函數一次最多隻可以顯示255個字元,否則緩衝區會溢出。
此外,函數DBMS_OUTPUT.ENABLE(20000)這種函數,僅僅是設定整個過程的全部輸出緩衝區大小,
而非DBMS_OUTPUT.PUT_LINE()的緩衝區大小。
對於超過255個字元的變數,使用DBMS_OUTPUT.PUT_LINE()方法是沒有效。

DECLARE
  OUTPUTVARCHAR2(200);
BEGIN
  OUTPUT := '...';--賦值
  DBMS_OUTPUT.PUT_LINE(OUTPUT);
END;

2.使用表的方法。
首先建立一張表,然後在PL/SQL中將要輸出的內容插到表中。然後再從表中查看內容。varchar2最長支援4000個字元。

--(1)建立一張表
CREATE TABLE my_output{
ID number(4),
txt varchar2(4000)
);
--(2)將要輸出的內容插到表中
DECLARE
  OUTPUT VARCHAR2(4000);
  STRSQL VARCHAR2(4500);
  CNT    NUMBER(4) := 0;
BEGIN
  STRSQL := 'delete * from my_output';
  EXECUTE IMMEDIATE STRSQL;
  OUTPUT := '...'; --賦值
  CNT    := CNT + 1;
  STRSQL := 'Insert into my_output value(cnt,''' || OUTPUT || ''')';--''在單引號中相當於字元'
  EXECUTE IMMEDIATE STRSQL;
END;

3.使用輸出檔案的方法。
如果變數非常大,以致連使用表都沒有辦法插入時,只有使用檔案方式了。
--(1)建立一個檔案夾路徑
create or replace directory TMP as '/tmp';  --windows上實驗了好像不行,在linux機器上可以

--(2)輸出到檔案
DECLARE
  FILE_HANDLE UTL_FILE.FILE_TYPE;
  OUTPUT      VARCHAR2(30000);
BEGIN
  OUTPUT      := "....";
  FILE_HANDLE := UTL_FILE.FOPEN('TMP', 'output.txt', 'w', [ 1 - 32767 ]); --四個參數:目錄,檔案名稱,開啟檔案,最大行數(預設為2000)
  UTL_FILE.PUT_LINE(FILE_HANDLE, OUTPUT);
  UTL_FILE.FCLOSE(FILE_HANDLE);
EXCEPTION
  WHEN UTL_FILE.INVALID_PATH THEN
    RAISE_APPLICATION_ERROR(-20000,
                            'ERROR:Invalid path for file or path not in INIT.ORA.');
END;

說明:
第3種方法需要通過sys使用者賦予許可權:
GRANT CREATE ANY DIRECTORY TO "FBASE";
grant read, write on directory TMP to "FBASE";  //賦予對TMP路徑的讀寫權限

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.