我已阅读并理解Oracle仅使用全局临时表,而MS SQL则允许使用#temp表。我的情况会要求我创建数百个全局临时表,以完成我从MS SQL到Oracle的数据库转换。我想知道在Oracle存储过程中是否存在另一种方法,而不是创建必须在DB中维护的所有这些表。
谢谢
答案 0 :(得分:1)
“大多数时候临时表中唯一使用的是 存储过程然后在最后被截断。我们不断升级 我们的应用程序和它们有一定的可比性确保何时 在一个版本中进行了更改,可以轻松地将其合并到 其他“。
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参考手册中有一整章。 Read it to find out more