我有pl / sql匿名阻止,如下所示
declare
v_count pls_integer := 0;
begin
select count(1) from product_component_version
into v_count
where product like '%Enterprise%';
if v_count = 0 then
raise program_error;
end if;
exception
when program_error then
raise_application_error (-20001, 'This is valid for Oracle Enterprise Edition only!');
end;
当我尝试执行上述操作时,我收到以下错误
ORA-06550: line 5, column 5:
PL/SQL: ORA-00933: SQL command not properly ended
这只是“进入v_count”声明。
根据我的理解,语法是错误的,当我像下面那样更改状态时,它工作正常。
select count(1) into v_count
from product_component_version
where product like '%Enterprise%';
我在“Oracle Database 11g企业版11.2.0.1.0版 - 64位”中对此进行了测试。
但我们所有旧版本的产品都提供原始脚本。 我想知道旧的oracle版本支持原始脚本中的语法吗? 或者,请您告诉我任何可以解决我的困惑的信息吗?
谢谢, 维杰
答案 0 :(得分:3)
使用测试块:
declare
x dual.dummy%type;
begin
select dummy from dual into x;
end;
/
在Oracle 9iR2(Solaris上的9.2.0.8),10gR2(Solaris上为10.2.0.5)和11gR2(Linux上为11.2.0.3)上,我得到了完全相同的错误:
select dummy from dual into x;
*
ERROR at line 4:
ORA-06550: line 4, column 28:
PL/SQL: ORA-00933: SQL command not properly ended
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignored
虽然我没有8i或更早的数据库可供测试,但我不相信它曾以你的方式得到支持。
你说'原始脚本在我们所有旧版本的产品中都可用',但它实际上是否已经运行过,如果是这样,你能确定一个确切的版本,它不会引发错误吗?
答案 1 :(得分:2)
答案 2 :(得分:0)
即使我不这么认为选择虚拟从双重到x;
试试这个:
declare
v_count pls_integer := 0;
begin
select count(1) into v_count from product_component_version
where product like '%Enterprise%';
if v_count = 0 then
raise program_error;
end if;
exception
when program_error then
raise_application_error (-20001, 'This is valid for Oracle Enterprise Edition only!');
end;