我正在尝试定义一个DB2 Stored Proc(理想情况下),CREATE VIEW,然后对该VIEW执行SELECT以构建另一个SQL,然后使用CURSOR执行该SQL并返回结果集。 我有两个问题:
DB2 似乎不喜欢单个SP中的CREATE,SELECT和DECLARE CURSOR的混合,
我无法弄清楚使用什么语法来声明基于SQL的游标,该游戏是在SELECT语句的输出声明的VARCHAR中存储为字符串。
有没有人做过类似的事情和/或能够给我一些语法示例?
答案 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示例