SQL Serverを使用すると、SQL Server Management Studioまたはその他のクライアントを介して、完全な手続き型ロジックを使用してコードアドホックT-SQLコードを実行できます。私はPostgreSQLの使用を開始しましたが、PGSQLでは関数にロジックを埋め込む必要があるという点で少し違いがあります。
実行関数を作成せずにPL/PGSQLコードを実行する方法はありますか?
SQL Serverを使用すると、SQL Server Management Studioまたはその他のクライアントを介して、完全な手続き型ロジックを使用してコードアドホックT-SQLコードを実行できます。私はPostgreSQLの使用を開始しましたが、PGSQLでは関数にロジックを埋め込む必要があるという点で少し違いがあります。
実行関数を作成せずにPL/PGSQLコードを実行する方法はありますか?
Postgres 9
DO $$
-- declare
BEGIN
/* pl/pgsql here */
END $$;
いいえ、まだです。バージョン9.0(まだアルファ版)にはこのオプションがあります(実行)。リリースされるまで待つ必要があります。
正確に適切な場所にセミコロンを追加することはかなり厳格であるため、これを機能させるのに苦労しました。しかし、それに慣れれば、それはうまく機能します。もちろん、レコードを返すことができないことに加えて、通知と例外を発生させたり、@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;