2012-04-15 76 views
0

我需要使輸出可讀。對於我直接編寫的查詢,我成功地這樣做了。格式SQL輸出

  1. 我需要對涉及遊標的查詢做同樣的事情,也就是說,我需要將遊標返回的記錄格式化。但我無法做到。

  2. 我反而明確地打印列名,並打印記錄。還是一樣。有什麼辦法,我也可以檢索標題,然後根據它們的長度,格式化收到的記錄?

+1

你可以把光標的結果放到臨時表中,然後查詢那個臨時表達到你想要的格式嗎? – DOK 2012-04-15 16:12:16

+2

如果你有一個遊標,你肯定知道列名是什麼,然後再選擇它們? – Ben 2012-04-15 16:16:43

+0

@本人想要隱式打印。 – user980411 2012-04-16 01:29:21

回答

4

如果我理解正確,您需要的是動態分析和lpad-rpad函數。

使用DBMS_SQL包,您可以動態地解析SQL語句。我把下面的代碼塊放在頭頂,這樣可能會出現語法錯誤,但它應該給你提供這個想法。

declare 
    ln_cur number; 
    ln_colCnt number; 
    l_sqlDesc DBMS_SQL.DESC_TAB; 
begin 
    ln_cur := DBMS_SQL.open_cursor; 
    DBMS_SQL.parse(ln_cur, 'select * from dual', DBMS_SQL.NATIVE); 

    DBMS_SQL.describe_columns(ln_cur, ln_colCnt, l_sqlDesc); 
    DBMS_OUTPUT.put_line(l_sqlDesc(1).col_name); --First Column Name. 

    DBMS_SQL.close_cursor(ln_cur); 
end; 

如果要格式化輸出,還需要檢查lpad-rpad函數。試試看看你自己:

begin 
    DBMS_OUTPUT.put_line(lpad(20, "Ford")); 
    DBMS_OUTPUT.put_line(lpad(20, "Prefect")); 
end;