在存储过程中创建一个行并将其插入表中

时间:2013-03-27 09:36:51

标签: plsql oracle11g

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个临时表。所有这些都是动态创作和插入。

1 个答案:

答案 0 :(得分: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
  )
';