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

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

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

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

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

Q&A

解決済

1回答

8194閲覧

postgresqlのtype宣言について

syncrock

総合スコア209

PostgreSQL

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

PL/SQL

PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

0グッド

1クリップ

投稿2016/08/08 06:36

postgresqlのtype宣言について教えてください。
テーブルの項目の型を使用したtypeは作成可能でしょうか。
oracleで言うと以下のようなことがしたいです。

oracle

1CREATE OR REPLACE FUNCTION テスト (引数1 IN VARCHAR2) 2IS 3TYPE レコードタイプ IS RECORD( 4 項目1 テーブル1.項目1%TYPE 5 ,項目2 テーブル1.項目2%TYPE 6 ,項目3 テーブル2.項目1%TYPE 7 ,項目4 テーブル2.項目2%TYPE 8); 9BEGIN 10 //略

このようなことを調べながらやろうとしてますが、現状実現できていません。。。
実際、postgresql(pl/pgsql)でも可能でしょうか。
また、CREATE TYPEとして別に作成するでも良いので可能であれば教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

typeを使っている例です

sql

1CREATE or REPLACE FUNCTION sp_test(param text) 2RETURNS TABLE( 3 komoku_a test.komoku_a%TYPE, 4 komoku_b test.komoku_b%TYPE, 5 komoku_c timestamp 6)AS 7$$ 8BEGIN 9 RETURN QUERY SELECT 1::numeric, param, now()::timestamp; 10END 11$$ LANGUAGE plpgsql;

sql2

1CREATE OR REPLACE FUNCTION get_kuni() 2RETURNS TABLE( 3 kuni country.kuni%TYPE, 4 name country.name%TYPE 5) 6AS $$ 7 SELECT kuni, name FROM country 8$$ LANGUAGE sql;

投稿2016/08/08 09:41

A.Ichi

総合スコア4070

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

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

syncrock

2016/08/09 00:29

回答ありがとうございます。 「%TYPE」の使い方は知っているのですが、 質問文で記載しているところで言うと「レコードタイプ」というモノを宣言したいです。 本来であればCREATE TYPEなどで宣言して、その型を持つ変数を定義するのでしょうが、CREATE TYPEですと「%TYPE」が使えない?みたいなので、「%TYPE」を使用して「レコードタイプ」を定義しようとするとFUNCTION内に定義しないといけないと思うのですが、どうもうまくいかず。。。
A.Ichi

2016/08/09 00:44

私もCREATE TYPEにて%TYPEを使えませんでした。のでテーブル項目定義+exit項目としてTYPEを設定しています。現在はこのTYPEを作成を別SQLでテキストに出力して対応しています。同様な質問だったと言う事ですね。失礼いたしました。
syncrock

2016/08/09 00:59

>現在はこのTYPEを作成を別SQLでテキストに出力して対応しています。 何か他を考える必要がやはりあるのですね。。。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問