Saltar al contenido

PL/SQL ORA-01422: la búsqueda exacta devuelve más filas de las solicitadas

Mantén la atención ya que en este post vas a encontrar el resultado que buscas.

Solución:

A SELECT INTO La declaración arrojará un error si devuelve algo que no sea 1 fila. Si devuelve 0 filas, obtendrá un no_data_found excepción. Si devuelve más de 1 fila, obtendrá un too_many_rows excepción. A menos que sepa que siempre habrá exactamente 1 empleado con un salario superior a 3000, no desea un SELECT INTO declaración aquí.

Lo más probable es que desee usar un cursor para iterar (potencialmente) varias filas de datos (también asumo que tenía la intención de hacer una unión adecuada entre las dos tablas en lugar de hacer un producto cartesiano, así que asumo que hay es un departmentID columna en ambas tablas)

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;

Supongo que también estás aprendiendo PL/SQL. En código real, nunca usarías dbms_output así y no dependería de que nadie vea los datos que escribes en el dbms_output buffer.

Si te animas, tienes la habilidad dejar un ensayo acerca de qué te ha gustado de esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *