在TOAD中使用PL / SQL调用Oracle存储过程

时间:2014-04-24 15:22:19

标签: oracle plsql output

我试图从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;

1 个答案:

答案 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,但不确定为什么它会声明未使用的类型。