• ベストアンサー

シェルスクリプトからSQL文発行

こんにちは 今シェルスクリプトを作成し、oracleに対して、SQL文を発行したいのですが、ユーザーパスワードを入れた時点で処理が止まります シェルスクリプトからoracleに対して、DROP TABLEを行いたいのですが、この処理は可能ですか? 可能であれば、実行した際のログも保持し、エラーがあった場合の処理を行いたいです。 ご存知の方いらっしゃいましたらご教授お願いいたします 現在のソース: sqlplus ユーザー名/パスワード # ここまではうまくいきますが、ここで処理がとまります drop table テーブル名

  • Oracle
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • pon2pon2
  • ベストアンサー率42% (107/250)
回答No.1

こんなのではどう? ●シェルファイル記述内容 ------------------------------------------------------- #!/bin/sh export ORACLE_BASE=/opt/oracle export ORACLE_HOME=/opt/oracle/products/10.2.0/db export ORACLE_SID=xxxx export PATH=$ORACLE_HOME/bin:$PATH export NLS_LANG=American_America.JA16SJIS sqlplus -s /nolog <<EOF connect dbsnmp/dbsnmp as sysdba @/xxx/xxxx/test.sql exit EOF ------------------------------------------------------- ●test.sql記述内容 spool文とdrop文を追記。 -------------------------------------------------------

linuxkomat
質問者

お礼

ありがとうございます! 出来ました! 感謝します!!!!!

