【发布时间】:2022-06-14 00:37:25
【问题描述】:
我有一个 bash 脚本,它将调用一个包含 postgres 存储过程的 sql 文件
if [ "$process_list" != "" ]; then
echo 'Processing 1:'$process_list;
psql -h $PPC_Postgres -p $PPC_Postgres_Port -d $PPC_Postgres_DB -U $PPC_Postgres_User -o ${TXT_FILE} -a -f @$PUBDIR/printidsprocedure.sql -v p_list=$process_list
fi
在 stored_procedure.sql 文件中,我定义了一个可以接受参数的存储过程。
create or replace procedure printids(
id_array varchar
)
language plpgsql
as $$
declare
cur REFCURSOR;
id int;
begin
open cur for select trim(token) from unnest(string_to_array(id_array,',')) token;
loop
fetch cur into id;
exit when not found;
raise notice '%','processing id:' || id;
end loop;
end;$$
call printids(:'p_list'); //calling the procedure defined above with sql file
我的问题是可以在同一个 sql 文件中调用该过程吗? 通过在 sql 文件中添加带有参数的调用语句?或者有更好的方法吗?
【问题讨论】:
-
您需要提供有关您希望脚本完成什么以获得可用答案的更多信息。仅供参考,它应该是
end;$$;,以免出现语法错误并且create or replace procedure printids不会失败。 -
将您评论中的信息作为格式正确的代码添加到您的问题中。
-
我正在将使用 oracle 代码的 bash 脚本转换为 postgres sql。第一个命令是将连接信息附加到日志文件,第二个命令是运行一个包含在 sql 文件中的过程
-
我必须用 >>EOF EOF 块包装 psql 命令,否则它会抛出“psql 处或附近的错误语法”。我对 bash 和 psql 脚本非常陌生,请帮助
-
所以我猜问题出在:
-f @$PUBDIR/printidsprocedure.sql $process_list?换句话说,让$process_list变成printidsprocedure.sql?这将深入到 BASH 脚本中,然后我去,所以其他人需要在这里提供帮助。
标签: sql postgresql psql procedure script