質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

1回答

2881閲覧

[postgresql]テーブル値関数

dthani

総合スコア131

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2016/05/06 07:32

編集2016/05/06 07:33

下記サイトを見て、複数行を返すテーブル値関数を作成しているのですが、
1レコードしか返らず困っています。

https://postgresql.g.hatena.ne.jp/iakio/20080513/1210682637

pl/pgsql

1 2 SELECT tb.* FROM t_data tb 3 WHERE tb.aa= p_(変数); 4 5

上記は2レコード返すのですが、テーブル値関数にすると、1レコードしか返しません。

pl/pgsql

1declare 2 rec RECORD; 3 w_rsltcnt integer; 4begin 5(省略) 6 SELECT tb.* INTO rec FROM t_data tb 7 WHERE tb.aa= p_(変数); 8 9 10if found then 11 GET DIAGNOSTICS w_rsltcnt = ROW_COUNT; 12RAISE NOTICE 'Calling w_rsltcnt(%)',w_rsltcnt; 13else 14RAISE NOTICE 'Calling w_rsltcnt(%)',-999; 15-- return -999; 16end if; 17

上記では、1レコードしかセットされず、メッセージは、Calling w_rsltcnt(1)となります。
2レコード(複数レコード)を返す方法を教えてください。

postgresqlのバージョンは 9.3.4です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

http://qiita.com/fujii_masao/items/ac735db55ffda5d0ee38

を参考にして、return query select ~で上手く行きました。

select * into recは、1行のみセットするときに使うようです。

投稿2016/05/06 07:55

編集2016/05/06 08:33
dthani

総合スコア131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問