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

PL/pgSQLの実行と実行

    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つのステップがあります

    1. 式を評価する'create table ' || some_var || '(a int)'
    2. some_varの場合 たとえば、はmytabです。次に、コマンドcreate table mytab(a int)を実行します。

    PERFORM ステートメントは、関数が代入ステートメントで使用されていない場合の関数呼び出しに使用されます。 EXECUTE 動的SQLの評価に使用されます-実行時にSQLコマンドの形式がわかっている場合。



    1. Oracleデータベースに大きなコンテンツを入力する

    2. DockerComposeでMySqlデータベースを初期化する方法

    3. IN MySQLステートメントでワイルドカードを使用できますか?

    4. PATINDEXを使用してT-SQLでさまざまな長さのパターンを見つける