create or replace procedure procedure_1()
language plpgsql
as $$
declare
precedure procedure_2()
begin
select 1;
end
begin
select 1;
end; $$
有什么方法可以在 procedure_1()
中声明 procedure_2()
吗?
最佳答案
是 - 如果“声明”是指“创建”。
CREATE OR REPLACE PROCEDURE procedure_1(INOUT result int)
LANGUAGE plpgsql AS
$proc1$
BEGIN
CREATE OR REPLACE PROCEDURE procedure_2(INOUT result int)
LANGUAGE plpgsql AS
$proc2$
BEGIN
result := 2;
END
$proc2$;
result := 1;
END
$proc1$;
db<> fiddle here
您只需正确引用即可。请参阅:
函数和过程不是“声明”的,而是"created"在 Postgres 中。这会在数据库中创建一个对象,然后所有具有适当权限的人都可以看到并使用该对象。 (不仅仅是过程或事务本地的临时对象。)
但是,您可以使用此“黑客”创建一个“临时”函数或过程 - 如果您就是这么想的话:
关于postgresql - PostgreSQL 可以在过程中声明过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71543015/