Oracle
 sql >> база данни >  >> RDS >> Oracle

PL/SQL ORA-01422:точното извличане връща повече от заявения брой редове

A SELECT INTO операторът ще изведе грешка, ако върне нещо различно от 1 ред. Ако върне 0 реда, ще получите no_data_found изключение. Ако върне повече от 1 ред, ще получите too_many_rows изключение. Освен ако не знаете, че винаги ще има точно 1 служител със заплата по-голяма от 3000, не искате SELECT INTO изявление тук.

Най-вероятно искате да използвате курсор, за да преглеждате (потенциално) множество реда данни (предполагам също, че възнамерявате да направите правилно свързване между двете таблици, вместо да правите декартов продукт, така че предполагам, че има е departmentID колона в двете таблици)

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;

Предполагам, че просто изучавате PL/SQL. В реалния код никога не бихте използвали dbms_output като това и няма да зависи от това, че някой вижда данни, които записвате в dbms_output буфер.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Определете дали датата на Oracle е в уикенд?

  2. Преобразувайте от RAW(16) на Oracle в GUID на .NET

  3. Заявка за търсене във всички пакети за таблица и/или колона

  4. Как мога да изпълня собствен SQL скрипт в JPA/Hibernate?

  5. ORA-38868