Oracle PL / SQL块成功使用硬编码值,但不带变量

时间:2013-01-22 18:41:15

标签: oracle plsql

以下PL / SQL按预期成功执行:

declare
    myCount number;
begin
    select count(*)
    into myCount
    from myTable
    where id = 1;
end;

但是,以下内容不会反而引发此错误:

  

ORA-01422:精确提取返回超过请求的行数

declare
    myCount number;
    myId number := 1;
begin
    select count(*)
    into myCount
    from myTable
    where id = myId;
end;

从概念上讲,我理解错误的含义,但我不知道它如何适用于我的情况。我所做的就是将硬编码值移动到declare块中的变量。当select与完全相同的数字时,为什么会影响Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production的结果?

版本为{{1}}。

1 个答案:

答案 0 :(得分:3)

您的系统中有些内容未在此问题中重现。如果我在本地系统中创建表myTable,则代码将无错运行

SQL> create table myTable( id number );

Table created.

SQL> declare
  2      myCount number;
  3      myId number := 1;
  4  begin
  5      select count(*)
  6      into myCount
  7      from myTable
  8      where id = myId;
  9  end;
 10  /

PL/SQL procedure successfully completed.

您发布的代码与您实际运行的代码之间是否存在差异?