Oracle
 sql >> Datenbank >  >> RDS >> Oracle

PL/SQL ORA-01422:Exakter Abruf gibt mehr als die angeforderte Anzahl von Zeilen zurück

A SELECT INTO -Anweisung löst einen Fehler aus, wenn sie etwas anderes als 1 Zeile zurückgibt. Wenn es 0 Zeilen zurückgibt, erhalten Sie ein no_data_found Ausnahme. Wenn mehr als eine Zeile zurückgegeben wird, erhalten Sie too_many_rows Ausnahme. Sofern Sie nicht wissen, dass es immer genau 1 Mitarbeiter mit einem Gehalt über 3000 geben wird, möchten Sie kein SELECT INTO Erklärung hier.

Höchstwahrscheinlich möchten Sie einen Cursor verwenden, um (möglicherweise) mehrere Datenzeilen zu durchlaufen (ich gehe auch davon aus, dass Sie beabsichtigten, eine ordnungsgemäße Verknüpfung zwischen den beiden Tabellen herzustellen, anstatt ein kartesisches Produkt zu erstellen, also gehe ich davon aus, dass dort ist eine departmentID Spalte in beiden 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;

Ich gehe davon aus, dass Sie gerade auch PL/SQL lernen. In echtem Code würden Sie niemals dbms_output verwenden so und würde nicht davon abhängen, dass irgendjemand Daten sieht, die Sie in dbms_output schreiben Puffer.