sql >> データベース >  >> RDS >> Oracle

ORA-01422を取得する理由:正確なフェッチで、要求された数を超える行が返される

    この例外は、SELECT INTOステートメントが実行され、複数の行が見つかった場合に発生します。 SELECT INTOステートメントは、多かれ少なかれ、正確に1つの行を見つけることを想定しています。それ以外の場合は、例外が発生します。

    あなたの例では:

    select PK into wsID from RPT_WEBSVC
    where KEYVALUE = 'GetMachineNameList'
    and category_fk = catID;
    

    (KEYVALUE、CATEGORY_FK)の組み合わせごとに1つの行しかないように見えますが、実際にはそうではありません。 1つしかない場合は、テーブルにそれらの列に一意の制約を設定する必要があります。

    alter table RPT_WEBSVC add constraint RPT_WEBSVC_UK
        unique (KEYVALUE, CATEGORY_FK);
    

    これにより、誰か(または何らかのプロセス)が同じ行を再度追加するのを防ぐことができます。もちろん、その制約を追加する前に、テーブルの重複を排除する必要があります。



    1. mysqlforphpで複数のsqldeleteクエリを実行します

    2. javax.persistence.sql-load-script-sourceを操作する方法は?

    3. postgreql関数の実行中にトランザクションをコミットする

    4. WHERE column =NULLがSQLServerでエラーをスローしないのはなぜですか?