2012-08-16 316 views
0

在SQL Server中一个可以做类似下面临时表SQL Server等

declare @t as table(id int) 

insert into @t values(1) 
insert into @t values(2) 

delete from @t where id=1 

是否有这个在Oracle中的等价,而无需创建一个物理表。现在,我用来创建物理表来做到这一点,并在以后删除。

我已经去了这个链接How to create a temporary table in Oracle但这是2010年和the reference link提到的Oracle 8i。这仍然是Oracle 10g和11g的情况吗?我参观了另一个环节是Constructing a temporary table in Oracle SQL

感谢

+0

难道你不能使用一个集合,也许是一个关联数组? – Ollie 2012-08-16 14:24:32

+0

@Ollie我只用过一次,但没有用过类似的方法。能够对其执行CRUD,这可能吗? – codingbiz 2012-08-16 14:34:19

+0

可能重复的[Oracle临时表?](http://stackoverflow.com/questions/11131057/temporary-table-in-oracle) – Ben 2012-08-16 14:36:36

回答

0

使用关联数组:)

declare 
type temp_rec is record(v integer); 
type temp_table is table of temp_rev indexed by pls_integer; 

my_temp_table temp_table; 

begin 
    -- Here you can do do your stuff :) 
end 
/
1

在大多数情况下,你不需要它。在Oracle中当你需要临时表时,那么“你的设计是错误的”。不要试图将MS SQL模式重写到Oracle中准确的措辞。在MS SQL中使用临时表的地方可以在Oracle CTE(嵌套子查询,查询因子分析)中使用CURSOR或某些PL/SQL构造。

临时表不是你需要的。这只是一个你用来实现某个目标的工具。在Oracle中,您应该使用其他工具。

+0

+1,但是你可以吗引用了在Oracle中对CTE的偏好和Sql Server中的#tempdb工作的参考? – StuartLC 2013-12-20 12:49:59

+1

看看乔纳森刘易斯的博客。在那里你会找到几篇关于CTE(查询分解)的文章。 Oracle在优化查询之前执行各种代数转换。在大多数情况下,这将导致不实现子查询 - e.i.没有针对TEMP表空间的磁盘I/O。临时表将始终生成一些I/O。 – ibre5041 2013-12-20 13:12:33