0
create or replace procedure sample
as
ID VARCHAR(20);
BEGIN
execute immediate
'CREATE GLOBAL TEMPORARY TABLE UPDATE_COLUMN_NO_TP
(
NAME VARCHAR2(256)
)';

INSERT INTO UPDATE_COLUMN_NO_TP
SELECT SRC_PK_COLUMNS.PK_KEY 
  FROM SRC_PK_COLUMNS 
  WHERE NOT EXISTS ( 
  SELECT 1
  FROM TGT_PK_COLUMNS
 WHERE TGT_PK_COLUMNS.ID = SRC_PK_COLUMNS.ID);
END;

错误是:

The table is no exist. 

所以,我想要这个场景的最佳解决方案。在我的存储过程中,我有 10 个临时表。都是动态的创作和插入。

4

1 回答 1

1

UPDATE_COLUMN_NO_TP在编译时不存在,所以你得到了错误。
如果您动态创建了一个表,您应该动态访问它。
并注意Mat关于GTT本质的评论。


execute immediate '
INSERT INTO UPDATE_COLUMN_NO_TP
SELECT SRC_PK_COLUMNS.PK_KEY 
  FROM SRC_PK_COLUMNS 
  WHERE NOT EXISTS ( 
    SELECT 1
    FROM TGT_PK_COLUMNS
    WHERE TGT_PK_COLUMNS.ID = SRC_PK_COLUMNS.ID
  )
';
于 2013-03-27T09:41:50.787 回答