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

変数を使用せずにplpgsql関数に整数を返すようにできますか?

    はい、できます。いくつかの方法があります。

    1)RETURN (SELECT ...)

    CREATE OR REPLACE FUNCTION get(_param_id integer)
      RETURNS integer AS
    $func$
    BEGIN
       RETURN (SELECT col1 FROM TABLE WHERE id = _param_id);
    END
    $func$  LANGUAGE plpgsql;
    

    2)OUTを使用する またはINOUT パラメータ

    CREATE OR REPLACE FUNCTION get(_param_id integer, OUT _col1 integer)
    -- RETURNS integer -- "RETURNS integer" is optional noise in this case
      AS  
    $func$
    BEGIN
       SELECT INTO _col1  col1 FROM TABLE WHERE id = _param_id;
    
       -- also valid, but discouraged:
       -- _col1 := col1 FROM TABLE WHERE id = _param_id;
    END
    $func$  LANGUAGE plpgsql;
    

    詳細はこちらのマニュアルをご覧ください。

    3)(Ab)INを使用 パラメータ

    Postgres 9.0以降 入力パラメータを使用することもできます 変数として。 9.0のリリースノート:

    入力パラメータは、渡された値に初期化されたローカル変数のように機能するようになりました。

    CREATE OR REPLACE FUNCTION get(_param_id integer)
      RETURNS integer AS
    $func$
    BEGIN
       SELECT INTO _param1  col1 FROM TABLE WHERE id = _param1;
       RETURN _param1;
    
       -- Also possible, but discouraged:
       -- $1 := col1 FROM TABLE WHERE id = $1;
       -- RETURN $1;
    END
    $func$  LANGUAGE plpgsql;
    

    最後のもので使用します 暗黙的に変数ですが、DECLAREする必要はありません 明示的に(要求に応じて)。

    4)DEFAULTを使用する INOUTの値 パラメータ

    これは少し特殊なケースです。関数本体は空にすることができます。

    CREATE OR REPLACE FUNCTION get(_param_id integer, INOUT _col1 integer = 123)
      RETURNS integer AS
    $func$
    BEGIN
       -- You can assign some (other) value to _col1:
       -- SELECT INTO _col1  col1 FROM TABLE WHERE id = _param_id;
       -- If you don't, the DEFAULT 123 will be returned.
    END
    $func$  LANGUAGE plpgsql;
    

    INOUT _col1 integer = 123 INOUT _col1 integer DEFAULT 123の短い表記です 。詳細:

    • 忘れられた代入演算子"="とありふれた":="

    5)代わりにプレーンSQL関数を使用してください

    CREATE OR REPLACE FUNCTION get(_param_id integer)
      RETURNS integer AS
    $func$
       SELECT col1 FROM TABLE WHERE id = _param_id;
       -- use positional reference $1 instead of param name in Postgres 9.1 or older
    $func$  LANGUAGE sql;
    



    1. MySQL JDBCドライバー接続文字列とは何ですか?

    2. MariaDB JSON_OBJECT()の説明

    3. PostgreSQLで2つのタイプのテーブルを作成します

    4. SQLServerの現在のデータベースのすべてのファイルグループを返す