Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Excepciones en Oracle

Estas en el tema de Excepciones en Oracle en el foro de Oracle en Foros del Web. Hola la verdad no se mucho acerca de manejo de exepciones por lo que estoy practicando un poco pero tengo un problema con este pequeño ...
  #1 (permalink)  
Antiguo 21/12/2011, 12:31
 
Fecha de Ingreso: diciembre-2011
Ubicación: Mexico
Mensajes: 9
Antigüedad: 12 años, 3 meses
Puntos: 2
Exclamación Excepciones en Oracle

Hola la verdad no se mucho acerca de manejo de exepciones por lo que estoy practicando un poco pero tengo un problema con este pequeño codigo, el codigo se ejecuta sin problemas pero lo que no entiendo es por que en el dbms del result_3 no me trae ningun valor, segun yo deberia de traerme 3 no??? acaso se aplica algun exit al bloque de exepciones????? ayuda!!!!!!!!!!!!!!!!!!!!!!

DECLARE
err_num NUMBER;
err_msg VARCHAR2(255);
result NUMBER;
RESULT_2 NUMBER;
RESULT_3 NUMBER;
BEGIN
SELECT 2/1 INTO RESULT_2
FROM DUAL;
DBMS_OUTPUT.PUT_LINE ('VALOR :'||RESULT_2);
SELECT 1/0 INTO
result
FROM DUAL;
SELECT 3/1 INTO RESULT_3
FROM DUAL;
EXCEPTION
WHEN OTHERS THEN
err_num := SUBSTR (SQLCODE,2,5);
err_msg := SQLERRM;
DBMS_OUTPUT.put_line('Error:'||err_num);
DBMS_OUTPUT.put_line(err_msg);
dbms_output.put_line ('Nuevo Valor: '|| result_3)
END;
  #2 (permalink)  
Antiguo 21/12/2011, 21:04
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Excepciones en Oracle

porque no lo estas imprimiendo.
DECLARE
err_num NUMBER;
err_msg VARCHAR2(255);
result NUMBER;
RESULT_2 NUMBER;
RESULT_3 NUMBER;
BEGIN
SELECT 2/1 INTO RESULT_2
FROM DUAL;
DBMS_OUTPUT.PUT_LINE ('VALOR :'||RESULT_2);
SELECT 1/0 INTO
result
FROM DUAL;
SELECT 3/1 INTO RESULT_3
FROM DUAL;
DBMS_OUTPUT.PUT_LINE ('VALOR :'||RESULT_3);
EXCEPTION
WHEN OTHERS THEN
err_num := SUBSTR (SQLCODE,2,5);
err_msg := SQLERRM;
DBMS_OUTPUT.put_line('Error:'||err_num);
DBMS_OUTPUT.put_line(err_msg);
dbms_output.put_line ('Nuevo Valor: '|| result_3)
END;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 22/12/2011, 09:23
 
Fecha de Ingreso: diciembre-2011
Ubicación: Mexico
Mensajes: 9
Antigüedad: 12 años, 3 meses
Puntos: 2
Respuesta: Excepciones en Oracle

Hola huesos grax por responder, pero el hecho es que aunque yo ponga la salida como tu me lo indicas (ya lo habia probado) , cuando hace la segunda division entra a la excepcion y ya no continua con el proceso y esa es precisamente mi duda (probablemente no me supe explicar jiji) se puede hacer algo en lo cual cuando este ejecutando un proceso y entre a una excepcion pueda continuar con el proceso en el lugar que quedo o eso no se puede?????????

De antemano grax x el tiempo y las respuestas :)
  #4 (permalink)  
Antiguo 26/12/2011, 01:15
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Excepciones en Oracle

La gestión de excepciones es simple, cuando hay un error en el código, el parser se mueve hacia el bloque EXCEPTION más próximo. En tu caso, aún cuando dividir por cero tenga como resultado la tendencia a infinito, tienes el error en SELECT 1/0 INTO.. (las bases de datos son de matemática simple), esto produce el salto hacia el código exception, y en consecuencia, la sentencia SELECT 3/1 INTO RESULT_3 no se ejecuta dejando la variable result_3 sin valor.

Código:
DECLARE 
err_num NUMBER; 
err_msg VARCHAR2(255); 
result NUMBER;
RESULT_2 NUMBER;
RESULT_3 NUMBER;
BEGIN 
SELECT 2/1 INTO RESULT_2
FROM DUAL;
DBMS_OUTPUT.PUT_LINE ('VALOR :'||RESULT_2);
SELECT 1/0 INTO 
result 
FROM DUAL; 
SELECT 3/1 INTO RESULT_3
FROM DUAL;
EXCEPTION 
WHEN OTHERS THEN 
err_num := SUBSTR (SQLCODE,2,5); 
err_msg := SQLERRM; 
DBMS_OUTPUT.put_line('Error:'||err_num); 
DBMS_OUTPUT.put_line(err_msg);
dbms_output.put_line ('Nuevo Valor: '|| result_3)
END;
Saludos

Etiquetas: procedure
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:30.