PLSQLの3つの異なるキーで高速アクセスするためにデータをメモリにキャッシュしようとしています。この問題はポインタを持つ言語では実際には存在しませんが、PLSQLには苦労しています。私が知っていることはありません。私はこれを行う必要があります。なぜなら、非常に細かい方法でデータを更新する非常に大きなループ関数があり、そうでなければ全く永遠に続くことになるからです。レコードに関連付けられた値を更新するためのPLSQLのコレクションへの最速アクセス
基本的な考え方は、key_1でソートされたメモリ内にコレクションがあることです。最初のレコードの値を変更して、レコード自体のkey_1値と、同じkey_2を持ち、変更したレコードとしてkey_3の値を持つコレクションのレコードのいくつかの特定の値に変更を加えたいとします。変更後、私はちょうど時間のかかるクエリを使用する代わりに、その場所に変更された最初の行を並べ替えてバブルしたいと思います。
だから、基本的にレコードは次のようになります。
create type t_num_tbl is table of number;
create type rec_type as object
(
key_1 number,
key_2 varchar2(30),
key_3 t_num_tbl
);
とコレクションは、このようなものです:私は選択/更新することを配る必要があるだろうレコードを変更する場合は
create type rec_typetbl is table of rec_type;
v_rectbl rec_typetbl := rec_typetbl();
関連するレコードを変更するには、次のようになります。
SELECT *
FROM table(v_rectbl)t
WHERE t.key_2 = modifiedrec.key_2
AND
(SELECT count(*)
FROM table(t.key_3)
JOIN table(modifiedrec.key_3) USING (column_value)) > 1;
ここでの主な問題は、データはメモリ内で索引付けされず、アクセスは私の目的にとっては十分に速くはありません。
PLSQLには、レコードのポインタ配列をコレクションの関連要素に使用するパフォーマンスと比較できるソリューションはありますか? key_2、key_3の値は変更されないため、関連付けは事前に分かっています。
おそらくアプリケーションにとっては過剰ですが、Oracle [TimesTen In-Memory Database](http://www.oracle.com/technetwork/database/database-technologies/timesten/overview/index.html)をチェックしてください。 –