web-dev-qa-db-ja.com

postgresqlでローカル変数を宣言する方法は?

ほぼ同じですが、実際には答えられていない質問があります here

MS SQL ServerからPostgreSQLにアプリケーションを移行しています。コード内の多くの場所でローカル変数を使用しているので、必要な作業が少ない変更に行きたいので、次のコードを翻訳する最良の方法を教えてください。

-- MS SQL Syntax: declare 2 variables, assign value and return the sum of the two 
declare @One integer = 1
declare @Two integer = 2
select @One + @Two as SUM

これは返します:

SUM
-----------
3

(1 row(s) affected)

翻訳を簡素化する重要な機能が含まれている場合、Postgresql 8.4または9.0を使用します。

48
LaBracca

歴史的に、Postgresqlはコマンドレベルで手続き型コードをサポートしていません-関数内でのみ。ただし、Postgresql 9では、 インラインコードブロックの実行 にサポートが追加されました。これは、構文がおそらく少し奇妙で、できることと比べて多くの制限がありますが、このようなものを効果的にサポートしますSQL Serverで。特に、インラインコードブロックは結果セットを返すことができないため、上記の概要に使用することはできません。

一般に、手続き型コードを作成して結果を返す場合は、関数内に配置する必要があります。例えば:

CREATE OR REPLACE FUNCTION somefuncname() RETURNS int LANGUAGE plpgsql AS $$
DECLARE
  one int;
  two int;
BEGIN
  one := 1;
  two := 2;
  RETURN one + two;
END
$$;
SELECT somefuncname();

PostgreSQLワイヤプロトコルは、私の知る限り、複数の結果セットを返すコマンドのようなものを許可していません。したがって、T-SQLバッチまたはストアドプロシージャをPostgreSQL関数に単純にマッピングすることはできません。

73
araqnid