15

select * from customerspgのストアドプロシージャ/関数のような単純な選択クエリを変換するにはどうすればよいですか?

私はPostgresが初めてでcreate function customers() as returns table/setof、気分が良くなかったので、ここで質問します。

pg landではprocsが「関数」と呼ばれることを理解しています。したがってcreate procedure、存在しないため、私の唯一のオプションは、ビューまたは関数を作成することです。問題はcreate function x() returns setof y、さらに処理しないと使用できない、括弧で囲まれたコンマ区切りの値の行を返すことです (少なくとも、pgAdmin と Ruby/Sequel で見られるものです)。

create function x() returns table(...)したくない行定義を埋め込む必要があります。

これらすべての背後には理由があると確信していますが、最も一般的な使用例がこのトリッキーであることに驚いています。

4

2 に答える 2

19

テストされていませんが、ほぼ正しいはずです:

CREATE OR REPLACE FUNCTION getcustomers() RETURNS SETOF customers AS $$
SELECT * FROM customers;
$$ LANGUAGE sql;
于 2013-01-06T04:02:34.737 に答える
18

問題は、「create function x() returns setof y」が括弧で囲まれたカンマ区切りの行値を返し、さらに処理しないと使用できないことです

この関数は行を返します。個々の列に分解するには、次のように呼び出します。

SELECT * FROM getcustomers();

これは、関数が適切な戻り値の型を定義していると仮定しています。見る:

マニュアルCREATE FUNCTIONは良い出発点になるはずです。例のセクションでは、このトピックについて説明します。

于 2013-01-06T18:35:23.947 に答える