PERFORM
void関数の呼び出しに使用されるplpgsqlコマンドです。 PLpgSQLは役に立たないSELECT
に注意しています ステートメント-SELECT
INTO
なし 句は許可されていません。ただし、関数を呼び出す必要があり、結果を保存する必要がない場合もあります(または関数に結果がない場合)。 SQL
の関数 SELECT
で呼び出されます 声明。ただし、PLpgSQLでは不可能です。したがって、コマンドPERFORM
導入されました。
CREATE OR REPLACE FUNCTION foo()
RETURNS void AS $$
BEGIN
RAISE NOTICE 'Hello from void function';
END;
$$ LANGUAGE plpgsql;
-- direct call from SQL
SELECT foo();
-- in PLpgSQL
DO $$
BEGIN
SELECT foo(); -- is not allowed
PERFORM foo(); -- is ok
END;
$$;
PERFORM
ステートメントはパラメーターを実行し、結果を忘れました。
あなたの例のperform 'create table foo as (select 1)';
SELECT 'create table foo as (select 1)'
と同じです。 。 「createtablefooas(select 1)」という文字列を返し、この文字列は破棄されます。
EXECUTE
ステートメントは式を評価して文字列を取得します。次のステップで、この文字列が実行されます。
したがって、EXECUTE 'create table ' || some_var || '(a int)';
2つのステップがあります
- 式を評価する
'create table ' || some_var || '(a int)'
-
some_var
の場合 たとえば、はmytabです。次に、コマンドcreate table mytab(a int)
を実行します。
PERFORM
ステートメントは、関数が代入ステートメントで使用されていない場合の関数呼び出しに使用されます。 EXECUTE
動的SQLの評価に使用されます-実行時にSQLコマンドの形式がわかっている場合。