我想问一下为什么这段代码不能创建表?
BEGIN
EXECUTE IMMEDIATE 'create table temp1 as (select * from table)';
COMMIT;
END;
当我尝试这个时,它会创建表但没有记录/数据。
BEGIN
EXECUTE IMMEDIATE 'drop table temp1';
EXECUTE IMMEDIATE 'create table temp1 as (select * from table)';
COMMIT;
END;
table
是一个全局临时表,这就是我选择时没有数据的原因,但是当我运行报表时,输出中有数据。
我正在尝试修复重复数据错误,这就是我需要创建临时表的原因。
答案 0 :(得分:0)
全局临时表(GTT)中的数据只能由插入它的会话访问;其他会话只会看到自己的数据。这是一个常见的误解,即全球临时表中的数据不是全球性的" - 只有表定义是" global",该表中的数据是插入它的会话的本地数据,并在会话结束时自动清除(或提交,具体取决于GTT的类型)。
如果您的报告查询GTT并查找数据,则必须首先填充全局临时表的进程。
当你运行"创建表"语句(顺便说一句,不需要显式提交),它查询GTT并找不到记录,因为您创建表的会话没有首先使用所需的数据填充GTT。