jueves, noviembre 22, 2007

Función Obtiene Dígito Verificador en PL/pgSQL (PostgreSQL)

En los últimos años he comenzado un estudio de PostgreSQL como Gestor de Base de Datos y la verdad me he llevado una buena impresión. Un gestor robusto, con un buen manejo de las transacciones y con la maravilla que me tiene como niño con juguete nuevo, PL/pgSQL. Aquí les dejo una función que calcula el dígito verificador de un rut (Chile) en PL/pgSQL.



CREATE FUNCTION OBTIENE_DRUT (NUMERIC)
RETURNS CHAR AS
$$

DECLARE
SUMA INT := 0;
FACTOR INT := 2;
RUT_AUX INT := $1;
DIG INT;
DV INT;

BEGIN
WHILE
(RUT_AUX > 0) LOOP
DIG := RUT_AUX % 10;
IF(FACTOR = 8) THEN
FACTOR := 2;
END IF;

SUMA := SUMA + (DIG * FACTOR);
RUT_AUX := RUT_AUX / 10;
FACTOR := FACTOR + 1;
END LOOP;

DV := 11 - (SUMA % 11);

IF(DV = 10) THEN
RETURN 'K';
ELSIF(DV = 11) THEN
RETURN 0;
ELSE
RETURN DV;
END IF;

END;
$$
LANGUAGE plpgsql;


Etiquetas: , ,