我的存储过程的错误代码ORA-00933



我在创建的存储过程中收到以下错误消息:

ORA-00933:SQL命令未正确结束
ORA-06512:在第11行

我尝试过在谷歌上搜索它,但找不到任何适用的内容,因为它告诉我要尝试消除任何"ORDER BY"。

declare
cursor a_tab is
select table_name
from all_tables
where owner = 'OFFERINGWORKSPACE'
and (TABLE_NAME like 'EBA_%' or TABLE_NAME = 'SURVEY_2.0');
v_tab_name  varchar2(500);
begin
open a_tab;
loop
fetch a_tab into v_tab_name;
exit when a_tab%notfound;

EXECUTE IMMEDIATE 'delete ' || v_tab_name;
end Loop;
close a_tab;

open a_tab;
Loop 
fetch a_tab into v_tab_name;
Exit when a_tab%notfound;

EXECUTE IMMEDIATE 'insert into ' || v_tab_name || '(select * from OFFERINGWORKSPACE.'||v_tab_name ||')';
End Loop;
Close a_tab;
End;

光标查询中有一条线索:

... TABLE_NAME = 'SURVEY_2.0');

中打破数据库对象命名规则的周期:

  1. 非引号标识符只能包含数据库字符集中的字母数字字符和下划线(_(。数据库链接可以包含句点(.(和".";在";符号(@(

,因此表名必须是带引号的标识符。因此,你需要在你的声明中引用它:

EXECUTE IMMEDIATE 'delete "' || v_tab_name || '"';

EXECUTE IMMEDIATE 'insert into "' || v_tab_name
|| '"(select * from OFFERINGWORKSPACE."'||v_tab_name ||"')';

db<gt;fiddle显示了这些命令中的错误(简化为一个模式和静态SQL(,以及添加双引号是如何修复这些错误的。

最新更新