別のplpgsql関数から新しい関数を作成することは可能ですか?このようなもの:
CREATE OR REPLACE FUNCTION func_test()
RETURNS VOID AS
$BODY$
BEGIN
CREATE OR REPLACE FUNCTION func_test2()
RETURNS INT AS
BEGIN
$$
SELECT 1;
$$
END
END
$BODY$
LANGUAGE plpgsql;
上記のコードを実行すると、次のようになります。
ERROR: unexpected end of function definition at end of input LINE 13: $BODY$`
はい、完全に可能です。ランダムな構文エラーがいくつかあります。
また、Postgresにはストアドプロシージャがないため、クエリの「ストアドプロシージャ」という用語を「関数」に自由に置き換えることができました。機能だけ-ほとんど同じですが、まったく同じではありません。
これはうまくいくでしょう:
CREATE OR REPLACE FUNCTION func_test()
RETURNS VOID AS
$func$
BEGIN
CREATE OR REPLACE FUNCTION func_test2()
RETURNS INT AS
$$
SELECT 1
$$ LANGUAGE sql;
END
$func$ LANGUAGE plpgsql;
または:
CREATE OR REPLACE FUNCTION func_test()
RETURNS VOID AS
$func$
BEGIN
CREATE OR REPLACE FUNCTION func_test2()
RETURNS INT AS
$$
BEGIN
RETURN (SELECT 1);
END
$$ LANGUAGE plpgsql;
END
$func$ LANGUAGE plpgsql;
比較: