繁体   English   中英

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

[英]Error code ORA-00933 for my stored procedure

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

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;

您的 cursor 查询中有一条线索:

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM