前提・実現したいこと
SQLファイル内でファンクションを実行し、複数行(クエリ)で帰ってくる戻り値をそれぞれ参照したい。
■ファイル構成
. D:\SQLTEST
. ├ POWERSHELL
. │ └ TEST.ps1
. └ SQL
. └ TEST.sql
該当のソースコード
FUNCTION
1CREATE OR REPLACE FUNCTION test_function() 2RETURNS SETOF CHARACTER VARYING 3AS $$ 4DECLARE 5 return_cd varchar; 6 return_text1 varchar; 7 8BEGIN 9 -- 変数初期化 10 return_cd := '0'; 11 return_text1 := ''; 12 13 SELECT test_col INTO col1 FROM test_tab; 14 15 IF return_cd = '0' 16 THEN 17 return_text1 := '正常終了'; 18 RETURN QUERY VALUES (return_cd),(return_text1); 19 END IF; 20 21EXCEPTION 22 WHEN OTHERS THEN 23 return_cd := '1'; 24 return_text1 := '異常終了'; 25 RETURN QUERY VALUES (return_cd),(return_text1); 26 27END; 28$$ 29LANGUAGE 'PLPGSQL'; 30
まず、FUNCTIONでは、上記のように正常終了・異常終了にかかわらず戻り値をクエリで設定しています。
■実行結果(正常終了)
1 | 0
2 | 正常終了
■実行結果(異常終了)
1 | 1
2 | 異常終了
PSQL
1DO $$ 2DECLARE 3 wk_return_cd varchar; 4 wk_return_text1 varchar; 5 6BEGIN 7 select * from test_function() 8 into wk_return_cd, wk_return_text1; -- ここがまず上手くいかない 9 10 IF wk_return_cd = '1' 11 THEN 12 -- なんらかのエラーを記述 13 END IF; 14 15END $$; 16
そして、ファンクションの予備元であるPSQL側で、ファンクションの実行結果を参照して、
return_cdが 1 なら エラー、としたいのですが、
まず into でそれぞれ変数に入れることができません。
(戻り値が 複数列ではなく複数行のため、だと思います)
実行結果の欄にあるとおり、複数行で戻り値が返ってくるため、intoがうまく動かないのですが
なにか解決策はありますでしょうか。
ご教示いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/02 08:01
2021/11/02 08:15 編集