首页 > 解决方案 > 我的存储过程的错误代码 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;

标签: oracleplsqloracle-apex

解决方案


您的游标查询中有一条线索:

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

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

  1. 不带引号的标识符只能包含数据库字符集中的字母数字字符和下划线 (_)。数据库链接可以包含句点 (.) 和“at”符号 (@)。

所以表名必须是带引号的标识符。因此,您需要在您的陈述中引用它:

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

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

db<>fiddle显示来自这些命令的错误(简化为一个模式和静态 SQL),以及添加双引号如何修复它们。


推荐阅读