古いログを消去するSQL文を、シェルスクリプトから実行する必要が出てきました。

通常、プログラミング言語からはDBアクセス用のドライバを使用してSQL文を発行するかと思いますが、
シェルスクリプトの場合はどんな感じに記述すればよいのでしょうか。
SQL自体は
DELETE FROM table_name WHERE ...
のような一文で完結する簡単なものになるかと思います。
DBはOracleです。

回答の条件
  • 1人5回まで
  • 登録:2007/12/06 01:23:40
  • 終了:2007/12/13 01:25:04

回答(3件)

id:bonlife No.1

回答回数421ベストアンサー獲得回数752007/12/06 01:47:08

ポイント35pt

通常、シェル内でsqlplusコマンドを実行します。

そして、ヒアドキュメントを使ってSQL文を流し込むか、別ファイルにSQL文を用意しておいて実行します。

[参考URL] (sqlplus シェルスクリプトなどのキーワードで検索してみてください)

エラー処理の部分は以下が参考になります。

id:kyoko55

Oracleについては、全く初心者なので、沢山の情報ありがとうございます。

指針が定まったような気がします。

今後じっくり読ませていただきます。

2007/12/06 23:16:05
id:samasuya No.2

samasuya回答回数315ベストアンサー獲得回数112007/12/06 05:25:46

ポイント35pt

sqlplusでいいんじゃないでしょうか?

シェルスクリプト名を例えば、exec_sql.bashなどにして

#!/bin/bin/bash

sqlplus username/password@TNS_NAME @del.sql

と書いて実行するLINUX(UNIX?)のユーザーに実行権限を与えておきます。

$ chmod 777 exec_sql.bash

で、del.sqlの中に

DELETE FROM table_name WHERE ...;

exit;

と書いておいて実行すれば可能です。

id:kyoko55

sqlplusですね。

そして具体例もありがとうございます。

TNS_NAMEは何を意味するのでしょうか。

2007/12/12 00:24:55
id:samasuya No.3

samasuya回答回数315ベストアンサー獲得回数112007/12/12 07:51:12

ポイント10pt

この回答には、ポイント不要です。

TNS_NAMEは、ORACLEの設定ファイルtnsnames.oraファイル内で規定されている

ORACLEへの接続の設定名です。

ORACLEのSIDがTESTだったら、大概TESTで設定されてると思います。

sqlplus system/manager@TEST

という感じです。

環境変数でORACLE_SIDが設定されていれば、そちらでもいいと思います。

詳しくは、SQL*PLUSのマニュアルでどうぞ・・・。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません