【问题标题】:Calling Postgres procedure within same sql file在同一个 sql 文件中调用 Postgres 过程
【发布时间】: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


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2019-08-04
相关资源
最近更新 更多