1

以下 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.

4

1 回答 1

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.

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

于 2013-01-22T18:53:20.183 回答