sql >> Databasteknik >  >> RDS >> Oracle

PL/SQL ORA-01422:exakt hämtning returnerar fler än begärt antal rader

En SELECT INTO uttalandet kommer att ge ett fel om det returnerar något annat än 1 rad. Om den returnerar 0 rader får du en no_data_found undantag. Om den returnerar mer än 1 rad får du en too_many_rows undantag. Om du inte vet att det alltid kommer att finnas exakt 1 anställd med en lön som är högre än 3000, vill du inte ha en SELECT INTO uttalande här.

Troligtvis vill du använda en markör för att iterera över (potentiellt) flera rader med data (jag antar också att du tänkte göra en korrekt sammanfogning mellan de två tabellerna istället för att göra en kartesisk produkt så jag antar att det finns är ett departmentID kolumn i båda tabellerna)

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;

Jag antar att du bara lär dig PL/SQL också. I riktig kod skulle du aldrig använda dbms_output så här och skulle inte vara beroende av att någon ser data som du skriver till dbms_output buffert.



  1. Logga frågetid i SQLite på Android

  2. Hur man undertrycker INFO-meddelanden när man kör psql-skript

  3. PL/SQL-prestandajustering för LIKE '%...%' jokerteckenfrågor

  4. Hur man beräknar median i MySQL