60

SQL Serverを使用すると、SQL Server Management Studioまたはその他のクライアントを介して、完全な手続き型ロジックを使用してコードアドホックT-SQLコードを実行できます。私はPostgreSQLの使用を開始しましたが、PGSQLでは関数にロジックを埋め込む必要があるという点で少し違いがあります。

実行関数を作成せずにPL/PGSQLコードを実行する方法はありますか?

4

3 に答える 3

77

Postgres 9

DO $$ 
-- declare
BEGIN
  /* pl/pgsql here */
END $$;
于 2010-10-25T16:44:27.417 に答える
6

いいえ、まだです。バージョン9.0(まだアルファ版)にはこのオプションがあります(実行)。リリースされるまで待つ必要があります。

于 2010-04-02T22:31:59.717 に答える
1

正確に適切な場所にセミコロンを追加することはかなり厳格であるため、これを機能させるのに苦労しました。しかし、それに慣れれば、それはうまく機能します。もちろん、レコードを返すことができないことに加えて、通知と例外を発生させたり、@ErwinBrandstetterが上記のコメントで指摘したように一時テーブルを使用するなどの他の回避策を実行したりできます。

例えば:

DO 
$$
BEGIN
  IF EXISTS(SELECT 'any rows?' 
              FROM {your_table} 
              WHERE {your_column} = 'blah')
  THEN
      RAISE NOTICE 'record exists';
  ELSE
      RAISE EXCEPTION 'record does not exist';
  END IF;

  DROP TABLE IF EXISTS foo;

  CREATE TEMP TABLE foo AS
  SELECT 'bar'::character varying(5) as baz;
END 
$$;

SELECT * FROM foo;
于 2017-12-06T04:06:20.057 に答える