2

UNIXでIF..THEN..FIステートメント内/内で単純なSQL選択ステートメントを作成しようとするときの手順を尋ねたいだけです。

SQL*Plus で 'select' および 'if..then' ステートメントを使用する方法は知っていますが、UNIX スクリプトで変数を指定するのに苦労しています: If 'ABC' to 'Select...'

例:

[「$?」の場合 = 'ABC' ] then SELECT 従業員 ID、名前、年齢 FROM テーブル名; それ以外の場合は 1 fi を終了します

[「$?」の場合 = 'XYZ' ] then SELECT 従業員 ID、名前、年齢 FROM テーブル名; それ以外の場合は 1 fi を終了します

UNIXスクリプトに、より正確に構文的に適切に配置するにはどうすればよいですか?

ありがとう。

4

4 に答える 4

4

これは、SQLPlus をシェル スクリプトに埋め込もうとしているようです。記憶から、呪文は次のようになります。

if [ $? -eq ABC ]; then
SQLPLUS /S USER/PASS@Instance <<EOF
SET echo off;
SET pagesize 0;
SET heading off;
SPOOL foo.out
select foo from bar
EOF
fi

SQLPLUS と EOF の間のすべてが SQLPlus に渡されるため、フォーマット (別のものが必要な場合があります) と実際のクエリを制御するステートメントがいくつかあります。SQLPlus スクリプトの SPOOL コマンドは、出力をファイルに送信します。SQLPlus の使用に関する詳細なドキュメントについては、Oracle の Web サイトからダウンロードできます。

于 2008-11-11T21:49:42.653 に答える
1

データベース接続機能を含む perl またはその他のスクリプト言語の使用を検討しましたか。そうすれば、面倒なシェル スクリプトと SQL*Plus のリンケージを回避できます。

于 2008-12-30T20:31:54.850 に答える
1

echoそれがあなたの友達であることを忘れないでください。

if [ "$?" = "ABC" ] then echo SELECT employid, name, age FROM tablename; else exit 1; fi

シェルスクリプト変数などを埋め込むことができます。引用符やセミコロンなど、シェルが処理したいものを引用符で囲む必要があることに注意してください。

于 2008-11-12T01:25:36.227 に答える
0

上記の答えは大丈夫でした。ただし、シェル スクリプトで SQLPlus を使用すると、残念ながら、出力をファイルに送信するために SQLPlus スクリプトは必要ないことがわかりました。言い換えれば、これを行う他の方法はありますか?出力をログに出力するだけですか?

于 2008-11-12T01:20:38.887 に答える