我需要使用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
答案 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