将更新查询的输出显示到shell脚本中

时间:2015-12-28 14:27:00

标签: oracle shell unix sql-update sqlplus

我试图在我的shell脚本上显示更新语句“5行插入”的结果。

我能想出的一种方法是

Declare count number;

Begin

Update tablename set colname="k";
count=sql%rowcount;
Dbms.out.put_line(count);
Commit;

End

sql plus count变量获取值但我无法在我的shell脚本中使用它。

我必须将sql plus变量的值复制到shell脚本变量中。但是不知道该怎么做。

请帮忙,如果还有其他办法可以告诉我。

提前致谢

2 个答案:

答案 0 :(得分:0)

SQL*Plus退出并带有您想要的值。这是一个示例(将其作为UNIX脚本运行):

sqlplus my_username/my_password@my_database << EOF
variable count number;

begin
  update mtl_system_items  -- your update goes here!
  set last_update_date = last_update_date
  where rownum <= 5;

  :count := SQL%ROWCOUNT;

  DBMS_OUTPUT.PUT_LINE(:count);
  ROLLBACK;
END;
/


EXIT :COUNT;
EOF

echo Return code was $?

也就是说,当您从SQL * Plus中EXIT :COUNT时,您的COUNT变量的值将在UNIX脚本的$?中访问。您需要立即将其保存到另一个变量中,因为如果在脚本中运行任何其他命令,$?将被覆盖。

答案 1 :(得分:0)

我建议在假脱机文件中编写变量赋值,然后在shell脚本中读取它。例如:

sqlplus -s apps/apps@vis <<EOF
set feedback off lines 150 pages 0 head off termout off serveroutput on size 10000 echo off
variable count number;

begin
  -- Emulation of update that updates 40000 rows
  :count := 40000;
end;
/

spool outvars.sh
begin
  dbms_output.put_line('COUNT=' || :count);
end;
/
spool off

exit
EOF

. outvars.sh
echo "Back in shell, COUNT=$COUNT"

将导致此输出:

COUNT=40000
Back in shell, COUNT=40000

虽然稍微更加间接,但它具有能够使用非常任意的内容传递多个值的优点,而不仅仅是一个限制在小整数范围内的数字。