
お世話になります。
SQLからSQLを呼び出す形で以下のことを行おうとしています。
呼び出し元のSQLにRAISE文を記述し、フィールドの内容を表示させようとしているのですが、
SELECTで実行すると、「PERFROMに変更してください」とのエラーになってしまいます。
そこで、PERFORMに変更し実行しますと、RAISE文の結果が表示されません。
また、PERFORMのままで表示させるには、呼び出し先のSQLにRAISE文を記述すれば
良いようなのですが、呼び出し先のSQLに手を加えたくありません。
(呼び出し先のSQLをテストしているので・・・。)
どなたか、うまく表示させる方法をご存知の方がいらっしゃいましたら、是非とも
ご教授下さい。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
PL/pgSQL から、出力パラメータ (OUT 引数) のある関数を呼び出す場合、
引数ではなく返値として値を受け取る必要があります。
PERFORM ではなく、SELECT INTO を使ってみてください。
CREATE OR REPLACE FUNCTION fn_raise(OUT o_v1 int, OUT o_v2 int) AS $$
BEGIN
o_v1 := 123;
o_v2 := 456;
END;
$$ LANGUAGE plpgsql;
DO $$
DECLARE
v1 int;
v2 int;
BEGIN
SELECT * INTO v1, v2 FROM fn_raise();
RAISE WARNING 'v1=%, v2=%', v1, v2;
END;
$$;
WARNING: v1=123, v2=456
度々の回答、誠に有難う御座います。
ここまで回答して頂いて、本当に感謝しております。
下記ファンクションにて実行してみたのですが、うまくいきません。
CREATE OR REPLACE FUNCTION raise_test(in i_data_num numeric, out o_data_num numeric, out o_data_char character varying)
RETURNS integedr AS
度重なる質問で、誠に申し訳ございませんが、手法をご教授ください。
よろしくお願いいたします。
No.1
- 回答日時:
サーバのバージョンと、事象を再現できる具体的なコードが必要です。
例えば以下だと、v9.0では期待通りに動作したのですが、違うことをやっているでしょうか?
CREATE OR REPLACE FUNCTION fn_raise() RETURNS integer AS $$
BEGIN RETURN 123; END;
$$ LANGUAGE plpgsql;
DO $$
BEGIN RAISE WARNING '%', fn_raise(); END;
$$;
WARNING: 123
回答、ありがとうございます。
ver9.0.4をCentOS上で利用しています。
クライアントPCはWindows7です。
行おうとしていることを下記に記載致します。
(1)TEST_DATAテーブルに下記レコードが存在します。
data_num(numeric(8,0)) | data_char(varchar(8))
1 | AAAAA
2 | BBBBB
3 | CCCCC
4 | DDDDD
5 | EEEEE
(2)呼び出し先のSQLは下記のとおりです。
CREATE OR REPLACE FUNCTION raise_test(i_data_num numeric, o_data_num numeric, o_data_char character varying)
RETURNS integer AS
$BODY$
DECLARE
count int := 0;
BEGIN
-- RAISE WARNING 'raise_test i_data_num %',i_data_num;
SELECT COUNT(DATA_NUM)
INTO count
FROM TEST_DATA
WHERE DATA_NUM = i_data_num;
-- RAISE WARNING 'raise_test count %',count;
IF count = 0 then
o_data_num := 0;
o_data_char := NULL;
return 1;
end if;
SELECT DATA_NUM
,DATA_CHAR
INTO o_data_num
,o_data_char
FROM TEST_DATA
WHERE DATA_NUM = i_data_num;
-- RAISE WARNING 'raise_test o_data_num %',o_data_num;
-- RAISE WARNING 'raise_test o_data_char %',o_data_char;
RETURN 0;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION raise_test(numeric, numeric, character varying)
OWNER TO postgres;
(3)呼び出し元のSQLは下記のとおりです。
CREATE OR REPLACE FUNCTION raise_exe()
RETURNS void AS
$BODY$
DECLARE
xint := 1;
o_data_num numeric(8);
o_data_char varchar(8);
BEGIN
--PERFORM raise_test(3,o_data_num ,o_data_char);
--SELECT raise_test(10,o_data_num ,o_data_char);
RAISE WARNING 'WARNING %', raise_test(3,o_data_num ,o_data_char);
RAISE WARNING 'WARNING %',o_data_num;
RAISE WARNING 'WARNING %',o_data_char;
--RAISE NOTICE 'NOTICE %', raise_test(5,o_data_num ,o_data_char);
--RAISE NOTICE 'NOTICE %',o_data_num;
--RAISE NOTICE 'NOTICE %',o_data_char;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION raise_exe()
OWNER TO postgres;
(4)結果が以下となります。
WARNING: WARNING 0
WARNING: WARNING <NULL>
WARNING: WARNING <NULL>
根本的に何か間違っているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHP MySql ページング 2 2022/09/20 06:38
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- その他(データベース) DAOファイルのSQLクエリの部分を引数にして呼び出すときに引数でSELECT文持たせたら 1 2023/01/10 17:36
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Access VBAで条件を追加する(書き込む)場所 2 2022/03/23 12:05
- その他(ブラウザ) python から COBOL を呼び出すことは可能でしょうか。 1 2023/04/21 21:03
- MySQL SQLについて質問です。 SELECT TO_CHAR(TO_DATE('90-10-08.'YY- 4 2022/05/13 20:55
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで縦のカラムデータを...
-
自治会総会の成立要件について
-
Windows10がインストールできま...
-
SQLでUPSERTを一度に複数行やる...
-
plgファイルの開き方
-
PostgreSQLとmysqlはどちらを選...
-
レンタルサーバーのPostgreSQL...
-
postgresqlでのトランザクショ...
-
直近2年度連続で減少していない...
-
列が存在しないと言われる
-
postgreSQLのint型は桁数指定が...
-
postgresql についてです
-
PostgreSQL14.6のSSL対応について
-
PuTTyにログインまでは出来たの...
-
PostgreSqlでFunctionの作成に...
-
ウィンドウズ10へアップロー...
-
PostgresSQLの環境設定について
-
mplabの事です。 2年くらい前に...
-
Windows10でQuickTimeがインス...
-
select文の書き方「半角カナ+...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自治会総会の成立要件について
-
postgresql についてです
-
postgreSQLのint型は桁数指定が...
-
SQLでUPSERTを一度に複数行やる...
-
plgファイルの開き方
-
SQLにて指定日付より前、かつ最...
-
select文の書き方「半角カナ+...
-
エクセルで縦のカラムデータを...
-
PostgreSqlでFunctionの作成に...
-
postgresqlでのトランザクショ...
-
新規作成したPostgresqlデータ...
-
select文の書き方で分からない...
-
列が存在しないと言われる
-
PostgreSQLについて教えてくだ...
-
shellからpostgresqlへの変数の...
-
Windows10でQuickTimeがインス...
-
Postgreのupdateコマンドでエラー
-
bashスクリプトでpostgreSQLの...
-
Windows10がインストールできま...
-
PostgresSQLの環境設定について
おすすめ情報