【发布时间】:2014-02-24 18:27:57
【问题描述】:
我需要截断表,然后使用过程在该表中插入数据。
但是,一个喜欢动态 sql,而另一个不喜欢:
create or replace
procedure RECREATE_AGGREGATE
AUTHID DEFINER
AS
BEGIN
TRUNCATE TABLE AGGREGATE;
INSERT INTO AGGREGATE SELECT * FROM OLD_AGGREGATE;
END;
错误(6,14):PLS-00103:在预期以下情况之一时遇到符号“TABLE”::=。 ( @ % ; 在 "TABLE" 之前插入符号 ":= 以继续。
如果我在TRUNCATE 语句周围添加execute immediate,它工作正常,但插入出错。
如果我删除它,TRUNCATE TABLE 会抱怨...
create or replace
procedure RECREATE_AGGREGATE
AUTHID DEFINER
AS
BEGIN
execute immediate 'TRUNCATE TABLE AGGREGATE';
INSERT INTO AGGREGATE SELECT * FROM OLD_AGGREGATE;
END;
错误(7,5): PL/SQL: SQL 语句被忽略 错误(7,84):PL/SQL:ORA-00942:表或视图不存在
这里有什么可以说明的吗?
【问题讨论】:
-
尝试在 truncate 语句周围使用 execute immediate。这应该不会影响您的插入(可能有其他问题,但您需要发布错误代码)。