动态 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 - 回滚成功完成。
我想在 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 - 回滚成功完成。