ファイルの実行と実行中のファイル編集の影響(実験<!-- --> | <!-- -->塩焼き太郎のブログ♪
塩焼き太郎のブログ♪

ファイルの実行と実行中のファイル編集の影響(実験

Posted: December 13, 2014

今回試したのが、
sqlファイルの実行中に、対象のファイルを編集したら、例えば未実行のsqlをファイルから削除したら、どのような挙動になるのか、というもの。

以下、実験結果。

test.sqlの中身 : create tableした後に10秒sleep、その後create tableするというもの。

create table scott.test1 ( sample number(10) ); set timing on execute DBMS_LOCK.SLEEP(10); create table scott.test2 ( samplaza number(10) );

sqlファイル実行中、
10秒のsleep中に二つ目のcreate table文をファイルから削除してみるとどうなるか。

結果は。。。

SQL> @test.sql Table created. Elapsed: 00:00:00.02 PL/SQL procedure successfully completed. Elapsed: 00:00:10.00 Table created. Elapsed: 00:00:00.01 SQL> desc scott.test13; Name Null? Type ----------------------------------------- -------- ---------------------------- samplaza NUMBER(10)

なるほど。一度ファイルが実行されたらその後ファイルの中身を編集しても実行時点で書かれてあるsqlが全て実行される。

これはシェルの挙動に由来しているのかもしれない(プロセスとか??)
となるとsqlがたくさん書かれたsqlファイルの実行中に、途中で停止したい場合はどうすれば良いのだろうか。。。
一般的なのはCtrl + Cなどで強制停止だろう。
当たり前だがシェル越しにsqlplus接続して実行しても同様の結果であった。
しかしながらCtrl + Cが効かない場合はどうなるのだろうか。。。
まさかsql一つずつファイルにして実行するくらいしか途中でのファイル編集の操作を有効にする手だてはないのだろうか。。。。

この部分について少し実験してみたところ、shellについては、以下の事が分かった。
cat : コマンド実行時にその時点でのファイルの中身を表示する

うーむ。なんとなく書き連ねたもののよくわからんな。。。