“大多数时候临时表是在一个进程中使用的唯一东西
存储过程然后在末尾截断。我们不断升级
我们的应用程序并使它们具有一定的可比性确保了当
在一个版本中进行了更改,可以轻松地将其合并到
其他。”
T-SQL 临时表本质上是内存结构。它们在 MSSQL 中提供的优势在 Oracle 中不太明显,因为两种 RDBMS 架构存在差异。因此,如果您想要迁移,那么我们强烈建议您采取更适合 Oracle 的方法。
但是,您的情况有所不同,显然保持两个代码库同步将使您的生活更轻松。
当您想要使用临时表时,最接近临时表的是 PL/SQL 集合;具体来说,就是嵌套表。
有几种声明这些的方法。第一种是使用 SQL 模板(游标)并基于它定义嵌套表类型。第二种是声明一个记录类型,然后在其上定义一个嵌套表。无论哪种情况,都使用批量操作填充集合变量。
declare
-- approach #1 - use a cursor
cursor c1 is
select *
from t23;
type nt1 is table of c1%rowtype;
recs1 nt1;
-- approach #1a - use a cursor with an explicit projection
cursor c1a is
select id, col_d, col_2
from t23;
type nt1a is table of c1a%rowtype;
recs1 nt1a;
-- approach #2 - use a PL/SQL record
type r2 is record (
my_id number
, some_date date
, a_string varchar2(30)
);
type nt2 is table of r2;
recs2 nt2;
begin
select *
bulk collect into recs1
from t23;
select id, col_d, col_2
bulk collect into recs2
from t23;
end;
/
使用游标的优点是可以自动反映基础表中的更改。尽管 RECORD 在面对基础表的变化时提供了稳定性的优势。这仅取决于您想要什么:)
PL/SQL 参考手册中有整整一章。阅读它以了解更多信息 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#LNPLS005.