Ske*_*eve 4 postgresql ddl plpgsql functions
是否可以从另一个 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;
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我得到:
Run Code Online (Sandbox Code Playgroud)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;
Run Code Online (Sandbox Code Playgroud)
或者:
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;
Run Code Online (Sandbox Code Playgroud)
相比: