No.1ベストアンサー
- 回答日時:
>シェルスクリプトを使用してORACLEなど
>DBへのアクセス・データ操作は
>可能なのでしょうか?。
は可能です。ぐだぐだ説明するより例を示した方が
分かり易いと思うので...
#!/bin/sh
sqlplus system/manager@ORACLE_SID << EOF
select table_name from user_tables;
EOF #必ず行頭に!!
要するにEOFとEOFの間にSQL*Plus上で実行したい
コマンドを入力するだけです。
ここで気をつけないといけないのは2つ目の終わり
を示すEOFは必ず行頭に記述しなくてはいけない
という点です。
if文やwhile文の中で使うときについついインデント
をつけてしまいますが閉じる意味のEOFは必ず
行頭です。
ただ、業務系開発となるとあまりシェルスクリプト
でプログラムを開発することは少ないかと思います。
理由は2つあって
1.性能が悪い
2.セキュリティ的に好ましくない
1はシェルスクリプトでDBにアクセスする場合、
SQL*Plusで接続することが多くなりますが、SQL*Plus
は管理用モジュールの意味合いが強く、あまり
アクセスの最適化は計られていません。
よって同じ命令を投げてもPro*CやOCIと比較して
性能は良くないです。
また、シェルは実行毎にコンパイルが行われるので
それもあまりよろしくありません。
2はサーバ側にviなどで簡単に開けるtext形式ファイル
として配置するためサーバにさえログインすれば
どういった処理が行われているのかが簡単に把握でき、
やろうと思えば書き換えだってできてしまいます。
Pro*Cプリコンパイル、Cコンパイルなどを行えば
ロードモジュール化されるので実行はできても
内容の閲覧や修正は不可能です。
またご存知かもしれませんがOracleには
ストアドプロシージャという昨日もあり、
事前にコンパイル済みの状態でOracleのメモリ領域に
プログラムを常駐させておくことも可能です。
シェルスクリプトによるSQL*Plus経由のOracleアクセス
は主に非定期、非定型で行われるDB管理などに
用いると思ったほうがよいかと思います。
>Oracleのコマンドでデータをテキストに出力しシェルで読みこみ
はちょっと意味がよく分からないのですが、
Oracleの出力結果をログファイルに
吐き出したいのであればSQL*Plusであれば一番最初に
spool log.txt
と入力しておけばそれ以降の出力はlog.txtに出力
されます。
先述したEOFを使う場合は
#!/bin/sh
sqlplus system/manager@ORACLE_SID << EOF > log.txt
select table_name from user_tables;
EOF #必ず行頭に!!
としても同様にlog.txtにその結果が出力されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- Oracle oracleで 10,20, 30, というデータがあるとして ,区切りでデータが何件あるか調べる関 3 2023/03/14 15:56
- Excel(エクセル) アウトラインの小計のやり方 1 2023/03/20 11:51
- UNIX・Linux Thunderbirdで既読にしても、シェルにログインするとYou have mail.と表示される 3 2022/09/10 08:40
- MySQL データベースの複製の仕方(mysql) 2 2023/05/30 18:24
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
- その他(データベース) ORMについて 1 2022/06/18 10:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++でUTF-8のファイルを出力し...
-
Acccess レポートをグループ別...
-
コマンド(例えばls)の出力結果...
-
VBSでEXCEL⇒CSV変換で日付の書...
-
テキストの各行に行番号をつけ...
-
printfだと出力されるのにfprin...
-
VB.NETでExcelファイルを出力す...
-
AccessVBA複数レポート条件毎に...
-
(VBA)書式が変更されてしまい...
-
MATLABのCSV形式での書き込みに...
-
ファイルI/O完了待ち
-
pcap形式データをテキストへ抽出
-
ADボードにとるCSVでの無限サン...
-
C++ fprintf_sの使い方がわからん
-
二次元配列をクリップボードに...
-
シェルコマンドの 2>&1 とはど...
-
標準出力とファイルに効率的に...
-
C言語 ドラッグとファイル名の表示
-
構造体のファイル出力
-
COBOLのファイル出力
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド(例えばls)の出力結果...
-
VC++でUTF-8のファイルを出力し...
-
Acccess レポートをグループ別...
-
ファイル出力の場所を指定
-
ファイル形式またはファイル拡...
-
シェルコマンドの 2>&1 とはど...
-
Wordマクロで指定したフォルダ...
-
テキストファイルに改行コード...
-
fwprintf()について
-
二次元配列をクリップボードに...
-
外国語とCSVについて
-
ファイルの文字コードをUTF-8に...
-
csvファイルでの出力について
-
C言語での印刷方法
-
(VBA)書式が変更されてしまい...
-
フォルダにあるPDF情報の抽出(VBA)
-
C言語での縦方向のファイル出力...
-
CSVファイルを任意の場所に出力...
-
標準出力とファイルに効率的に...
-
CreateProcess関数と実行後の戻...
おすすめ情報