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

%TYPEを使用してPostgreSQLで複合型の変数を宣言します

    %ROWTYPEを使用します その場合。

    編集-単純なケース

    A.H.とDavidEGによるテストでは、これは機能しないことが示されています。興味深い問題です!
    回避策を試すことができます 。あなたの定義が例のようである限り、あなたは単に頼ることができます

    CREATE FUNCTION test(param1 comp_type)
      RETURNS integer AS
    $BODY$ 
    DECLARE
        myvar comp_type;
    BEGIN
        return 1;
    END;
    $BODY$
      LANGUAGE plpgsql VOLATILE;
    

    しかし、あなたの本当の問題はおそらくそれほど単純ではありませんか?

    編集2-本当の問題

    予想どおり、実際の問題はもっと複雑です。多態的な入力タイプ
    回避策 そのシナリオではより困難でしたが、問題なく機能するはずです:

    CREATE FUNCTION test(param1 anyelement, OUT a integer, OUT myvar anyelement)
      RETURNS record AS
    $BODY$
    BEGIN
        myvar := $1;  -- myvar has now the required type.
    
        --- do stuff with myvar.
    
        myvar := NULL;  -- reset if you don't want to output ..
        a := 1;
    END;
    $BODY$
      LANGUAGE plpgsql VOLATILE;
    

    電話:

    SELECT a FROM test('("foo")'::comp_type); -- just retrieve a, ignore myvar
    

    完全な出力を見る:

    SELECT * FROM test('("foo")'::comp_type);
    

    PostgreSQL9.0以降に関する注意

    v9.0には重要な更新があります。 リリースノート を引用します :

    エルゴ、私の回避策に加えて、入力変数を直接利用できます。

    動的ファイル名




    1. SQLite Count()をGROUP BYと組み合わせて、結果セットに「カウント」列を追加します

    2. 安全な方法でSQLインジェクション攻撃を防ぐ方法

    3. AUTO_INCREMENTおよびLAST_INSERT_ID

    4. カンマ区切りの文字列を分割->FUNCTIONdb.CHARINDEXが存在しません