【问题标题】:Displaying the output of update query into shell script将更新查询的输出显示到 shell 脚本中
【发布时间】:2015-12-28 14:26:59
【问题描述】:

我正在尝试在我的 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 脚本变量中。但不知道该怎么做。

请帮忙,如果还有其他方法可以让我知道。

提前致谢

【问题讨论】:

    标签: oracle shell unix sql-update sqlplus


    【解决方案1】:

    让SQL*Plus exit 带有您想要的值。这是一个示例(将其作为 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 脚本中的 $? 中访问。您需要立即将其保存到另一个变量中,因为如果您在脚本中运行任何其他命令,$? 将被覆盖。

    【讨论】:

    • 嗨马修,感谢您的解决方案,但 $ 的价值?没有存储在变量中。当我打印变量时,它显示的是空白值。
    • 认真的吗?您将以上内容粘贴到 UNIX 脚本中,运行它,但它没有打印“返回代码为 5”?您正在运行什么 UNIX?
    【解决方案2】:

    我建议在假脱机文件中写一个变量赋值,然后在你的 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
    

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

    【讨论】:

      猜你喜欢
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 2014-03-17
      • 2015-05-30
      • 2018-07-03
      • 1970-01-01
      相关资源
      最近更新 更多