Postgresql
從另一個函式創建一個函式
是否可以從另一個 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;
比較: