Oracle
 sql >> Baza danych >  >> RDS >> Oracle

PL/SQL ORA-01422:dokładne pobieranie zwraca więcej niż żądaną liczbę wierszy

SELECT INTO Instrukcja zwróci błąd, jeśli zwróci cokolwiek innego niż 1 wiersz. Jeśli zwróci 0 wierszy, otrzymasz no_data_found wyjątek. Jeśli zwróci więcej niż 1 wiersz, otrzymasz too_many_rows wyjątek. Jeśli nie wiesz, że zawsze będzie dokładnie 1 pracownik z pensją większą niż 3000, nie chcesz, aby SELECT INTO oświadczenie tutaj.

Najprawdopodobniej chcesz użyć kursora do iteracji (potencjalnie) wielu wierszy danych (zakładam również, że zamierzałeś wykonać prawidłowe połączenie między dwiema tabelami, zamiast robić produkt kartezjański, więc zakładam, że istnieje to departmentID kolumna w obu tabelach)

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;

Zakładam, że dopiero uczysz się języka PL/SQL. W prawdziwym kodzie nigdy nie użyjesz dbms_output w ten sposób i nie zależy od tego, czy ktokolwiek zobaczy dane, które zapisujesz do dbms_output bufor.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ikony programistów SQL

  2. Problem tworzenia klucza obcego w Oracle

  3. _gc_fusion_compression

  4. Jak odświeżyć zmaterializowany widok w Oracle?

  5. Czym SID różni się od nazwy usługi w Oracle tnsnames.ora