2015-12-09 81 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