DB2中的动态游标变量
我想打开一个动态游标变量DB2中的动态游标变量,db2,Db2,我想打开一个动态游标变量 CREATE OR REPLACE PROCEDURE TTT () P1: BEGIN Declare cID char(5) ; declare c1 cursor for s1 ; declare stmt varchar(1000) ; set cid = 'a' ; Set stmt = 'sele
CREATE OR REPLACE PROCEDURE TTT ()
P1: BEGIN
Declare cID char(5) ;
declare c1 cursor for s1 ;
declare stmt varchar(1000) ;
set cid = 'a' ;
Set stmt = 'select * from aaa where a = ?' ;
prePare s1 from stmt ;
open c1 using cid ;
END P1
我得到一个错误:
A.TTT-已开始部署。
创建存储过程返回SQLCODE:-104,SQLSTATE:42601。
A.TTT:6:在“”之后发现意外标记“”。预期的令牌可能包括:“”。。SQLCODE=-104,SQLSTATE=42601,DRIVER=3.69.56
在“”之后发现意外标记“”。预期的令牌可能包括:“”。。SQLCODE=-104,SQLSTATE=42601,DRIVER=3.69.56
A.TTT-部署失败。
A.TTT-回滚已成功完成。错误原因是代码忽略了复合SQL块中语句顺序的文档化规则 其中一条规则是,游标声明必须出现在所有其他已声明变量之后、SQL PL代码块开始之前 所以在你的问题中,变量的顺序应该是:
Declare cID char(5) ;
declare stmt varchar(1000) ;
declare c1 cursor for s1 ;
对于当前版本的DB2LUW,复合SQL块的这些规则如下所示
要将结果集返回给调用者或客户端,请记住在声明c1游标
行中添加返回调用者
或返回客户端
,并在过程定义中添加动态结果集1
要在存储过程代码中使用游标(即从游标中提取),则不需要这些东西
您的jdbc驱动程序非常旧,因此计划将其升级到受支持的更好版本。您可以通过此网站下载最新版本
您还可以通过在连接字符串URL中附加一个属性,使错误消息更加详细;retrieveMessagesFromServerOnGetMessage=true代码>
这可以加快您在学习时解决琐碎编程问题的能力。首先在变量中添加冒号:prePare s1 from:stmt代码>在db2中没有“动态游标变量”这样的含义。在示例中,从SP返回一个结果集,不带任何变量。还有另一种使用基于的结果集的技术,其中使用了游标变量。@ThomasG这是一个错误的建议。这种语法在DB2SQL/PL中不受支持。请不要多次问同一个问题。如果您有问题,可以编辑您的问题并添加其他信息。请让我有机会将与“返回给来电者”
或与“返回给客户端”
一起使用。我编写声明c游标并返回客户机,以便从aaa选择*
,部署时出错