【问题标题】:Call Oracle Stored Procedure with PL/SQL in TOAD在 TOAD 中使用 PL/SQL 调用 Oracle 存储过程
【发布时间】:2014-06-09 23:44:53
【问题描述】:

我正在尝试从 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;

【问题讨论】:

    标签: oracle plsql output


    【解决方案1】:

    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,如果您不设置它,或者如果在 MyProcedure 声明中将参数声明为 OUT,您仍然会收到该错误。

    要在 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,但不知道为什么要声明类型,因为它没有被使用)。

    【讨论】:

    • ErrorNum、ErrorDesc 和 rtnData 在存储过程中都被声明为 OUT 参数。我需要做什么才能在 TOAD 中使用 OUT 参数执行该过程?
    • @MichaelKingsmill - 它将按原样执行。您已经为您的块声明了变量,因此它们可以作为OUT 参数传递给过程。你还在报错吗?当您从过程中取回光标 rtnData 时,您打算如何处理它?
    • 我仍然遇到错误,但我现在意识到这与使用“执行语句”按钮而不是“作为脚本执行”按钮有关。我将输出参数打印到我期望的输出窗口,但我想将光标输出到数据网格窗口。
    • @MichaelKingsmill - 对,不知道如何在 Toad 中执行此操作,我不使用它。在 SQL*Plus 或 SQL Developer 中,我会 use variable and print;蟾蜍可能支持这些,但我真的不知道我害怕。
    • @MichaelKingsmill - 是的,我认为可能,但想知道执行脚本是否仍然是一个因素。它肯定被声明为OUT,而不是IN OUT?似乎这应该有效,但恐怕我只读过它。对不起。
    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2012-03-21
    • 2017-12-21
    相关资源
    最近更新 更多