Stored procedures 具有create select和cursor的db2存储过程

Stored procedures 具有create select和cursor的db2存储过程,stored-procedures,cursor,db2-luw,Stored Procedures,Cursor,Db2 Luw,我试图定义一个DB2存储过程,理想情况下,创建视图,然后对该视图进行选择以构建另一段SQL,然后使用游标执行该SQL并返回结果集。 我有两个问题: DB2似乎不喜欢在单个SP中混合使用创建、选择和声明游标 我不知道使用什么语法来声明基于SQL的游标,SQL作为字符串存储在声明的VARCHAR中,VARCHAR是SELECT语句的输出 有没有人做过类似的事情和/或能够给我一些语法示例?当然可以在DB2中这样做。为了执行“创建视图”,您需要使用动态SQL。视图上的“选择”也一样。最后,对于游标,定义

我试图定义一个DB2存储过程,理想情况下,创建视图,然后对该视图进行选择以构建另一段SQL,然后使用游标执行该SQL并返回结果集。 我有两个问题:

DB2似乎不喜欢在单个SP中混合使用创建、选择和声明游标

我不知道使用什么语法来声明基于SQL的游标,SQL作为字符串存储在声明的VARCHAR中,VARCHAR是SELECT语句的输出


有没有人做过类似的事情和/或能够给我一些语法示例?

当然可以在DB2中这样做。为了执行“创建视图”,您需要使用动态SQL。视图上的“选择”也一样。最后,对于游标,定义一个通用游标,并动态执行它

DECLARE SENTENCE VARCHAR(256);
DECLARE TABNAME VARCHAR(128);
DECLARE STMT STATEMENT;
DECLARE TABLES_CURSOR CURSOR 
  FOR TABLES_RS; 

SET SENTENCE = 'CREATE VIEW TABS SELECT TABNAME FROM SYSCAT.TABLES';
PREPARE STMT FROM SENTENCE; 
EXECUTE STMT; 

SET SENTENCE = 'SELECT TABNAME FROM TABS';
PREPARE TABLES_RS FROM SENTENCE;
OPEN TABLES_CURSOR;
FETCH TABLES_CURSOR INTO TABNAME;

您可以在我的项目db2unit中看到真实的SQL PL示例

您可以提供您尝试过的示例吗?手册中有很多示例。这为我指明了正确的方向;谢谢我编写它的方式存在的问题是,我在一个SQL操作之后使用了DECLARE游标,而不是在过程开始时使用另一个DECLARE游标。