Código SQL:
Ver original
CREATE OR REPLACE FUNCTION ins_empleados() RETURNS TRIGGER AS $BODY$ BEGIN --tipo usuario A=admin, gg=gerente general, T=taller, S=secretaria vrut := NEW.rut_empleado; vrut1:= substr(NEW.rut_empleado,9,1); IF(val_rut(vrut,vrut1) = 'NO') THEN RAISE EXCEPTION'El rut ingresado es inválido'; END IF; NEW.nombre := LOWER(NEW.nombre); NEW.apellido := LOWER(NEW.apellido); NEW.tipo_usuario :='A'; NEW.nombre_usuario :=LOWER(NEW.nombre_usuario); NEW.password :=LOWER(NEW.password); RETURN NEW; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE;
y llamo a esta otra funcion:
Código SQL:
Ver original
CREATE OR REPLACE FUNCTION val_rut(CHARACTER VARYING) RETURNS CHAR AS ' DECLARE rut ALIAS FOR $1; rut_cero character varying(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 ' LANGUAGE plpgsql;
buenola idea de estoe s que al momento de ingresar me valide el rut del empleado, pero me envia un error:
Error de SQL:
ERROR: no existe la función val_rut(character varying, character varying)
LINE 1: SELECT (val_rut( $1 , $2 ) = 'NO')
^
HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.
QUERY: SELECT (val_rut( $1 , $2 ) = 'NO')
CONTEXT: PL/pgSQL function "ins_empleados" line 8 at IF
y esto ya no me resulta y me estoy resignando y debo hacer esto si o si