10

Postgresから常に次のエラーが発生するのはなぜですか?

syntax error at or near "IF"

PostgreSQL:ドキュメント:8.3:制御構造を読みました。最初に(サブクエリを使用して)難しいクエリを実行しようとしましたが、次に次のような単純なクエリを実行しようとしました。

IF 2 <> 0 THEN select * from users; END IF;

エラーは同じです。私は何が間違っているのですか?

4

3 に答える 3

18
IF 2 <> 0 THEN select * from users; END IF;

plpgsql関数の外部でPL/pgSQL文を使用することはできません。そして、このフラグメントがplpgsql関数からのものである場合、それもナンセンスです。T-SQLのように、クエリの結果を直接返すことはできません。

CREATE OR REPLACE FUNCTION test(p int)
RETURNS SETOF users AS $$
BEGIN
  IF p = 1 THEN
    RETURN QUERY SELECT * FROM users;
  END IF;
  RETURN;
END;
$$ LANGUAGE plpgsql;

関数から何らかの結果を得る場合は、RETURNステートメントを使用する必要があります-plpgsqlは関数のみを認識し、プロシージャをサポートしていません-したがって、無制限のSELECTは意味がありません。

于 2012-04-04T14:20:08.217 に答える
5

そのPL/pgSQL制御構造を匿名ブロックまたはPL/pgSQL関数で囲んでいません。

この制御構造のSQLバージョンについては、のドキュメントを参照してくださいCASE

于 2012-04-04T13:45:21.820 に答える
1

そのPL/pgSQLを囲んでいません。それらは匿名コードブロックで囲む必要があります。コードの例:

DO $$ BEGIN

    IF 2 <> 0 THEN select * from users; END IF;

END$$;
于 2016-11-28T16:06:32.040 に答える