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