如何在匿名块中运行sql脚本?

时间:2017-08-21 18:42:08

标签: sql bash plsql

是否可以在匿名块中运行sql脚本?

我希望能够有条件地运行sql脚本。

#!/bin/bash
.
.
.
`sqlplus -S /nolog > log3 << EOFSQL
connect ${userName}/${userPassword}@${urlDataBase};
set serveroutput on
set pagesize 0
set feedback off
set verify off
set heading off
set wrap off
set linesize 150
DECLARE
lv_error VARCHAR2(100):='';
BEGIN
SELECT TRIM(STATUS) INTO lv_error FROM tab1
WHERE ...

IF lv_error NOT LIKE 'ERROR%' THEN
START $(pwd)/script.sql;
/

END IF;
END;
/

1 个答案:

答案 0 :(得分:0)

在您的情况下,最好编写一个PL / SQL过程并从shell脚本中调用它。这样,有条件地调用第二个sql函数/过程就更容易了。

或者,如果您想将逻辑保留在shell脚本中,请将第一个SQL的输出假脱机,然后读取它并调用第二个sql脚本。

像这样。

#!/bin/bash
.
.
.
sqlplus -S /nolog > log3 << EOFSQL
connect ${userName}/${userPassword}@${urlDataBase};
spool spool_out.txt
set linesize 150
DECLARE
lv_error VARCHAR2(100):='';
BEGIN
SELECT TRIM(STATUS) FROM tab1
WHERE ...

END;
/

EOFSQL


errorPresent=`cat spool_out.txt|grep "ERROR"`
if [ ! -z $errorPresent ]
the
    #Call $(pwd)/script.sql;
fi