2016-02-26 54 views
0

在TSQL我可以在查詢分析器執行存儲過程並查看一個結果在那裏的內容查詢分析器窗口,不知道有關查詢的任何結構(表,列...)如何從具有未知列數的存儲過程查看Toad中結果集的內容?

--Tsql樣品 執行myproc parm1,parm2,parm3

現在我正在與PLsql和蟾蜍(我對蟾蜍相對較新)。我需要查看一個複雜的存儲過程的結果集的內容,我不知道列數是多少 - 更不用說它們的數據類型了(這個過程由幾個奇怪的子查詢組成 - 我可以單獨查看,但是它們會被旋轉,並且最終結果集中的列數會有所不同)。當我不知道有多少列或它們的數據類型時,如何在Toad中查看此結果集的內容?

下面是代碼,我已經集中在一起查看存儲過程的結果集的內容,其中我知道有多少列以及它們的數據類型提前。在我的代碼示例中,我使用了一個名爲x_out的sys_refcursor,並且還創建了一個臨時表來存儲結果集的內容以供其他查看。有沒有辦法可以做到這一點,當我不知道結果集中有多少列?如何用PLsql做到這一點 - 蟾蜍?

create global temporary table tmpResult (fld1 number, fld2 varchar(50), fld3 date); 

declare 
    x_out sys_refcursor; 
    tmpfld1 number; 
    tmpfld2 varchar2(50); 
    tmpfld3 date; 

BEGIN 
    myschema.mypkg.myproc(parm1, parm2, x_out); 

LOOP 
    FETCH x_out INTO tmpfld1, tmpfld2, tmpfld3; 
    DBMS_OUTPUT.Put_Line ('fld1:-- '||tmpfld1||': fld2:-- '||tmpfld2||': fld3:-- '||tmpfld3); 

-- I also insert the result set to a temp table for additional viewing of the data from the stored procedure 

    Insert Into tmpResult values(tmpfld1, tmpfld2, tmpfld3);   
    EXIT WHEN x_out%NOTFOUND;  

END LOOP; 

END; 
+0

蟾蜍的什麼版本? –

+0

應該是11g –

回答

0

Toad可以自動爲您檢索遊標。你有幾個選擇,#3也許是最簡單的,如果你只是想看到數據。

  1. 如果您在編輯器中的myschema.mypkg你可以打F11來執行它。在顯示的對話框中,選擇您的軟件包成員到左邊並選擇輸出選項選項卡。檢查選項以獲取遊標結果或使用DBMS輸出選項。單擊確定並執行包。根據您的Toad版本,您會在編輯器底部看到一個網格,以顯示結果,或者您將看到一個PL/SQL結果選項卡。如果您看到後者,請雙擊輸出參數的輸出列中的(CURSOR)值。只要您的數據集不會太大以至於會導致內存不足錯誤,我建議使用提取選項。

  2. 在模式瀏覽器中找到您的軟件包並rt-click,執行軟件包。你會看到#1中提到的相同的對話框。按照其餘的步驟。

  3. 使用來自匿名塊的綁定變量。使用您的例子中,你會想這樣的事情...

    declare x_out sys_refcursor; begin myschema.mypkg.myproc(parm1, parm2, x_out); :retval := x_out; end;

與編輯F9執行此。在綁定變量彈出菜單中,將retval的數據類型設置爲Cursor。點擊確定。您的結果然後顯示在數據網格中。再次,如果你的數據集非常大,你可能會在這裏耗盡內存。

+0

非常棒!我發現了另一種方式來做到這一點 - 不像你的方式一樣酷,但一個選項(這一個不做旋轉) –

+0

優秀。我找到了另一種方式 - 試圖發佈它。 –

0

StackOverflow上不讓我發佈這個其他的解決方案:

我嘗試張貼這個其他解決方案的一部分(如果SOF讓我) - 的其他方式這個下半場:

BEGIN 
myschema.mypkg.myproc(parm1, parm2, parm3 x_out); 

FOR rec_ IN get_columns LOOP 
    DBMS_OUTPUT.put_line(rec_.name || ': ' || rec_.VALUE); 
END LOOP; 
END; 
+0

這是一個鏈接到另一個網站?我不知道爲什麼它不會讓你發佈,但我知道只是張貼鏈接到其他網站強烈不鼓勵。例如,有些博客建議使用SQL * Plus「打印」命令,但是對於使用Toad腳本引擎的單個語句執行不鼓勵。 –

0

這裏是的另一種方式上半場:

DECLARE 
x_out SYS_REFCURSOR; 

CURSOR get_columns IS 

...

+0

這裏是上半部分的另一部分--- SELECT t2.column_value.getrootelement()name, EXTRACTVALUE(t2.column_value,'node()')VALUE –

+0

這裏接近另一半的其他部分way --- –

+0

我似乎在發佈表達式xmlsequence(x_out)時出現了問題,但這是另一種方式用於執行光標的類似內容讀取的方法 –

相關問題