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 に答える