Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PL/SQL中创建和选择内存中的表?_Sql_Oracle_Plsql - Fatal编程技术网

如何在PL/SQL中创建和选择内存中的表?

如何在PL/SQL中创建和选择内存中的表?,sql,oracle,plsql,Sql,Oracle,Plsql,我正在使用Oracle的PL/SQL,希望创建一个内存中的表,从中可以进行选择 假设我有一个只有20条记录的表,其中有两列: 特殊id(int),过期日期(日期) 我想收集这20条记录并将它们保存在内存中,这样我就不必做同样的选择10000次,我希望以后能够访问这20条记录 然后,我有一个运行不同查询的循环,我想在该循环中执行以下等效操作: select out_date from in_memory_table where in_memory_table.special_id = curs

我正在使用Oracle的PL/SQL,希望创建一个内存中的表,从中可以进行选择

假设我有一个只有20条记录的表,其中有两列: 特殊id(int),过期日期(日期)

我想收集这20条记录并将它们保存在内存中,这样我就不必做同样的选择10000次,我希望以后能够访问这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_表都是没有意义的。我只需要能够访问该表中的数据


我在这里不包括实际的代码,因为我必须做大量的重新编码工作,以避免泄露公司信息。

如上所述,这样做可能没有多大意义,但您可以使用某种方法来为您完成这项工作。这使用关联数组

1) 在程序开始时填充hashmap

for x in (select out_date, special_id from input_table) loop
   my_hashmap(x.special_id) := x.out_date;
end loop;
2) 当您需要时,您可以使用

curr_out_date := my_hashmap(cursor.special_id);

3) 享受吧,希望它能让plsql对您更友好

您有什么样的表?如果您有一个在SQL中定义的嵌套表,您可以
从表中选择out\u date(本地\u collection\u变量),其中…
。尽管从SQL中获取一堆数据,将其加载到PL/SQL VM中,然后将其全部推回到SQL VM中通常没有多大意义。我想最好是将用于填充集合的任何表连接到游标定义中的表。如果有足够的内存,并且经常访问该表,则常规表将自动保留在“内存中”(=缓冲区缓存)。您甚至可以告诉Oracle将表的数据固定到缓冲区缓存。@WickedJester为什么不能使用常规表或联接?您是否担心性能或简化代码?如果是性能问题,那么从一个20行的表中选择所有行10000次只需大约半秒钟。那么您是否正在寻找一个集合?我可以向您保证,PL/SQL既不是一种讨厌的语言,也不是一种脚本语言。