选择临时表

时间:2018-03-06 00:49:22

标签: sql oracle

如何在oracle脚本中执行临时表?

我尝试使用select * into #temp,但它不起作用。请帮忙,因为我是oracle的新人。

select * into temp from
(SELECT 
CASE WHEN Aaddress = '16' THEN 'A'
ELSE 'OTHERS'
END AS PRODUCT
FROM NAME
WHERE name.INACTIVE_CODE IN ('1', '2'))

2 个答案:

答案 0 :(得分:0)

Oracle使用create table as

create table temp as
    SELECT (CASE WHEN Aaddress = '16' THEN 'A' ELSE 'OTHERS' END) AS PRODUCT
    FROM NAME
    WHERE name.INACTIVE_CODE IN ('1', '2');

注意,如果AaddressINACTIVE_CODE是数字,那么用于比较的常量不应该有单引号。不要将数字与字符串进行比较。

在SQL Server中,#temp是临时表,但temp不是。在Oracle中,您需要显式声明一个临时表:

create global temporary table temp as

答案 1 :(得分:0)

Oracle中的临时表是预先创建的,因此在使用它们之前就已知该定义。

所以你可以

client

但是每次运行查询时都不建议这样做。更典型的用法是指定一次定义:

create global temporary table temp on commit preserve rows as select ... from ...

然后使用INSERT根据需要填充表。默认情况下,即,根据我上面的后面的“创建”语句,在您提交的那一刻,行将丢失。如果要在提交后保留行,请按照我的第一个示例添加“on commit preserve rows”。 在create-table-as-select方案中执行此操作的原因是,否则将创建表,填充行,然后在命令完成时立即清空。