sql >> Database >  >> RDS >> Oracle

PL/SQL ORA-01422:exact ophalen levert meer op dan het gevraagde aantal rijen

EEN SELECT INTO statement zal een foutmelding geven als het iets anders dan 1 rij retourneert. Als het 0 rijen retourneert, krijg je een no_data_found uitzondering. Als het meer dan 1 rij retourneert, krijg je een too_many_rows uitzondering. Tenzij je weet dat er altijd precies 1 werknemer zal zijn met een salaris hoger dan 3000, wil je geen SELECT INTO verklaring hier.

Hoogstwaarschijnlijk wilt u een cursor gebruiken om over (mogelijk) meerdere rijen met gegevens te itereren (ik neem ook aan dat u van plan was een goede verbinding tussen de twee tabellen te maken in plaats van een Cartesiaans product te doen, dus ik neem aan dat er is een departmentID kolom in beide tabellen)

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;

Ik neem aan dat je ook net PL/SQL aan het leren bent. In echte code zou je nooit dbms_output . gebruiken op deze manier en zou niet afhankelijk zijn van iemand die gegevens ziet die u naar de dbms_output schrijft buffer.



  1. [Video] Inleiding tot JSON-gegevenstypen in PostgreSQL

  2. Flask by example - Postgres, SQLAlchemy en Alembic instellen

  3. Tablix:koptekstrijen herhalen op elke pagina werkt niet - Report Builder 3.0

  4. Wat is de beste manier om een ​​Django DB van SQLite naar MySQL te migreren?