2017-08-21 6 views
0

匿名ブロックでSQLスクリプトを実行することはできますか?匿名ブロックで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; 
/
+0

あなたはシェルスクリプトを使用していますか? –

+0

sqlスクリプトを実行するbashスクリプトに無名ブロックが書き込まれます。 – MartinusP

+0

いいえ、データベース・サーバーで実行されているPL/SQLは、クライアント・アプリケーションをコールできません。 –

答えて

0

場合によっては、PL/SQLプロシージャを作成し、シェル・スクリプトから呼び出す方がよい場合があります。そうすれば、条件付きで2番目のSQL関数/プロシージャを呼び出す方が簡単です。

または、シェルスクリプトのロジックを保持する場合は、最初のSQLの出力をスプールしてから、それを読み取り、2番目の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 
+0

これは解決策ですが、プロシージャを作成したくないです あなたはどう思いますか? errorPresent = 'cat spool_out.txt | grep" ERROR "' [-z errorPresent] エコー終了| sqlplus $ {userName}/$ {userPassword} @ $ {urlDataBase} @ $(pwd)skrypt.sql fi – MartinusP

関連する問題