• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:pgAdminIII RAISEの結果取得について)

pgAdminIIIでRAISE文の結果を表示する方法

このQ&Aのポイント
  • SQLからSQLを呼び出す形でRAISE文の結果を表示しようとしていますが、PERFORMに変更すると結果が表示されません。手を加えずに表示させる方法を知っている方、教えてください。
  • SQLからSQLを呼び出す方法でRAISE文の結果を表示しようとしていますが、PERFORMのままでは結果が表示されません。手を加えずに表示させる方法をご存知の方、教えてください。
  • pgAdminIIIでSQLからSQLを呼び出す場合、RAISE文の結果を表示する方法を教えてください。PERFORMに変更すると結果が表示されず、呼び出し先のSQLを変更したくありません。知っている方、教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • gacky-79
  • ベストアンサー率100% (14/14)
回答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

stagea260
質問者

お礼

度々の回答、誠に有難う御座います。 ここまで回答して頂いて、本当に感謝しております。 下記ファンクションにて実行してみたのですが、うまくいきません。 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 度重なる質問で、誠に申し訳ございませんが、手法をご教授ください。 よろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • gacky-79
  • ベストアンサー率100% (14/14)
回答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

stagea260
質問者

お礼

回答、ありがとうございます。 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 x int := 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

  • php上でSQL文を実行した結果と、phpMyAdminで実行した結果が違う

    ☆実行環境 php5.3 MySQL4.0 $sql="SELECT * FROM テーブル名 WHERE フィールド名 like '".$変数."%'" php上で上記のようなSQL文を実行させようとしています。 テーブルには該当する行がいくつかあるのですが、ページ上では1行も表示してくれません。 mysql_num_rowsの返り値を見ると0になっています。 SQL文の組み立てがおかしいのかと思い、phpMyAdmin上でSQL文を実行すると、 きちんと欲しい内容が表示されます。 とするとphpでのSQL文の書き方がおかしいのだと思います。 どこかおかしいのかご教授ください。

    • ベストアンサー
    • PHP
  • pgAdminIII RAISEの結果取得について

    前回の質問を間違えて、解決済にしてしまいました。 前回の質問番号はQNo.7135032です。 改めて質問させて頂きます。 下記ファンクションにて実行してみたのですが、うまくいきません。 CREATE OR REPLACE FUNCTION raise_test(in i_data_num numeric, out o_data_num numeric, out o_data_char character varying) RETURNS integer AS 度重なる質問で、誠に申し訳ございませんが、手法をご教授ください。 よろしくお願いいたします。

  • シェルでSQLの結果を取得したい

    シェルスクリプトでSQLPLUSから、SQL文を実行させる事はできたのですが、そのSQLがSELECT文の時、その抽出した結果をシェルスクリプト上 、知りたいとき、どのようにすればわかりません。 SELECT した結果は必ず0個または1個です。 どなたかご教授ください。 sqlplus -S user/pass @${SQL_FILE} << EOF >log.txt EOF SQL_FILEの中身 select seq from A_table where ID = 1

  • Excelワークシート上にSQL文を書き込み取得したデータをワークシート上に取得

    はじめましてこんにちわ。 現在ExcelとSQLServerでADOを使ってデータを取得したいと思っています。 SQL文をワークシート上に書いてそれを読み込んでSQL文を実行するようにしたいのですが、それを取得したあと、データをExcelワークシートに表示させる方法が思いつきません。 SQL文で指定するデータは任意の文です。そのため取得されたフィールドがいくつできるかわからない状態です。 例えば、SQL文であったら SELECT 商品ID,商品名,価格 from 商品テーブル なりますが、商品ID,商品名,価格フィールドを自動的に Excelフォーム上に作りたいということです。 ・基本的にSELECT文しか使わない ・SQL文は任意のSQL文である の条件がありますがそれはできるのでしょうか? よろしくお願いします。

  • クラスモジュールからのErr.Raiseがうまくゆきません。

    クラスモジュール内で On Error Resume Nextを書き、 エラー処理を行った後、Err.Raiseを実行して、呼び出し元にエラーを返していますが、 呼び出しもとの On Error Goto のとび先に飛びません。 呼び出し元で、Err.Numberを表示すると、値が取れますので、値は渡せているようです。 呼び出し元で何か実行時エラーを発生するとちゃんと On Error gotoのとび先に飛びますので、クラスモジュールで行った Err.Raiseが処理されないだけのようです。 どうすれば、呼び出しもとのとび先に飛ぶようになるでしょうか。お知恵をお貸しください。

  • タイムスタンプ型を抽出条件に指定した場合のSQL

    タイムスタンプ型を抽出条件に指定した場合、どの様なSQL文を指定すれば良いでしょうか? 該当するレコードは確かに存在していますが、以下のSQL文では「空」になってしまいました。 【実行したSQL文】 SELECT フィールド FROM テーブル WHERE タムスタンプ型フィールド BETWEEN '2011-08-05 20:00:00' AND '2011-08-06 19:59:59' 何卒、ご教授頂ければと存じます。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • SQLで取得したフィールドをSQL文として利用

    お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。

  • 条件によってレコードを取得したい

    Mysqlで以下のような条件のSQL文がわかりません。 hogeというフィールドの値に1があればそのレコードを取得 hogeに1という値のフィールド値をもったレコードがないならhogeが空のレコードを取得したいのですが方法がわかりません。 SELECT * FROM `tebleA` where (`hoge` = '1') or `postageFee_memId` = '' LIMIT 5 上のSQL文ではどうしても「`postageFee_memId` = '' 」のほうが優先されます。 (優先されるのはオートインクリメントIDが小さいから当然ですが・・) 「`hoge` = '1'」が絶対優先されるようにしたいのです。 いわゆる 「`hoge` = '1'」がない場合だけ「`postageFee_memId` = ''」が実行できればと思います。 ifとかを使って条件文をかけばいいのでしょうか? 足らずの情報があればおっしゃってください。 何卒ご教授お願いいたします。

  • SQL*PLUSの結果表示について

    基本的な事かもしれませんがご存知の方、ご教授願います。 SQL*PLUSでSelect文を実行した場合、 NO NAME TEL -- ---- ---- 01 ABC 0120 という形で結果が返ってくると思いますが、 これを値だけ(列名とハイフンの除いた結果)が 返ってくるようにしたいのですが、可能ですか? 変な質問で申し訳ございませんが、宜しくお願いします。

  • phpmyadminのブックマークの変数の使い方?

    お世話になります。 phpmyadminのSQLで、 ブックマークの変数を利用する形で、 select文を実行したいのですが、 その際、 select文内に対して、 どのように、ブックマークの変数を記述すればよいのでしょうか? 以上になります。 よろしくお願いします。

    • ベストアンサー
    • MySQL