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

PostgreSQL関数の引数としてのテーブル

    パラメータなどのテーブルを渡すことはできません。テーブルの名前のみを渡すことができます:

    CREATE FUNCTION test.fcttest(tbl text) RETURNS SETOF test.out_table AS $$
    BEGIN
      EXECUTE format('INSERT INTO test.out_table '
                       'SELECT id, another_field FROM %I', tbl);
      RETURN QUERY EXECUTE format('SELECT id, another_field FROM %I', tbl);
    END;
    $$ LANGUAGE plpgsql;
    

    テーブル名を渡すときは、動的コマンドを実行する必要があります。これは、plpgsql関数でのみ実行できます。 format()の使用 %Iで機能する 修飾子はSQLインジェクションから保護します。行は、RETURN NEXT QUERYを使用して返されます フレーズ、これも動的コマンドを使用します。

    このロジックは両方であることに注意してください レコードのセットをテーブルtest.out_tableに挿入します 次に、同じレコードのセットを返します。それが本当に欲しいものかどうかわからない。




    1. SQLServerテーブルからn個のランダムな行を選択します

    2. 列名をフェッチするOracleクエリ

    3. データベースリンクを介してOracleでストアド関数(ユーザー定義型の配列を返す)を呼び出す

    4. 既存の列にIDを追加する