sql >> Database teknologi >  >> RDS >> Oracle

PL/SQL ORA-01422:nøjagtig hentning returnerer mere end det anmodede antal rækker

En SELECT INTO sætningen vil give en fejl, hvis den returnerer noget andet end 1 række. Hvis det returnerer 0 rækker, får du en no_data_found undtagelse. Hvis det returnerer mere end 1 række, får du en too_many_rows undtagelse. Medmindre du ved, at der altid vil være præcis 1 medarbejder med en løn på mere end 3000, ønsker du ikke en SELECT INTO erklæring her.

Mest sandsynligt vil du bruge en markør til at iterere over (potentielt) flere rækker af data (jeg antager også, at du havde til hensigt at lave en ordentlig forbindelse mellem de to tabeller i stedet for at lave et kartesisk produkt, så jeg antager, at der er et departmentID kolonne i begge tabeller)

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;

Jeg går ud fra, at du også bare lærer PL/SQL. I ægte kode ville du aldrig bruge dbms_output sådan og ville ikke afhænge af, at nogen ser data, som du skriver til dbms_output buffer.



  1. Forberedelse af en MySQL- eller MariaDB-server til produktion - del 1

  2. Oracle dokumentation

  3. Omskrivning af forespørgsler for at forbedre ydeevnen

  4. Problem med insert-forespørgsel i Sqlite?( variabel indsættelse)