在一个存储过程中调用多个存储过程

时间:2021-07-15 18:10:33

标签: sql postgresql stored-procedures

我想创建一个调用多个其他存储过程并将输出参数保存到变量中的存储过程,因为每个存储过程的输出都是下一个存储过程的输入参数。

我的代码如下:

CREATE PROCEDURE sa.sp_step0(inout name text)
LANGUAGE plpgsql
AS $$
DECLARE 

id text;
run text;
tables_step2 text[];
tables_step3 text[];
tables_step4 text[];
table_step5 text;

BEGIN

    
    call sa.sp_step1(model_name) insert into id,run;
    call sa.sp_step2(id,run) insert into id,run,tables_step2;
    call sa.sp_step3(id,run,tables_step2) insert into id,run,tables_step3;
    call sa.sp_step4(id,run,tables_step3) insert into id,run,tables_step4;
    call sa.sp_step5(id,run,tables_step4) insert into id,run,tables_step5;

    return;
end
$$;

我收到以下错误:

<块引用>

SQL 错误 [42601]:错误:“插入”处或附近的语法错误¶

2 个答案:

答案 0 :(得分:1)

在我看来,您好像在使用其他数据库产品的语法。

要在 PostgreSQL 中执行您要执行的操作,您需要declare your procedures 像这样:

CREATE PROCEDURE sp_step1(IN model_name TEXT, INOUT id TEXT, INOUT run TEXT)
LANGUAGE plpgsql
AS...

然后call your procedures as

call sa.sp_step1(model_name, id, run);
call sa.sp_step2(id, run, tables_step2);
call sa.sp_step3(id, run, tables_step2, tables_step3);
...

答案 1 :(得分:0)

当我找出自己的错误并帮助其他人在 www.....

基本上,如果要将存储过程的输出保存到变量中,可以执行以下操作:

execute ('sa.sp_step1(''' || model_name|| ''')') into id,run;
相关问题