sql >> データベース >  >> RDS >> PostgreSQL

関数からレコードのセット(仮想テーブル)を返します

    (これはすべてpostgresql 8.3.7でテストされています-以前のバージョンはありますか?「ALIASFOR $ 1」の使用を見てください)

    CREATE OR REPLACE FUNCTION storeopeninghours_tostring(numeric)
     RETURNS SETOF RECORD AS $$
    DECLARE
     open_id ALIAS FOR $1;
     result RECORD;
    BEGIN
     RETURN QUERY SELECT '1', '2', '3';
     RETURN QUERY SELECT '3', '4', '5';
     RETURN QUERY SELECT '3', '4', '5';
    END
    $$;
    

    (クエリ結果の代わりに)返すレコードまたは行変数がある場合は、「RETURNQUERY」ではなく「RETURNNEXT」を使用してください。

    関数を呼び出すには、次のようなことを行う必要があります:

    select * from storeopeninghours_tostring(1) f(a text, b text, c text);
    

    したがって、関数の出力行スキーマがクエリに含まれると予想されるものを定義する必要があります。これを回避するには、関数定義で出力変数を指定できます。

    CREATE OR REPLACE FUNCTION storeopeninghours_tostring(open_id numeric, a OUT text, b OUT text, c OUT text)
     RETURNS SETOF RECORD LANGUAGE 'plpgsql' STABLE STRICT AS $$
    BEGIN
     RETURN QUERY SELECT '1'::text, '2'::text, '3'::text;
     RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
     RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
    END
    $$;
    

    (追加の::テキストキャストが必要な理由はよくわかりません...「1」はデフォルトでvarcharである可能性がありますか?)



    1. リスト内のすべての項目に一致する行のグループを選択します

    2. 永遠にローカルホストを待っています!

    3. SQL Server:information_schemaから外部キー参照を取得する方法は?

    4. MacにSQLDeveloperをインストールする方法