sql - 嵌入定义绑定(bind)变量的 Oracle PL/SQL 代码的 Shell 脚本

标签 sql oracle bash plsql

如果我运行下面的脚本,我会得到错误 SP2-0552:未声明绑定(bind)变量“OUTRES”。 那么,如何定义绑定(bind)变量OUTRES,定义在哪里呢?

#!/usr/bin/bash
sqlplus -s scott/tiger << EOF 
declare ret varchar2(10):= '0';
begin
  begin
    insert into mytab(col1) values(1);
  exception
    when others then
      ret:=ret||'1';
  end;
  select ret into :OUTRES from dual;
end;
/
quit
EOF

最佳答案

如果要在sqlplus中声明绑定(bind)变量。使用 VAR 关键字。

sqlplus -s scott/tiger << EOF 
VAR OUTRES NUMBER;
BEGIN
  NULL; /* Your Statements */
END;
/
EOF

你也可以试试 quit :OUTRES

quit :OUTRES
EOF
MYRESULT=$?
echo $MYRESULT

UNIX中输出返回状态。

#!/usr/bin/bash
sqlplus -s scott/tiger << EOF 
VAR OUTRES NUMBER;
declare ret varchar2(10):= '0';
begin
  begin
    EXECUTE IMMEDIATE 'insert into mytab(col1) values(1)';
  exception
    when others then
      dbms_output.put_line(SQLERRM);
      ret:=ret||'1';
  end;
  :OUTRES := ret;
end;
/
quit :OUTRES
EOF
MYRESULT=$?
echo $MYRESULT

关于sql - 嵌入定义绑定(bind)变量的 Oracle PL/SQL 代码的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21251630/

相关文章:

oracle - plsql sleep 而不使用 dbms_lock.sleep/DBMS_SESSION.sleep

sql - 使用两个(或更多) '@' 符号声明 SQL Server 变量会产生什么后果?

mysql - SQL:在一个复杂查询中组合两个选择

java - 为什么registerOutParameter不接受OracleTypes.VARCHAR?

此 Oracle 触发器的 MySQL 等效代码

c++ - 如何在不使用 argv 和 argc 的情况下将总和值传递给 C++ 程序

linux 使用 watch 命令进行多次调用

python - 关闭 Ubuntu 的脚本

c++ - QSqlDatabase 检查数据库是否已经存在

php - Laravel 上的外键约束形成不正确