我必须获取特定架构中所有表的所有列名称。
对于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循环中的选择。
之前有人这么做过吗?
谢谢!
答案 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客户端,则应在语句终止框中提及语句结尾。