Postgresql

從另一個函式創建一個函式

  • December 8, 2015

是否可以從另一個 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;

比較:

引用自:https://dba.stackexchange.com/questions/123138