2016-07-05 6 views
0

シェルスクリプトから直接SQLコマンドを呼び出す際に問題があります。私のシェルスクリプトは、次のコマンドが含まれています。シェルスクリプトからsqlplusが呼び出されました

set x = `sqlplus -S $ISLK_ORACLE_UID` <<EOF 

delete from rc where rcd_id = 1 ; 
update rcd set standard = 'Test_DB7' where id = 1 ; 
delete from rc where rcd_id = 2 ; 
update rcd set standard = '700' where id = 2 ; 
delete from rc where rcd_id = 5 ; 
update rcd set standard = 'DB7' where id = 5 ; 
delete from rc where rcd_id = 998 ; 
update rcd set standard = '2001-2050' where id = 998 ; 

delete from rc where rcd_id=3004 ; 

begin 
for fd_rec in (select * from fd) 
loop 
    insert into rc values(1008, 1, fd_rec.id, '[email protected]') ; 
end loop ; 
end ; 

commit; 

EOF 

単一のコマンドは(、更新を削除)何の問題もなく完了したが、THWループは、(文の後に挿入されたもの)を行うことがないように思われていません。問題が何であるか考えている人がいますか?あなたは、単一のSQL文を使ってループを書き換えることができ

事前のおかげでたくさんの お祈り申し上げます イェルク

+0

fdテーブルにはいくつかの行が含まれていますか? –

答えて

0

insert into rc select 1008, 1, id, '[email protected]' from fd; 

これはことを考えると、(私には)より読みやすく、より効率的ですPL/SQLとループは使用されませんが、単純に純粋なSQLに依存します。

+0

素晴らしいです、これは動作します。しかし、PL/SQLがこのように正しく機能しない理由に関心があります。 –

+0

pl/sqlブロックの後ろに '/'が足りないことはありますか? – Aleksej

+0

あなたは正しいです。私はデータベースをRdBからOracleに移行しています。 RdBで/は必要ではなかったので、私はいつもそれを忘れる。 ありがとうございました –

関連する問題