From: | "Jaime Casanova" <systemguards(at)gmail(dot)com> |
---|---|
To: | antonio albiñana crespo <an_chonio(at)hotmail(dot)com> |
Cc: | "Lista Ayuda Pgsql" <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: ayuda! |
Date: | 2006-04-25 05:56:45 |
Message-ID: | c2d9e70e0604242256h18ceb374p41a382210079dc0c@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
con copia a la lista
On 4/24/06, antonio albiñana crespo <an_chonio(at)hotmail(dot)com> wrote:
>
> Buenas, contestase mi mail en el foro de postgre.
>
> Te explico, el DNI es el documento de identidad nacional en españa. Se
> compone de un numero de 8 cifras, un guion "-" y una letra mayuscula.
>
> Una manera de ver que un dni es correcto es hacer el modulo 23 del numero y
> ver en una tabla si la letra es la misma que tiene asociada el dni.
>
>
>
>
> Resto 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
>
> Letra T R W A G M Y F P D X B N J Z S Q V H L C K E
>
> La pega que tengo, es que no se en que tipo de estructura de datos almacenar
> el DNI, puesto que se compone de un numero y una letra.
>
> Tengo el codigo hecho para un NUMERIC, y lo hace bien, pero la letra no la
> puedo almacenar.
>
> Te lo adjunto:
> -- Function: funcion_valida_dni()
> -- DROP FUNCTION funcion_valida_dni();
> CREATE OR REPLACE FUNCTION funcion_valida_dni()
> RETURNS "trigger" AS
> $BODY$
> DECLARE
> aux CHAR;
> numero INTEGER;
> BEGIN
> numero = NEW.dni % 23;
>
> RAISE NOTICE 'dni: %',NEW.dni;
> RAISE NOTICE 'resto: %',numero;
> IF NEW.dni ISNULL THEN RAISE EXCEPTION 'DNI no puede ser nulo'; END IF;
> SELECT letra INTO aux FROM validacion_dni WHERE validacion_dni.resto =
> numero;
>
> RAISE NOTICE 'aux: %',aux;
> IF (aux = NEW.dni) THEN
> RAISE NOTICE 'DNI correcto!';
> ELSE RAISE EXCEPTION 'DNI no valido';
> END IF;
> RETURN NEW;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
> ALTER FUNCTION funcion_valida_dni() OWNER TO postgres;
> Donde validacion_dni es el nombre de la tabla de arriba, compuesta de dos
> atributos, letra y resto.
>
> Entonces me haria falta una estructura, que supongo que seria una cadena de
> texto, con la que almacenar el numero y la letra, no solo el numero como
> hago yo. Me hacen falta funciones para operar con cadenas, y sacar el numero
> de la cadena y la letra. Me dijiste que con str...( from 1 to 8) sacaba un
> caracter, pero tengo que sacar el numero entero y no se como se hace.
>
> Espero haberme explicado gracias
>
>
>
>
>
>
>
>
>
>
>
> ________________________________
> Busca a la vez en Internet, en directorios, en enciclopedias... Atrévete con
> el nuevo MSN Search
--
Atentamente,
Jaime Casanova
"What they (MySQL) lose in usability, they gain back in benchmarks, and that's
all that matters: getting the wrong answer really fast."
Randal L. Schwartz
From | Date | Subject | |
---|---|---|---|
Next Message | antonio albiñana crespo | 2006-04-25 06:07:09 | acceso |
Previous Message | Jaime Casanova | 2006-04-25 04:39:45 | Re: Autovaccum |