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

PL / SQL ORA-01422:正確なフェッチが要求された数を超える行を返します

    SELECT INTO ステートメントが1行以外を返す場合、ステートメントはエラーをスローします。 0行が返される場合は、no_data_foundを取得します。 例外。複数の行を返す場合は、too_many_rowsを取得します 例外。給与が3000を超える従業員が常に1人だけいることがわかっている場合を除いて、SELECT INTOは必要ありません。 ここに声明。

    ほとんどの場合、カーソルを使用してデータの複数の行を(潜在的に)反復する必要があります(デカルト積ではなく、2つのテーブル間で適切な結合を行うことを意図していると想定しているため、 departmentIDです 両方のテーブルの列)

    BEGIN
      FOR rec IN (SELECT EMPLOYEE.EMPID, 
                         EMPLOYEE.ENAME, 
                         EMPLOYEE.DESIGNATION, 
                         EMPLOYEE.SALARY,  
                         DEPARTMENT.DEPT_NAME 
                    FROM EMPLOYEE, 
                         DEPARTMENT 
                   WHERE employee.departmentID = department.departmentID
                     AND EMPLOYEE.SALARY > 3000)
      LOOP
        DBMS_OUTPUT.PUT_LINE ('Employee Nnumber: ' || rec.EMPID);
        DBMS_OUTPUT.PUT_LINE ('---------------------------------------------------');
        DBMS_OUTPUT.PUT_LINE ('Employee Name: ' || rec.ENAME);
        DBMS_OUTPUT.PUT_LINE ('---------------------------------------------------');
        DBMS_OUTPUT.PUT_LINE ('Employee Designation: ' || rec.DESIGNATION);
        DBMS_OUTPUT.PUT_LINE ('----------------------------------------------------');
        DBMS_OUTPUT.PUT_LINE ('Employee Salary: ' || rec.SALARY);
        DBMS_OUTPUT.PUT_LINE ('----------------------------------------------------');
        DBMS_OUTPUT.PUT_LINE ('Employee Department: ' || rec.DEPT_NAME);
      END LOOP;
    END;
    

    PL/SQLも学んでいると思います。実際のコードでは、dbms_outputを使用することはありません。 このように、dbms_outputに書き込んだデータを誰にも見られないようにします。 バッファ。



    1. 2UDAでKNN機械学習モデルを使用する方法– PostgreSQLとOrange(パート1)

    2. MySQLのCONCATでGROUP_CONCATを使用する方法

    3. RACVMをバックアップする方法

    4. MariaDB ColumnStoreとは何ですか?