选择临时表

问题描述 投票:0回答:2

如何在脚本中从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'))
sql oracle
2个回答
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

0
投票

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

所以你可以做到

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

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

create global temporary table temp (
  col1 ...
  col2 );

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

© www.soinside.com 2019 - 2024. All rights reserved.