动态 SQL DB2 中的输入输出参数

In Out parameters in Dynamic SQL DB2

我想在 DB2 中写一个动态 SQL。有一个输入参数(cID)和一个输出参数(nsalary)。

   Declare cID varchar(5) ;
   Declare nsalary integer ;
   Declare csql varchar(200) ;
   
   Set cID = '111' ;

   Csql = ‘select salary from Employeee where ID = :cID’ ;
   Exec immediate csql into nsalary using cID ;

有用吗。我没有服务器,所以无法测试

不,您的代码无效。
您不能将 EXECUTE IMMEDIATE 与参数化查询一起使用,而必须改用 PREPARE & EXECUTE。此外,您必须使用动态 SET 语句。
看下面的例子。

...
Set cID = '111' ;
SET Csql = 'SET ? = (select salary from Employee where ID = :cID)' ;
PREPARE S1 FROM Csql;
EXECUTE S1 into nsalary using cID;

我的 table 是 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 - 部署开始。 创建存储过程 returns 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 - 回滚成功完成。