我的存储过程的错误代码 ORA-00933
Error code ORA-00933 for my stored procedure
我在创建的存储过程中收到以下错误消息:
ORA-00933: SQL command not properly ended
ORA-06512: at line 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');
打破database object naming rules的句号:
- Nonquoted identifiers can only contain alphanumeric characters from your database character set and the underscore (_). Database links can contain periods (.) and "at" signs (@).
因此 table 名称 必须 是带引号的标识符。因此,您需要在声明中引用它:
EXECUTE IMMEDIATE 'delete "' || v_tab_name || '"';
和
EXECUTE IMMEDIATE 'insert into "' || v_tab_name
|| '"(select * from OFFERINGWORKSPACE."'||v_tab_name ||"')';
db<>fiddle 显示这些命令的错误(简化为一个模式,静态 SQL),以及如何添加双引号修复它们。
我在创建的存储过程中收到以下错误消息:
ORA-00933: SQL command not properly ended
ORA-06512: at line 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');
打破database object naming rules的句号:
- Nonquoted identifiers can only contain alphanumeric characters from your database character set and the underscore (_). Database links can contain periods (.) and "at" signs (@).
因此 table 名称 必须 是带引号的标识符。因此,您需要在声明中引用它:
EXECUTE IMMEDIATE 'delete "' || v_tab_name || '"';
和
EXECUTE IMMEDIATE 'insert into "' || v_tab_name
|| '"(select * from OFFERINGWORKSPACE."'||v_tab_name ||"')';
db<>fiddle 显示这些命令的错误(简化为一个模式,静态 SQL),以及如何添加双引号修复它们。