我试图从PL / SQL调用TOAD中的存储过程,该存储过程同时具有OUT参数和SYS_REFCURSOR。当我尝试执行下面的块时,我得到ORA-01008: not all variables bound
但我无法确定哪个是问题。我被提示用一个表单绑定rtnData,所以它似乎不是那个。
declare
QueryTime DATE;
ErrorNum NUMBER;
ErrorDesc VARCHAR2(2000);
type rtnData is ref cursor;
begin
MyProcedure(to_date('01/01/2010', 'MM/DD/YYYY'), QueryTime, ErrorNum, ErrorDesc, :rtnData);
dbms_output.put_line(rdbQueryTime);
dbms_output.put_line(rtnErrorNum);
dbms_output.put_line(rtnErrorDesc);
end;
答案 0 :(得分:2)
rtnData
在PL / SQL块中声明,因此您不必将其视为绑定变量 - 因此它不应该在它前面有冒号。
但是rtnData
被声明为一个类型,而不是一个变量。您不需要自己的类型,因此它应该是:
declare
QueryTime DATE;
ErrorNum NUMBER;
ErrorDesc VARCHAR2(2000);
rtnData sys_refcursor;
begin
MyProcedure(to_date('01/01/2010', 'MM/DD/YYYY'), QueryTime, ErrorNum,
ErrorDesc, rtnData);
...
如果系统提示您设置rtnData,如果您未设置该错误,或者该参数在OUT
声明中声明为MyProcedure
,您仍会收到该错误。
要在Toad的数据网格中显示引用光标,我想你需要这个:
declare
QueryTime DATE;
ErrorNum NUMBER;
ErrorDesc VARCHAR2(2000);
begin
MyProcedure(to_date('01/01/2010', 'MM/DD/YYYY'), QueryTime, ErrorNum,
ErrorDesc, :rtnData);
...
...然后作为脚本执行,并在出现提示时选择“cursor”作为绑定类型。虽然我无法测试。 (This suggests it'll work,但不确定为什么它会声明未使用的类型。