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

Manejo de Exception

Estas en el tema de Manejo de Exception en el foro de PostgreSQL en Foros del Web. Amigos tengo el siguiente problema resulta que quiero manejar el comando EXCEPTION WHEN no_data THEN y me manda el siguiente error no se reconoce la ...
  #1 (permalink)  
Antiguo 25/11/2010, 08:18
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Manejo de Exception

Amigos tengo el siguiente problema resulta que quiero manejar el comando EXCEPTION WHEN no_data THEN y me manda el siguiente error

no se reconoce la condición de excepción «no_data»

este es el procedimiento

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION test(ID INTEGER) RETURNS text AS $body$
  2. DECLARE
  3.   IDtabla INTEGER;
  4. BEGIN
  5.     BEGIN
  6.       SELECT INTO IDtabla id_tabla FROM MiTabla WHERE id_tabla = ID;
  7.     EXCEPTION WHEN no_data THEN --Aqui manda el error
  8.     RETURN 'NO Data';
  9.     END;
  10. END;
  11. $body$
  12. LANGUAGE 'plpgsql' VOLATILE ;

Tambien lo hice de esta manera, pero mi idea es manejarlo con el EXCEPTION;

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION test(ID INTEGER) RETURNS text AS $body$
  2. DECLARE
  3.   IDtabla INTEGER;
  4. BEGIN
  5.     SELECT INTO IDtabla id_tabla FROM MiTabla WHERE id_tabla = ID;
  6.     IF NOT FOUND THEN
  7.     RETURN 'NO Data';
  8.    END IF;
  9. END;
  10. $body$
  11. LANGUAGE 'plpgsql' VOLATILE ;
  #2 (permalink)  
Antiguo 25/11/2010, 08:55
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: Manejo de Exception

la variable creo que es NO_DATA_FOUND en vez de no_data.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/11/2010, 09:38
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Respuesta: Manejo de Exception

Ahora me sale el siguiente error

ERROR: la ejecución alcanzó el fin de la función sin encontrar RETURN

asi tengo el procedimiento

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION test(ID INTEGER) RETURNS text AS $body$
  2. DECLARE
  3.     IDtabla INTEGER;
  4. BEGIN
  5.     BEGIN
  6.         SELECT INTO IDtabla IDtabla FROM MiTabla WHERE IDtabla = ID;
  7.         EXCEPTION WHEN NO_DATA_FOUND THEN
  8.         RETURN 'NO Data';
  9.     END;
  10. END;
  11. $body$
  12. LANGUAGE 'plpgsql' VOLATILE ;
  #4 (permalink)  
Antiguo 25/11/2010, 09:42
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: Manejo de Exception

Claro... sino entra a la exception, se queda sin retornar nada.

Juega un poco con la ubicación del return que sea valido para casos en los que haya y no haya excepción.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 25/11/2010, 09:58
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Respuesta: Manejo de Exception

es que he echo algunas pruebas y el IDtabla siempre viene null ( claro yo mando valores para que sea asi) entonces debería entrar en la excepción o no??
  #6 (permalink)  
Antiguo 25/11/2010, 10:23
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: Manejo de Exception

El SELECT INTO puede definirse como un cursor implicito que relamente no se que devuelve cuando el valor es null.

Depronto la variable NO_DATA_FOUND no aplica en este caso.
utiliza WHEN others THEN para ver si te la captura de alguna forma.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 25/11/2010, 11:42
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Respuesta: Manejo de Exception

No pasa nada igual no lo captura...yo creo que voy a tener que hacerlo de esta manera aun que no es la mejor forma, creo yo.

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION test(ID INTEGER) RETURNS text AS $body$
  2. DECLARE
  3.     IDtabla INTEGER;
  4. BEGIN
  5.     BEGIN
  6.         SELECT INTO IDtabla id_tabla FROM MiTabla WHERE id_tabla = ID;
  7.         IF IDtabla IS NULL THEN
  8.             RAISE NO_DATA_FOUND;
  9.         ELSE
  10.             RETURN 'Data';
  11.         END IF;    
  12.         EXCEPTION WHEN NO_DATA_FOUND THEN
  13.         RETURN 'No Data Found';
  14.     END;
  15. END;
  16. $body$
  17. LANGUAGE 'plpgsql' VOLATILE ;
  #8 (permalink)  
Antiguo 26/11/2010, 08:34
Avatar de death_nemesis  
Fecha de Ingreso: abril-2009
Ubicación: Santiago - Chile
Mensajes: 147
Antigüedad: 15 años
Puntos: 2
Respuesta: Manejo de Exception

Aqui encontre la solución al dilema...por si alguien mas le sirve...

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION test(ID INTEGER) RETURNS text AS $body$
  2. DECLARE
  3.     IDtabla INTEGER;
  4.      
  5. BEGIN
  6.     BEGIN
  7.         SELECT id_tabla INTO STRICT IDtabla FROM MiTabla WHERE id_tabla = ID;
  8.         RETURN 'Data Found';
  9.     EXCEPTION  WHEN no_data_found THEN
  10.         RETURN 'No Data Found';
  11.     END;
  12. END;
  13. $body$
  14. LANGUAGE 'plpgsql' VOLATILE;

Etiquetas: manejo
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 17:54.