带有create select和cursor的db2存储过程

时间:2015-05-22 11:30:05

标签: stored-procedures cursor db2-luw

我正在尝试定义一个DB2 Stored Proc(理想情况下),CREATE VIEW,然后对该VIEW执行SELECT以构建另一个SQL,然后使用CURSOR执行该SQL并返回结果集。 我有两个问题:

  • DB2 似乎不喜欢单个SP中的CREATE,SELECT和DECLARE CURSOR的混合,

  • 我无法弄清楚使用什么语法来声明基于SQL的游标,该游戏是在SELECT语句的输出声明的VARCHAR中存储为字符串。

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

1 个答案:

答案 0 :(得分:0)

当然,你可以在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 https://github.com/angoca/db2unit/blob/master/src/main/sql-pl/04-Body.sql

中看到真正的SQL PL示例