Atrapar el error de un cast.

From: Luis Rodrigo Gallardo Cruz <rodrigo(at)nul-unu(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Atrapar el error de un cast.
Date: 2006-03-23 19:59:04
Message-ID: 20060323195904.GF3116@mail.interservice.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola.

Tengo una tabla en la que uno de los campos es el RFC de una
organización. Necesito obtener la fecha de inicio de actividades.

Para los que no son de México, el RFC es una clave que consta de
<letras>YYMMDD<cosas>, en dónde YYMMDD especifica la fecha esa que
necesito.

La siguiente función extrae la fecha correctamente:

CREATE OR REPLACE FUNCTION rfc2fecha(text) RETURNS date
IMMUTABLE STRICT AS '
SELECT substring($1 from ''^[A-Z]+([0-9]{6})'')::date;
' LANGUAGE 'SQL' ;

Desafortunadamente tengo que lidiar con datos 'malos' en la base, que
traen un RFC inventado que no especifica una fecha válida (p. ej.
VCC974567A8I). Cuando uso la función de arriba y hago
un select sobre toda la tabla el select completo falla por el intento de
conversión de datos.

SELECT rfc2fecha(rfc) FROM organizacion;
ERROR: date/time field value out of range: "057843"
HINT: Perhaps you need a different "datestyle" setting.
CONTEXT: SQL function "rfc2fecha" statement 1

La pregunta:
¿Hay alguna forma de, dentro de una función SQL o PLPGSQL, capturar el
error y regresar algún valor de mi elección (null, por ejemplo)?

--
Rodrigo Gallardo PGP Key ID: ADC9BC28
Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28
http://www.nul-unu.com http://www.nul-unu.com/blogs/elucubrando

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Nain Zuñiga Porto 2006-03-23 20:03:08 De baja en la Lista
Previous Message Alvaro Herrera 2006-03-23 19:51:05 Re: insert into plpython