2015-12-09 125 views
0

以下過程存在於應用程序中並正常工作。我需要在TOAD中執行此過程。注意:我是PS/Sql和Toad的新手。我嘗試了以下變體,但在Toad中不斷收到「Invalid Sql Statement」錯誤消息。我試過VAR,變量聲明,SYS_REFCURSOR,REFCURSOR,...如何使用SYS_REFCURSOR從pl/sql過程獲得輸出以在TOAD中輸出?

var x_out SYS_REFCURSOR 
EXEC mySchema.myPkg.myProcedure('NV', 401334, :x_out) 
print :x_out 

什麼是蟾蜍做到這一點的方式(或方法)?

+0

如果您將BEGIN ... END;周圍? – Baodad

+0

你可以嘗試在每行的末尾加上分號,除了BEGIN – Baodad

回答

0

你不能只打印出一個SYS_REFCURSOR,你必須循環它。你必須修改下面的代碼和你自己的變量。我不確定你有多少列進入你的光標;我在下面顯示兩列。

DECLARE 
    x_out SYS_REFCURSOR; 
    v_col1 VARCHAR2(255); --You may also have to declare a different data type depending on what is returned in the columns. 
    v_col2 VARCHAR2(255); 
BEGIN 
EXEC mySchema.myPkg.myProcedure('NV', 401334, x_out); 
LOOP 
    FETCH x_out INTO v_col1, v_col2; 
    EXIT WHEN x_out%NOTFOUND; 
    DBMS_OUTPUT.Put_Line ('Column1: '||v_col1||' Column2: '||v_col2) 
END; 

蟾蜍可能還需要你在開始的時候添加SET SERVEROUTPUT ON(別無分號了,我想以後)

+0

之後我嘗試了建議的方法,並且發佈了我的「實際」代碼和我收到的錯誤消息 –

+0

在TOAD中,你應該能夠找到程序, mySchema.myPkg.myProcedure,並生成或修改(或至少*查看*)過程背後的代碼。這將爲您提供有關程序所期望的輸入以及輸出結果的線索。 – Baodad

0

確定。我調整了這一點,現在它工作。這是我的代碼,可以正常工作:

DECLARE 
x_out SYS_REFCURSOR; 
col1 number; 
col2 VARCHAR2(255); 
col3 VARCHAR2(255); 
col4 Date; 
col5 VARCHAR2(255); 
col6 VARCHAR2(255); 
col7 number; 
col8 number; 
col9 number; 
col10 number; 

BEGIN 
DDTMS.PKG_ADMIN.GETPROCESSACTIONS('NV', 401334, x_out); 

LOOP 
    FETCH x_out INTO col1, col2, col3, col4, col5, col6, col7, col8, col9, col10; 
    DBMS_OUTPUT.Put_Line ('co1_1: '||col1||' col_2: '||col2||'co1_3: '||col3||' col_4: '||col4||' co1_5: '||col5||' col_6: '||col6||' co1_7: '||col7||' col_8: '||col8||' co1_9: '||col9||' col_10: '||col10); 
EXIT WHEN x_out%NOTFOUND;  

END LOOP; 


END; 
+0

我很高興你的工作。如果我的回答有任何幫助,我將不勝感激。 – Baodad