如何使用Shell脚本在Postgresql中执行过程调用?

时间:2019-09-10 06:50:27

标签: postgresql shell

我需要使用shell脚本在PostgreSQL中执行一个过程。

psql(9.2.13,服务器11.1)

请检查以下详细信息。

[genadmin@app7cn scripts]$ echo "var x clob;
> var y number;
> exec sysreg.WRITEVALUE_1('IPF_ADMIN','/Infinys/Installer/Installed/PF/InstallParameters/PF_CONTAINER_USER_PASSWORD','$encrypted_pwd',null, :x, :y);
> rem print :x :y
> "|PGPASSWORD=dbpasswd psql -h dbhost -d db_sid -U dbuser

代码:

if [ ! -z "${staged_enc}" ]; then
        echo "
        set heading off;
        set lines 1000
        set feedback off;
        set serveroutput on;
        var x clob;
        var y number;
        exec sysreg.WRITEVALUE_1('$dbuser','/Infinys/Installer/Staged/PF/InstallParameters/PF_CONTAINER_USER_PASSWORD','$encrypted_pwd', null, :x, :y);
        rem print :x :y
        " | sql
   fi

这是为oracle写的。 我需要将其转换为Postgresql。

得到以下错误:

ERROR:  syntax error at or near "var"
LINE 1: var x clob;
        ^
ERROR:  syntax error at or near "var"
LINE 1: var y number;
        ^
ERROR:  syntax error at or near "exec"
LINE 1: exec sysreg.WRITEVALUE_1('IPF_ADMIN','/Infinys/Installer/Ins...
        ^
ERROR:  syntax error at or near "rem"
LINE 1: rem print :x :y

1 个答案:

答案 0 :(得分:1)

首先,将psql升级到低于9.2的古老版本。

我将在此处使用DO语句:

psql -h dbhost -d db_sid -U dbuser <<EOF
DO
\$\$DECLARE
   x integer;
   y integer;
BEGIN
   CALL myprocedure(x, y);
   RAISE NOTICE '%, %', x, y;
END;\$\$
EOF