Oracle11g PLSQL:如何使用SP内部的视图在GTT中插入数据

Oracle11g PLSQL:如何使用SP内部的视图在GTT中插入数据,oracle11g,Oracle11g,我试图使用视图(VWBLKDATA)在临时表(my_temp_table)中插入数据,如下所示,但得到编译错误“error(7,15):PL/SQL:ORA-00942:表或视图不存在”。但是,我能够单独成功执行view create or replace PROCEDURE InsrtInTemp AS BEGIN INSERT INTO my_temp_table SELECT * FROM VWBLKDATA; COMMIT; END InsrtInTemp; 但当我编写如下动态

我试图使用视图(VWBLKDATA)在临时表(my_temp_table)中插入数据,如下所示,但得到编译错误“error(7,15):PL/SQL:ORA-00942:表或视图不存在”。但是,我能够单独成功执行view

create or replace PROCEDURE InsrtInTemp
AS
BEGIN
  INSERT INTO my_temp_table SELECT * FROM VWBLKDATA;
  COMMIT;
END InsrtInTemp;
但当我编写如下动态查询时,它编译成功

create or replace PROCEDURE InsrtInTemp
AS
intrtmp VARCHAR2(200);
BEGIN
  intrtmp := 'INSERT INTO my_temp_table SELECT * FROM VWBLKDATA';
  EXECUTE IMMEDIATE intrtmp;
END InsrtInTemp;

请帮助我理解这种行为

Oracle临时表创建一次(或应该创建一次),每个人都可以看到。在
INSERT-INTO
中,语句不会创建临时表。编译过程时,临时表似乎还不存在。您需要首先执行
创建全局临时表
。我猜您来自另一个数据库(SQL Server、MySQL等),其中临时表更常见,并且临时表仅对当前会话可见。甲骨文是一种非常不同的动物,临时桌子非常少见。非常感谢@JustinCave,非常清楚的解释。是的,我在SQL SERVER上工作过,对PLSQL还不熟悉。再次感谢。