DB2 中的动态游标变量
Dynamic cursor variable in 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 = 'select * from aaa where a = ?' ;
prePare s1 from stmt ;
open c1 using cid ;
END P1
我收到错误:
A.TTT - 部署开始。
创建存储过程 returns 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 ;
对于当前版本的 Db2-LUW,这些复合 SQL 块的规则是 here。
要return调用者或客户端的结果集,记得在declare c1 cursor
行添加with return to caller
或with return to client
,同时添加dynamic result sets 1
在过程定义中。
要在存储过程代码中使用游标(即从中获取游标),则不需要这些东西。
您的 jdbc 驱动程序非常旧,因此计划将其升级到支持更好的版本。您可以通过此站点下载最新版本 https://www.ibm.com/support/pages/db2-jdbc-driver-versions-and-downloads
您还可以通过将附加属性附加到连接字符串来使错误消息更加详细 URL ;retrieveMessagesFromServerOnGetMessage=true;
这可以加快您在学习时解决琐碎编程问题的能力。
我想打开一个动态游标变量。
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 - 部署开始。 创建存储过程 returns 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 ;
对于当前版本的 Db2-LUW,这些复合 SQL 块的规则是 here。
要return调用者或客户端的结果集,记得在declare c1 cursor
行添加with return to caller
或with return to client
,同时添加dynamic result sets 1
在过程定义中。
要在存储过程代码中使用游标(即从中获取游标),则不需要这些东西。
您的 jdbc 驱动程序非常旧,因此计划将其升级到支持更好的版本。您可以通过此站点下载最新版本 https://www.ibm.com/support/pages/db2-jdbc-driver-versions-and-downloads
您还可以通过将附加属性附加到连接字符串来使错误消息更加详细 URL ;retrieveMessagesFromServerOnGetMessage=true;
这可以加快您在学习时解决琐碎编程问题的能力。