Postgresから常に次のエラーが発生するのはなぜですか?
syntax error at or near "IF"
私は PostgreSQL:ドキュメント:8.3:制御構造 を読みました。最初に(サブクエリを使用して)難しいクエリを実行しようとしましたが、次のような単純なクエリを実行しようとしました。
IF 2 <> 0 THEN select * from users; END IF;
エラーはまだ同じです。何が悪いのですか?
IF 2 <> 0 THEN select * from users; END IF;
PL/pgSQLステートメントをplpgsql関数の外で使用することはできません。そして、このフラグメントが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は意味がありません。
そのPL/pgSQL制御構造を anonymous block またはPL/pgSQL関数で囲んでいません。
この制御構造のSQLバージョンについては、ドキュメントの CASE
を参照してください。
そのPL/pgSQLを囲んでいません。 匿名コードブロック で囲む必要があります。あなたのコードの例:
DO $$ BEGIN
IF 2 <> 0 THEN select * from users; END IF;
END$$;