在脚本中重用相同的SQL子句

时间:2019-02-02 22:58:05

标签: sql shell unix

这种情况是我在unix脚本中有一个SQL子句,例如:

sqlplus -s user/pass << END_SQL1 >> outfile.txt
set echo off feedback off heading off tab off;
select ..... 
from ....
where ...
and ...
and ... ;
END_SQL

如果outfile.txt不为空,这意味着我从上述SQL中得到了结果,那么我正在运行一个更新SQL,该SQL应该更改某些DB元素。

然后,我需要重用上面相同的SQL,以检查我想要的数据库元素是否确实发生了更改。因此,可以重用此相同的SQL,但稍后无需在脚本中再次包含相同的SQL代码,而是再次运行它,甚至可以将结果放在另一个输出文件中,例如outfile2.txt吗?

2 个答案:

答案 0 :(得分:0)

您可以在脚本内使用RETURNING ... INTO ...子句

   UPDATE myTable
      SET col1 = <something1>
    WHERE col2 = <something2>
RETURNING col3, col1 INTO v_col3, v_col1;

将结果返回到变量v_col3v_col1中。

答案 1 :(得分:0)

您可以将多毛的SELECT查询放入文件中,例如select.sql。然后,每当需要运行SQL时,您都可以执行以下操作:

sqlplus -s user/pass @select.sql >> outfile.txt

您可以根据需要调整输出文件:

sqlplus -s user/pass @select.sql >> outfile2.txt

注意:你说过

  

如果outfile.txt不为空,则表示我从上述SQL中得到结果

在写入>时,您可能想使用outfile.txt>> 追加到文件,而>替换它。