Oracle 10中的本地临时表(针对存储过程的范围)

Bab*_*bar 1 sql database oracle stored-procedures temp-tables

我是oracle的新手.我需要在存储过程中处理大量数据.我正在考虑使用临时表.我正在使用连接池,应用程序是多线程的.

有没有办法以每次调用存储过程创建不同表实例的方式创建临时表,以便来自多个存储过程调用的数据不会混淆?

APC*_*APC 8

你说你是Oracle新手.我猜你已经习惯了SQL Server,在那里使用临时表很常见.Oracle的工作方式不同,因此不太常见,因为它不太必要.

请记住,使用临时表会产生以下开销:

  1. 读取数据以填充临时表
  2. 将临时表数据写入文件
  3. 在进程启动时从临时表中读取数据
大多数活动在帮助你完成任务方面毫无用处.更好的想法是看看你是否可以在一个动作中完成所有操作,最好是纯SQL.


顺便提一下,你提到连接池会引发另一个问题.重置大量数据的进程不适合在OLTP模式下运行.你真的应该考虑启动一个后台(即asysnchronous)进程,可能是一个数据库作业,来运行你的存储过程.如果您想定期运行此作业,尤其如此,因为我们可以使用DBMS_SCHEDULER自动管理此类事务.