2016-08-24 51 views
2

我正在使用Oracle的PL/SQL,並希望創建一個內存表,從中我可以選擇。如何在PL/SQL的內存表中創建和選擇?

比方說,我有隻20記錄的表有兩列: special_id(INT),out_date(日期)

我想收集的20條記錄,並堅持在內存中,所以我沒有做同樣的選擇10,000次,我希望能夠在以後訪問這20條記錄。

然後我有一個循環中運行不同的查詢,我想這樣做循環內的以下等效:

select out_date 
from in_memory_table 
where in_memory_table.special_id = cursor.special_id (where cursor is from my current loop). 

注:這是沒有意義的遍歷in_mempry_table在任何情況下。我只需要能夠訪問該表中的數據。

我沒有在這裏包括實際的代碼,因爲我不得不做很多工作記錄,以免泄露公司信息。

+4

你有什麼樣的表格?如果你有一個在SQL中定義的嵌套表,你可以從表中選擇out_date(local_collection_variable),其中......。儘管從SQL中獲取大量數據通常沒有多大意義,但將其加載到PL/SQL VM中,然後再將它們全部推回到SQL VM。我猜想你最好加入你用來填充集合到你的遊標定義中的表中的表。 –

+1

如果有足夠的內存並且足夠頻繁地訪問表,則常規表將自動保存在「內存」(=緩衝區高速緩存)中。您甚至可以告訴Oracle將表的數據固定到緩衝區緩存。 –

+0

我無法使用常規表格,也無法通過連接訪問它。這裏有很多事情會讓這種情況變得困難。我想我只需要使用一種真正的腳本語言,而不是這種稱爲PL/SQL的憎惡。 –

回答

0

如上所述,這樣做可能沒有多大意義,但您可以使用某種hashmap爲您完成這項工作。這使用關聯數組。

1)在你的程序

for x in (select out_date, special_id from input_table) loop 
    my_hashmap(x.special_id) := x.out_date; 
end loop; 

2的開始填充的HashMap),而不是選擇,你會得到out_date當你與一個

curr_out_date := my_hashmap(cursor.special_id); 

3)享受需要它,希望它有助於讓plsql更友好