我試圖將數據緩存到內存以便在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內存數據庫](http://www.oracle.com/technetwork/database/database-technologies/timesten/overview/index.html) –