oracle - 我的存储过程的错误代码 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');
打破数据库对象命名规则的时期:
- 不带引号的标识符只能包含数据库字符集中的字母数字字符和下划线 (_)。数据库链接可以包含句点 (.) 和“at”符号 (@)。
所以表名必须是带引号的标识符。因此,您需要在您的陈述中引用它:
EXECUTE IMMEDIATE 'delete "' || v_tab_name || '"';
和
EXECUTE IMMEDIATE 'insert into "' || v_tab_name
|| '"(select * from OFFERINGWORKSPACE."'||v_tab_name ||"')';
db<>fiddle显示来自这些命令的错误(简化为一个模式和静态 SQL),以及添加双引号如何修复它们。
推荐阅读
- sql - 在列数相等的表上应用 UNION 时出现“无法创建行...大于允许的最大行大小”错误
- domain-driven-design - 如果领域包括技术,技术可以成为领域模型的一部分吗?
- javascript - 如何访问Angular中对象数组中的数组?
- flutter - 在颤振日期范围选择器中将两个日期之间的所有日期作为列表返回
- javascript - Javascript 中的嵌套过滤器
- reactjs - 如何为洞反应应用程序导入一次scss模块?
- c# - 如何在treeview wpf上使用INotifyPropertyChanged
- javascript - 在javascript中落在另一个对象上后旋转的对象
- swift - 字符串的颜色部分
- php - Drupal 8 Url::FromRoute toString() 不要带大括号