関連するQ&A

  • シェルからSQLスクリプトを実行する方法を教えて下さい。

    シェルからSQL/Plusを起動し、SQLスクリプトを実行する方法を教えて下さい。 #! /bin/ksh sqlplus ユーザ/パスワード @test.sql exit 0 にすると、ログインユーザを途中で 聞いてきてきます。 因みに、test.sqlは、単なるdesc テーブル名 のみ記載。

  • シェルでSQLの結果を取得したい

    シェルスクリプトでSQLPLUSから、SQL文を実行させる事はできたのですが、そのSQLがSELECT文の時、その抽出した結果をシェルスクリプト上 、知りたいとき、どのようにすればわかりません。 SELECT した結果は必ず0個または1個です。 どなたかご教授ください。 sqlplus -S user/pass @${SQL_FILE} << EOF >log.txt EOF SQL_FILEの中身 select seq from A_table where ID = 1

  • BシェルでSQL文を実行

    【OS:AIX】 あるユーザーでCRONを組んでおり、オラクルのプレシジャを読み込ませるシェルプログラムをCシェルで組んでありました。 それをとある理由でBシェルに変更させてチェックしております。 ところがBシェルに変更してから以下のsqlplus文で失敗してしまいます。 ただ、単独でshファイルを実行するときは、SQL文も読み込んでくれて問題なく正常に終了するのですが、crontabで実行させるとSQL文を読み出すところで失敗してしまいます。 何かいけないところはありますでしょうか # SQL*Plusを呼び出しデータ作成 sqlplus ID/PASSWORD@SID < $HOME/script/data.sql ユーザアカウント自体はデフォルトでKシェルで作成されたユーザです。

  • sqlplusの操作をシェル上で

    RedhatLinuxのシェルスクリプト上で Oracleのsqlplus操作を行うことは可能でしょうか? その場合、どのように記述すればよいでしょう? やりたい内容の例としては以下になります。 #!/bin/sh su -<oracleユーザー> sqlplus ※※※※ SQL> update ※※※ set ※※※ SQL> exit 上のような内容をcronに登録して自動処理をかけたいと考えています。

  • 複数のsqlファイルを実行するスクリプト

    シェルスクリプトで特定のディレクトリ配下にあるsqlファイルを実行したいのですが、 どのようにすればいいのでしょうか? 今まではsqlファイルが決まっていた為、明示的にファイルを指定出来たのですが、ファイル名が固定でなくなった 為、悩んでいます。 以前は以下のような形で行っていました。 ----------------------------------------- #!/bin/sh #sqlplusでDB接続 sqlplus /nolog <<EOF conn USER (パスワード入力) #ユーザ確認 show user #sql実行 @/home/hoge/sql_01 @/home/hoge/sql_02 @/home/hoge/sql_03 commit; exit EOF ---------------------------------- ここでsql実行したいファイルの特定のディレクトリ配下にある全てのsqlファイル にして実行するようにしたいです。 もし、分かる方いれば教えてください。 よろしくお願いします。

  • KORNシェルでSQLスクリプトの自動実行する方法?

    KORNシェルを使用して、OracleのSQLスクリプト(統計情報取得)を実行するシェルスクリプトを作成し、毎日自動運用しようと考えています。 しかし、シェルスクリプトやSQLスクリプトを使用/作成するのははじめてのため まず、可能か否かが分かりません。可能であれば、方法についてご教授願います。 また、SQLスクリプトに引数を渡すことが出来るのでしょうか? SNAPSHOT IDを渡したいと思っているのですが... よろしくお願いいたします。

  • SQLスクリプト内で、${変数}と記述しても値を認識できない?

    USER.TABLE_LNK_TRG.shにて、トリガ作成スクリプトUSER.TABLE_LNK_TRG.sqlをコンパイルしようとしています。 USER.TABLE_LNK_TRG.shとUSER.TABLE_LNK_TRG.sqlともに 変数ORACLE_SID_1の値としてdb1、 変数ORACLE_SID_2の値としてdb2 が入っているはずなのですが、USER.TABLE_LNK_TRG.sql内では ${ORACLE_SID_1}と${ORACLE_SID_2}がそのまま文字列として解釈され (変数の値であるdb1、db2にはならない)、コンパイルに失敗します。 逆にUSER.TABLE_LNK_TRG.sql内で、${ORACLE_SID_1}と${ORACLE_SID_2} を使わず、直接db1、db2と記述すると成功します。 トリガ作成スクリプトUSER.TABLE_LNK_TRG.sql内で、${変数}は使えないのでしょうか? 環境はOSはSolaris、DBはOracle9i、シェルはBシェルです。 _______________________________________________________________ ~USER.TABLE_LNK_TRG.sh~ #!/bin/sh ORACLE_SID_1="db1" ORACLE_SID_2="db2" #トリガコンパイル sqlplus aaa/aaa <<-EOF @USER.TABLE_LNK_TRG.sql quit EOF exit ______________________________________________________________ ~USER.TABLE_LNK_TRG.sql~ CREATE OR REPLACE TRIGGER USER.TABLE_LNK_TRG BEFORE UPDATE ON USER.TABLE FOR EACH ROW declare begin update TABLE@${ORACLE_SID_1}_lnk set col = :new.col; update TABLE@${ORACLE_SID_2}_lnk set col = :new.col; exception when others then null; end; / _______________________________________________________________ ※${ORACLE_SID_1}、${ORACLE_SID_2}のままコンパイルされるので、  ${ORACLE_SID_1}_lnkのDB環境、${ORACLE_SID_2}_lnkのDB環境が存在せずコンパイルエラー。  逆に直接db1、db2と記述するとdb1_lnkのDB環境、db2_lnkのDB環境が存在するので正常にコンパイル。

  • sqlplusで実行したSQLの結果をシェルで判定する方法

    sqlplusから実行したSQLの結果をシェルで判定するにはどうすれば良いですか? SQLコードかなんらかのステータスコードを拾いたいのですが。。 #!/bin/sh # sample1.sh top sqlplus user/pass@db @sqlfile.sql # ここにステータス判定を入れたい # sample1.sh bottom ----- sqlfile.sql ----- create table tb1 (it1 varchar(1) ); quit; ----- sqlfile.sql -----

  • 【SQL】SELECT文

    こんにちは。OracleのSQLを勉強中の者です。 SELECT文について質問させてください。 下記のテーブルから購入フラグがすべて「1」のユーザ名を抽出したいのですが、SQL文をご教授いただけますでしょうか。 テーブル名:商品購入テーブル ユーザ名   商品名    購入フラグ ---------- ---------- -------------- 001      AAA       1 001      BBB       1 001      CCC       0 002      DDD       1 003      AAA       1 003      EEE       1 004      CCC       0 このテーブルからですと、002と003のユーザが抽出される形となります。 以上、よろしくお願いいたします。

  • シェルスクリプト

    シェルスクリプトに関しては、まったくの初心者です。 OSは、SolarisとLinuxですが、シェルスクリプトを利用して下記のような自動実行プログラムを作りたいのですが、どなたかご教授下さい。 一台のWWWサーバのログ(例:access.log)を、1日に一回(出来ましたら朝の5時)に別サーバに送信するプログラムなのですがいかがでしょうか?このとき、出来れば送信先のファイル名は、送信した日付(例:20020222.log)にしたいです。説明不足かも知れませんが、ひとまずこれでお願いします。