【问题标题】:In Out Patameters In Dynamic Set DB2动态集 DB2 中的输入输出参数
【发布时间】:2021-08-17 08:06:48
【问题描述】:

我的表是 aaa (a char(5))

      CREATE OR REPLACE PROCEDURE zzz ()
         DYNAMIC RESULT SETS 1
     P1: BEGIN
        Declare cID char(5) ;
        Declare cc char(5) ;
        Declare csql varchar(200) ;
        Declare s1 varchar(200) ;

         Set cID = 'a' ;

         SET Csql = 'SET ? = (select a from aaa where a = :cID)' ;

          PREPARE S1 FROM Csql  ;       
          EXECUTE S1 into cc using cID ;     {error this line}

           print (cc) ;
    END P1

我得到错误:

部署 [sss]A.ZZZ 运行 A.ZZZ - 开始部署。创建存储过程返回 SQLCODE:-104,SQLSTATE:42601。A.ZZZ:14:在“”之后发现了意外的标记“”。预期的标记可能包括:“S1 into cc using cID”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.69.56 在“”之后发现了意外的标记“”。预期的令牌可能包括:“S1 into cc using cID”.. SQLCODE=-104, SQLSTATE=42601, DRIVER=3.69.56 A.ZZZ - 部署失败。 A.ZZZ - 回滚成功完成。

【问题讨论】:

标签: db2


【解决方案1】:

多个问题。

  • S1 必须要么具有 STATEMENT 类型,要么不声明在 全部,但不声明为VARCHAR
  • print (cc) 根本不是一个有效的声明。 如果您想要一些调试输出,请阅读 DBMS_OUTPUT.PUT_LINE。 您调用例程的工具必须能够显示 消息缓冲区的内容。
  • 您的例程没有返回任何 游标到调用者/客户端。无需使用 DYNAMIC RESULT SETS 1 子句。这个问题并不严重。

【讨论】:

  • 显示显示内容的工具。不支持 SQLscript
  • Db2 命令行处理器 (CLP)。实际上,您可以使用 example 中的 dbms_output 模块的例程自行实现这样的显示。
猜你喜欢
  • 2016-05-28
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2020-10-04
  • 2014-08-22
  • 1970-01-01
  • 2011-06-09
相关资源
最近更新 更多