Oracle版本中的Oracle“into”子句低于11g

时间:2013-02-06 14:31:51

标签: oracle plsql

我有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版本支持原始脚本中的语法吗? 或者,请您告诉我任何可以解决我的困惑的信息吗?

谢谢, 维杰

3 个答案:

答案 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;