2017-04-04 12 views
0

特定のスキーマ内のすべてのテーブルのすべての列名をフェッチする必要があります。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ループの私の選択を好むように見えるしません:

は、ここに私のコードです。

誰もこれを前にしたことがありますか?

ありがとうございました!

答えて

0

最初に1つの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クライアントの場合、ステートメント終了はステートメント終了ボックスに記載する必要があります。

関連する問題