• ベストアンサー

SQL*PLUSでファイルからDELETE文

rallyの回答

  • ベストアンサー
  • rally
  • ベストアンサー率28% (32/111)
回答No.1

SQL*Plusには、ファイルの内容をリダイレクトで実行する機能があります。 DOSプロンプトから >PLUS80W.EXE system/manager@orcl < delete.sql と入力してください。 ただし、ユーザー名、パスワード、インスタンス名などはそちらの環境に合わせてください。 ちなみに、delete.sqlの最後に、exitと記述しておけば、終了後にSQL*plusを自動的に終了します。 また、delete.sqlの先頭に、spool delete.logとしておけば、実行のログを作成できます。 SQL*Plusの実行ファイル名はOSやOracleのバージョンによって変わりますが、NTのOracle8なら上記のファイル名で大丈夫だと思います。

noname#1752
質問者

お礼

ありがとうございました。 大変勉強になりました。

関連するQ&A

  • SQL*Plusの実行結果にSQL文も残したいです

    SQL*Plusをスクリプトファイルを使って実行した際、実行SQLの出力はできないものでしょうか? 以下のようにスクリプトファイルを使ってSQL*Plusを実行し、その結果をログファイルへ 残しています。この時ログファイルには、実行結果は出力されるのですが、実行SQLは 出力されないようです。なんとかして実行SQLと、実行結果を作業ログとして残したいと 考えているのですが、何かよい方法はないものでしょうか? [ama@rh01 test]$ sqlplus scott/tiger@orcl @test01.sql > test01.log ■環境 Red Hat Linux 4 Oracle10g ■以下test01.sqlの中身です。 ---ここから-------------- create table ex01 ( c1 number, c2 varchar2(10), c3 varchar2(40) ); insert into ex01(c1,c2,c3) values(1,'AA1','BBB1'); select * from ex01; update ex01 set c2='aa1' where c1 =1; select * from ex01; exit; ---ここまで-------------- ■以下ログファイルの中身です。 ---ここから------------------ [ama@rh01 test]$ cat test01.log 省略 With the Partitioning, OLAP and Data Mining options に接続されました。                       ←ここにcreate文を出力したいです。 表が作成されました。                       ←ここにinsert文を出力したいです。 1行が作成されました。                       ←ここにselect文を出力したいです。 C1       C2   C3 ---------- ---------- ---------------------------------------- 1        AA1   BBB1                       ←ここにupdate文を出力したいです。 1行が更新されました。                       ←ここにselect文を出力したいです。 C1      C2 C3 ---------- ---------- ---------------------------------------- 1 aa1 BBB1 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning, OLAP and Data Mining optionsとの接続が切断されました。 [ama@rh01 test]$ -------------------ここまで--------------- どなたか良いアドバイスいただけたらと思います。 どうぞよろしくお願いします。

  • PL/SQLのDELETE文について

    PL/SQLでDELETE文を書こうとしているのですが、 文法がわかりません。。。 分かる方がおられましたら、教えてくださいm(_ _)m 今、TABLE1を削除したいのですが、条件がいろいろあって、 以下のように書いてみたのですがダメでした。 こういう書き方は、できないんでしょうか・・・。 削除条件は、TABLE2に存在し、かつ、TABLE2のTENSUが0のもので、 TABLE3が存在しないものです。 DELETE TABLE1 FROM TABLE1 ,TABLE2 ,TABLE3 WHERE TABLE1.ID = TABLE2.ID AND TABLE2.TENSU = 0 AND Not Exists (SELECT TABLE3.ID FROM TABLE3 WHERE TABLE3.ID = TABLE2.ID) 説明が下手なので、うまく、伝わっているか、心配なのですが・・・、 よろしくお願いします。

  • DELETE文でFROM句を省略した場合

    ちょっと疑問に思った程度の事なのですが DELETE文でFROM句を省略した場合の処理について質問です。 DELETE文の構文で DELETE FROM table_nam; と DELETE table_name; で、処理結果は同じだと思うのですが、 FROM句と付けた時と付けていない時とでは、内部的な処理に何か違いがあるのでしょうか?

  • SQL : たしかに DELETE したの?

    ありがちな処理かと思いまして質問させていただきます。 SQLで DELETE を行う際、WHERE で絞り込んだ対象行がなくても、  「エラーは返ってこない」 ということですが、NOT FOUND判定はするのでしょうか。 ごく単純に、削除しようとしたデータが実際にあったのかを確認したいのです。 やろうとしている処理は、次のようなものです。 DELETE FROM a_tbl WHERE NOT EXISTS (SELECT row1 FROM b_tbl WHERE row1 = 'input_data' ) AND NOT EXISTS (SELECT row1 FROM c_tbl WHERE row1 = 'input_data' ); ようするに、他のテーブルに、すでにない行であることが前提で、 a_tbl から DELETE したことを確認したいのです。 Pro*C内で実行するのですが、一般に同じだと思います。 キホンのキかもしれませんが、よろしくお教えください。

  • EclipseでMySQLにDELETE文を二つまとめて送れない

    環境 WindowsXP Eclipse3.4 MySQL5.1 Server str="DELETE FROM table1 where id=28;DELETE FROM table2 where id=28";という文を実行したのですが 動作しなくて困っています。分かる方がいましたら教えてください。 よろしくお願いします。 st.executeUpdate(str);を利用し、DELETE文ひとつの場合は実行できました。 MySQLServerに直接入力しても実行できました。 しかしEclipseから読み込んで実行すると com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELETE FROM table2 where id=28' at line 1 というエラーがでてわかりません。 分かる方がいましたらよろしくお願いします。

    • ベストアンサー
    • Java
  • Shell SQL*Plus終了後の処理

    ShellでSQL*PLUSを実行した時に SQL実行後にShellの処理が行われません。 処理内容:Truncateした後にSQL*Loderで再度データを流し込みを行う。 <Script> echo "S" sqlplus $ora_pass << EOF > $scrLOG truncate table W_TableA ; truncate table W_TableB ; select 'OK!' from dual ; Exit EOF echo "E" cat $scrLOG sqlldr $ora_pass $inv_ctl $inv_log 上記のScriptでEcho ”S”はDOS画面に表示されますが、 SQL実行後にEcho ”E”が出力されません。 ”S”出力後は通常のコマンド入力画面が表示されます。 何がいけないのでしょうか? どなたかわかる方がいればご教示いただきたいです。

  • バッチファイルを使用したsql@plusの実行及びログ出力について

    バッチファイルを使用したsql@plusの実行及びログ出力について Windows Server 2003上で動作しているOracle10gのDBに対して Windows XP上に配置したバッチファイルをタスクで起動させ、 sql@plusを使用してデータを削除する処理を行いたいと考えています。 ---data_delete.bat--- @echo %date% %time% データ削除開始 >> log.txt sqlplus -S USER/PASS@TNSNAME @data_delete.sql >> log.txt @echo %date% %time% データ削除終了 >> log.txt ---data_delete.sql--- DELETE FROM TABLE WHERE FLG = 1; EXIT; data_delete.batを実行するとlog.txtが出力されます。 ---log.txt--- yyyy/mm/dd hh:nn:ss.xx データ削除開始 XXX行が削除されました。 yyyy/mm/dd hh:nn:ss.xx データ削除終了 この時、log.txtの内容を下記のように変更したいのですが、 その方法が分りません。 ---log.txt--- yyyy/mm/dd hh:nn:ss.xx データ削除開始 yyyy/mm/dd hh:nn:ss.xx データ削除終了 XXX行が削除されました。 できれば[削除件数 XXX 件]と表示させたかったのですが、 自分の調べた限りではできそうにないので、 フィードバックされる文字列をそのまま使う方向で進めています。 上記ログの出力方法ができるようでしたら、 その方法を教えて頂けると嬉しいです。 宜しくお願いします。

  • crontabでsql/plusの起動

    シェルスクリプトでsql/plusを呼び出し、ストアドプロシジャを 実行しようとしているのですが、crontabを使ったスケジュール起動を 行おうとすると、以下のようなエラーになってしまいます。 Message file sp1<lang>.msb not found Error 6 initializing SQL*Plus not foundと言われているファイルに心当たりがありません。 sql/plusがバックグラウンドで使っているファイルなのでしょうか? ちなみに、crontabを使わずに、コマンドラインから このシェルスクリプトを実行すると、正常に動作します。 UNIXもシェルスクリプトも超初心者です。 ご存知の方おられましたら、ご教授願います。 OSはRedHat6.2J、Oracle8.1.7です。

  • SQL*Plus のSAVEとGETコマンド

    現在、WindowsXP環境で、オラクル11g R2を勉強中です。SQL*Plus でSELECT文を1つ実行し、その後、SAVEコマンドを使ってバッファをファイルに保存しました。ファイルの中身は、メモ帳で開くと、以下のような感じです。 SELECT no FROM student / バッファをクリアして、このファイルをGETコマンドでバッファに読み込み、RUNコマンドで正常に実行できました。 今度は、違うSELECT文を実行します。次に、「SAVE ファイル名 APPEND」で、実行したバッファの内容を、先ほどのファイルに追加しました。ファイルの中身は、メモ帳で開くと、以下のような感じです。 SELECT no FROM student / SELECT no,name FROM student / ところが、バッファをクリアして、上記のファイルをGETコマンドで読み込み、RUNコマンドで実行すると以下のようなエラーになります。 SQL> run 1 SELECT no FROM student 2 / 3* SELECT no,name FROM student / * 行2でエラーが発生しました。: ORA-00933: SQLコマンドが正しく終了されていません。 APPENDで追加する前のSQL文では、問題なかったので、APPENDしたことで、最初のSQL文の終端がおかしくなったようです。気になるのは、SQL文の次の行に挿入されている / です。なぜ、このような文字が勝手に挿入されるのでしょうか?これは、Windows 環境が原因でしょうか?それとも、SAVE APPENDのバグでしょうか? 初歩的な質問で恥ずかしいのですが、原因や対策方法がおわかりの方がいらっしゃいましたら、教えていただけないでしょうか。

  • sql plusのダウンロードとインストール

    会社でOracleのデータベースを使用しているので、自宅で勉強しようと思いネットで検索したところ、制限はつくものの無料で使用することができる Oracle 10g Express Editionというものを発見し、早速インストールしてみました。 しかし、会社の研修ではsql plusというもので、操作を行っていたのですがこのOracle 10g Express Editionにはsql plusが入っていませんでした もしかしてこのOracle 10g Express Editionではsql plusは使用することができないのでしょうか? 参考書として、現場で使えるSQLという本に、Oracleのインストール方法とsql plusの使用方法は書いてあるのですが この本でインストールしているものはoracle database 10g release 2という30日間のみ使用可能なトライアル版であり 今回私がインストールしたOracle 10g Express Editionの説明ではありません。 この本にはoracle database 10g release 2をインストールすると スタートメニュー→プログラム→oracle -oraclient 10g_home1→アプリケーション開発→sql plusとう順番でsql plus起動させることができますが、私のPCにはスタートメニューにsql plusはありませんでした。 どなたかOracle 10g Express Editionでsql plusを使用する方法を知っているかたはいないでしょうか? 長文かつわかりにく文章で申し訳ございませんが教えていただけると幸いです。