2017-04-13 1 views
0

ストアド・プロシージャ/ファンクションについては初心者です。私はGoogle、Stackoverflow、Youtubeを検索して、いろいろな種類の例を探しています。ストアド・ファンクションpostgresql return table

PostgreSQLでテーブルを返すためのストアドファンクションの基本的な構文を理解しようとしています。 MySqlではこれは初歩的なものですが、私はPostgresqlの構文を頭に入れていないようです。以下に示すように、必要な行(テーブル)を返す必要があるSQL文があります。私は次のコードを試したが動作しません。ヘルプは大変ありがとうございます。事前に感謝します。

CREATE OR REPLACE FUNCTION Getcurrent() 
RETURNS table AS $schedule$ 

$BODY$ BEGIN 

SELECT * 
FROM archived_table 
WHERE table_id>=ALL(SELECT table_id FROM archived_table); 

RETURN schedule; 
END;$BODY$ 
    LANGUAGE plpgsql; 

********** **********エラー

ERROR: syntax error at or near "AS" 
LINE 2: RETURNS table AS $schedule$ 
        ^

これはエラーメッセージです。

私は以下のリンクを参照しており、これには運がありませんでした。 https://www.postgresql.org/docs/9.1/static/sql-createfunction.html 私の会社のサーバー上の公開スキーマのpgAdminIIIを使用しています。

目的の結果は、関数が呼び出された後にテーブルを返すことです。

+1

'戻ります。 –

+0

無関係ですが、最も高い 'table_id'を持つ行を返すつもりなら、Postgresでこれを行うもっと効率的な方法があります。 –

+1

また、「* MySqlでこれは基本的なものです」*「いいえ、関数から結果セットを返すことができないからです。 –

答えて

0
create or replace function test_fn() 
returns table("Num1" int, "Num2" int) 

AS $$ 
BEGIN 

return query 
select 1, 2; 

END; $$ 

LANGUAGE 'plpgsql'; 

それを呼び出すには:

select * from test_fn() 
0

RETURNS TABLEは、したがって、エラー・メッセージ、完全ではありません。

テーブルのすべての列を返す場合は、RETURNS SETOF <table_name>フォームを使用できます。

そうでなければ、RETURNS TABLEのいずれかで、名前とタイプで、すべての出力列を言及する必要があります:

RETURNS TABLE (
    col_alias_1 INT, 
    col_alias_2 TEXT, 
    col_alias_3 <some_other_type>, 
    ... 
) 

それともOUT parameters + RETURNS SETOF RECORDとあなたは(おそらく)一度に複数の行を返すだろうことを示すために、 。あなたの操作は、いくつかのSQL文のように単純であれば

また、代わりにLANGUAGE SQLを使用する:あなたが投稿手動リンクに示すように、列のリストを必要とtable`

CREATE OR REPLACE FUNCTION Getcurrent() 
    RETURNS SETOF archived_table 
    LANGUAGE SQL 
AS $BODY$ 
    SELECT * 
    FROM archived_table 
    WHERE table_id>=ALL(SELECT table_id FROM archived_table); 
$BODY$; 
+0

ポーズあなたの2番目のボックスは、魅力のように働いた、ありがとう。私はストアドプロシージャの詳細を学んでいるところですが、私は実際にどのように "setofレコードを返す" – Bolaji

関連する問題