hola bueno resulta que estoy tratando de colocar esta funcion en mi BD, que es para validar un rut de chile pero la ejecuta y me sale que la consulta se realizó con existo pero la funcion no carga en la bd, la ejecuta de nuevo y me deberia dar el error de que ya esta creada, este es el codigo nose que estoy haceindo mal
CREATE OR REPLACE FUNCTION "digito_verificador"(varchar)
RETURNS char AS $BODY$
DECLARE
rut ALIAS FOR $1;
rut_cero varchar(8);
valor int;
BEGIN
valor := 0;
rut_cero := lpad(rut,8,'0');
valor := valor + (substring(rut_cero,8,1)::int8)*2;
valor := valor + (substring(rut_cero,7,1)::int8)*3;
valor := valor + (substring(rut_cero,6,1)::int8)*4;
valor := valor + (substring(rut_cero,5,1)::int8)*5;
valor := valor + (substring(rut_cero,4,1)::int8)*6;
valor := valor + (substring(rut_cero,3,1)::int8)*7;
valor := valor + (substring(rut_cero,2,1)::int8)*2;
valor := valor + (substring(rut_cero,1,1)::int8)*3;
valor := valor % 11;
IF valor =1 THEN
RETURN 'K';
END IF;
IF valor =0 THEN
RETURN '0';
END IF;
IF valor>1 AND valor<11 THEN
RETURN (11-valor)::char;
END IF;
END;$BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION "digito_verificador"(varchar) OWNER TO formacio;
CREATE OR REPLACE FUNCTION "valida_rut"(varchar)
RETURNS bool AS $BODY$
DECLARE
rutfull ALIAS FOR $1;
rutfull_cero varchar(9);
rut varchar(8);
dv char;
BEGIN
IF rutfull IS NULL THEN
RETURN TRUE;
END IF;
rutfull_cero := lpad(rutfull,9,'0');
rut:= substr(rutfull_cero,0,9);
dv := substr(rutfull_cero,9,1);
IF digito_verificador(rut)=upper(dv) THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END;$BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION "valida_rut"(varchar) OWNER TO formacio;
saludos!