我试图在我的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脚本变量中。但是不知道该怎么做。
请帮忙,如果还有其他办法可以告诉我。
提前致谢
答案 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
虽然稍微更加间接,但它具有能够使用非常任意的内容传递多个值的优点,而不仅仅是一个限制在小整数范围内的数字。