0

全て、

簡単にするために、質問を支援するために以下のシナリオを作成しました。これは、私が抱えている実際の問題に近いものです。

オブジェクトに関するデータを保持する「 Stock 」と呼ばれる別のテーブルに関連する値を保持する「State 」と呼ばれるテーブルがあります。

例えば

+-----+-------+
|TABLE| VALUE |
+-----+-------+
|Stock| Ball  |
+-----+-------+
|State|Instock|
+-----+-------+

したがって、上記のケースから、Stock テーブルの「Ball」というレコードは、State テーブルによると「Instock」です。

ただし、この結論に到達するには、アイテムと呼ばれる別のテーブルを分析する必要があります。これは、その在庫の実際のアイテムが現実の世界にいくつ存在するかの真の値です。したがって、アイテムが存在するか、利用可能なアイテムがない場合、これは状態テーブルの値に影響しますそれはその Stock レコードに関連しています。

これを分析して状態を変更するには、State テーブルから開始し、Stock テーブルを介して Items テーブルに移動する必要があります。

State ----> Stock ----> Items

現在、このテーブルには多くのレコードがあり、少なくとも毎日監視する必要があります。

私はこれまでこのようなことに着手したことはありませんでしたが、私の直感では、すべてのテーブルを取得し、それらをデータ オブジェクトとして分析アプリケーションにロードし、メモリ内で仮想的に関係を形成することができました。

したがって、最初に 1 つの大きなクエリを実行し、すべての SQL 結果をメモリにロードするだけで済みます。これは可能ですか、それとも賢明ですか?

ただし、私が検討した他のオプションは、そのように各レコードを反復するだけです。多くのトランザクションを順番に実行します。

State record 1 ----> Stock record 1 ----> Analyse Items records --> Update State record 1
State record 2 ----> Stock record 2 ----> Analyse Items records --> Updates State record 2
.......

これらの方法のいずれかが適切なオプションですか、それとも別の方法がありますか?

制約

  • オラクル 11g データベース
  • スキーマまたはテーブルを変更できません
  • この分析アプリケーションにJavaまたはPerlを使用することを考えています
  • このアプリケーションは外部にあり、DB と物理的に同じ場所にはありません。

疑似コード

Get all state records in State table
Find their related records in Stock table
Find all child records of Stock table in Items table
Modify state of current record 
Move onto next record set.

したがって、この問題に利用できるガイダンスまたは特定の方法論/機能は歓迎されます。

私に解決策を与えないでください。正しい方向に少しだけ微調整するだけです:)

4

2 に答える 2

1

私の提案は、PL/SQL コードのブロックを作成し、スケジュールされたジョブを介して呼び出すことです。

スケジューラのドキュメント: http://docs.oracle.com/cd/B28359_01/server.111/b28310/schedadmin006.htm

Java や Perl を使用してこれを処理する理由は実際にはありません。これは単に不要な接続であり、Oracle 環境外の構成であるためです。維持することを覚えておくべきもう1つのアプリですが、それがOracleにある場合は、簡単にアクセスでき、維持できます(ただし、ソース管理に入れます)。

実際のクエリに関しては、これはそれほど難しくないはずです。各テーブルの行数に応じて、単純な更新ステートメントにすることができます。何かのようなもの

UPDATE STATE SET STATE.INSTOCK = TRUE 
    WHERE STATE.PK IN (
        SELECT ITEMS.STATEFK FROM ITEMS WHERE ITEMS.COUNT > 0
    );

次に同じことを行いますが、count <= 0 の場合は false に設定します。

これは PL/SQL の正しい構文ではありませんが、クエリがどのように機能するかについての一般的なアイデアを提供するはずです。

于 2013-09-19T15:15:33.243 に答える