tutorial tipos salida procedimiento parametros example espaƱol ejemplos ejecutar developer con bloques almacenado 11g sql oracle plsql oracle10g ora-01403

sql - tipos - procedure oracle ejemplos



Problema de bloque PL/SQL: no se encontraron datos (5)

SET SERVEROUTPUT ON DECLARE v_student_id NUMBER := &sv_student_id; v_section_id NUMBER := 89; v_final_grade NUMBER; v_letter_grade CHAR(1); BEGIN SELECT final_grade INTO v_final_grade FROM enrollment WHERE student_id = v_student_id AND section_id = v_section_id; CASE -- outer CASE WHEN v_final_grade IS NULL THEN DBMS_OUTPUT.PUT_LINE (''There is no final grade.''); ELSE CASE -- inner CASE WHEN v_final_grade >= 90 THEN v_letter_grade := ''A''; WHEN v_final_grade >= 80 THEN v_letter_grade := ''B''; WHEN v_final_grade >= 70 THEN v_letter_grade := ''C''; WHEN v_final_grade >= 60 THEN v_letter_grade := ''D''; ELSE v_letter_grade := ''F''; END CASE; -- control resumes here after inner CASE terminates DBMS_OUTPUT.PUT_LINE (''Letter grade is: ''||v_letter_grade); END CASE; -- control resumes here after outer CASE terminates END;

el código anterior que he tomado del libro oráculo pl-sql por ejemplo cuarta edición de 2009 mi problema es cuando ingreso un id. de estudiante no presente en la tabla me devuelve los siguientes errores

Error report: ORA-01403: no data found ORA-06512: at line 7 01403. 00000 - "no data found" *Cause: *Action:

pero según el libro, debería haber devuelto un valor nulo y luego seguir el flujo del caso.

Por favor, ayúdame...

gracias por adelantado


Cuando selecciona INTO una variable y no hay registros devueltos, debe obtener un error NO HAY DATOS ENCONTRADOS. Creo que la forma correcta de escribir el código anterior sería envolver la instrucción SELECT con su propio bloque BEGIN / EXCEPTION / END. Ejemplo:

... v_final_grade NUMBER; v_letter_grade CHAR(1); BEGIN BEGIN SELECT final_grade INTO v_final_grade FROM enrollment WHERE student_id = v_student_id AND section_id = v_section_id; EXCEPTION WHEN NO_DATA_FOUND THEN v_final_grade := NULL; END; CASE -- outer CASE WHEN v_final_grade IS NULL THEN ...


Esta información no encontrada se debe a algún tipo de datos que estamos usando.

como seleccionar empid en v_test

arriba, empid y v_test tienen que ser de tipo numérico, entonces solo se almacenarán los datos.

Así que haga un seguimiento del tipo de datos, al obtener este error, puede ser que esto ayude.


Hay un enfoque alternativo que utilicé cuando no podía confiar en el bloque EXCEPTION al final de mi procedimiento. Tenía variables declaradas al principio:

my_value VARCHAR := ''default''; number_rows NUMBER := 0; . . . SELECT count(*) FROM TABLE INTO number_rows (etc.) IF number_rows > 0 -- Then obtain my_value with a query or constant, etc. END IF;



Su declaración SELECT no está buscando los datos que está buscando. Es decir, no hay ningún registro en la tabla de ENROLLMENT con el STUDENT_ID y SECTION_ID dados. Puede intentar colocar algunas instrucciones DBMS_OUTPUT.PUT_LINE antes de ejecutar la consulta, imprimiendo los valores de v_student_id y v_section_id . Es posible que no contengan lo que espera que contengan.