0

私は現在、プロジェクトの素敵なパズルに取り組んでいます。おそらく、あなたの何人かはすでに似たようなことをしています:

Linuxシェルスクリプトである必要があります

実行する必要がある手順は次のとおりです。

  1. xml ファイルは、Linux データベース サーバー (Oracle) に配置されます。

  2. xml ファイルが検証されます (私は xmllint を使用しましたが、これは機能します)

  3. xml ファイルにはバッチ番号が含まれています。インポートする前に、バッチ番号がデータベースに存在することは許可されていないため、ファイル内の値を SQL クエリに渡すにはどうすればよいですか (おそらく if..then...else 句を使用) ?)

よろしくお願いします。

4

1 に答える 1

0

スクリプト ユーザーが sqlplus にアクセスできる場合は、シェル スクリプトから実行して結果を解析できます。

バッチ番号.sql

--  ==== batchnum.sql ===============
var bnum varchar2(32)
exec :bnum=&1
select count(*) from tablename where batchnumber=':bnum';
-- ========================

次のコマンドを使用して、シェル スクリプトでコマンドを実行します。

value=`sqlplus uname/pass @batchnum.sql 12345`

$value次に、使用grepまたは類似のものを解析します。

ノート:

  • テストされていないコード。var/exec ブロックの構文を保証できません
  • 私は;だと思いbatchnumました。varchar2(32)実際のタイプに従って定義する必要があります
  • var/exec コンストラクトはやや面倒ですが、バインド変数を使用します。これにより、Oracle の SQL パーサーがクエリをキャッシュできるようになり、複数の連続した呼び出しのパフォーマンスが向上します。
  • 例外処理なし。あなたのための演習として残しました:)
  • 入力パラメーターの検証なし。また、あなたのための演習として残しました。最小限の権限を持つユーザーとしてこれを呼び出すようにしてください
于 2012-10-18T18:44:20.663 に答える