在DB2中的游标中选择

时间:2017-04-04 13:17:05

标签: database db2

我必须获取特定架构中所有表的所有列名称。

对于oracle数据库,我在PL / SQL中没有任何问题,但是在DB2中,我似乎无法使其工作。

这是我的代码:

BEGIN
declare cur1 cursor for
    select TABNAME 
    from syscat.tables 
    where tabschema = 'SchemaX';

open cur1;
fetch cur1 into i;
while SQLCODE <> 100
 do
   select * from SYSCAT.COLUMNS where tabname = i;
end while;
close cur1;
END

它似乎不喜欢我在while循环中的选择。

之前有人这么做过吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您需要创建一个proc然后调用它来获取结果集。 如果你运行它没有创建程序,它将运行,但会得到0零结果。

CREATE OR REPLACE PROCEDURE MY_PROC_FOR_TESTING
DYNAMIC RESULT SETS 1
BEGIN
FOR I AS C1 cursor WITH HOLD for select TABNAME from syscat.tables where tabschema = 'SchemaX'
DO
BEGIN
DECLARE C_DISBURS_RPT CURSOR WITH RETURN TO CLIENT FOR
select * FROM SYSCAT.COLUMNS where tabname =I.TABNAME;
OPEN C_DISBURS_RPT;
END;
END FOR;  
END!    

CALL MY_PROC_FOR_TESTING!

注意:如果是IBM客户端,则应在语句终止框中提及语句结尾。