在创建表PL/SQL时执行immediate

在创建表PL/SQL时执行immediate,sql,oracle,dynamic-sql,Sql,Oracle,Dynamic Sql,我只想问一下,为什么这段代码不创建表 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)';

我只想问一下,为什么这段代码不创建表

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;
是一个全局临时表,这就是为什么我选择时没有数据,但当我运行报告时,输出有数据


我正在尝试修复重复的数据错误,这就是我需要创建临时表的原因。

全局临时表(GTT)中的数据只能由插入它的会话访问;其他会话将只看到自己的数据。一个常见的误解是,全局临时表中的数据不是“全局的”——只有表定义是“全局的”,该表中的数据是插入它的会话的本地数据,并且在会话结束时自动清除(或提交,取决于GTT的类型)

如果您的报告查询GTT并找到数据,则必须有一个先填充全局临时表的进程


当您运行“create table”语句(顺便说一句,该语句不需要显式提交)时,它查询GTT并没有找到任何记录,因为您在其中创建表的会话没有首先用所需的数据填充GTT。

首先,您不需要提交DDL操作(创建、更改、删除、截断),他们自动提交。其次,您确定它没有创建表吗?你看起来怎么样?尝试放置要在其上创建表的架构。