Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/07/2010, 09:18
diegonazho
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 3 meses
Puntos: 1
problema con llamado a funcion

hola buenas tengo mi trigger en sql que es este:
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION ins_empleados() RETURNS TRIGGER AS $BODY$
  2. BEGIN
  3.   --tipo usuario A=admin, gg=gerente general, T=taller, S=secretaria
  4.  vrut := NEW.rut_empleado;
  5.  vrut1:= substr(NEW.rut_empleado,9,1);
  6.  
  7.  IF(val_rut(vrut,vrut1) = 'NO') THEN
  8.             RAISE EXCEPTION'El rut ingresado es inválido';
  9.  END IF;
  10.  NEW.nombre := LOWER(NEW.nombre);
  11.  NEW.apellido := LOWER(NEW.apellido);
  12.  NEW.tipo_usuario :='A';
  13.  NEW.nombre_usuario :=LOWER(NEW.nombre_usuario);
  14.  NEW.password :=LOWER(NEW.password);
  15.  
  16.  RETURN NEW;
  17. END;
  18. $BODY$
  19.   LANGUAGE 'plpgsql' VOLATILE;



y llamo a esta otra funcion:
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION val_rut(CHARACTER VARYING)
  2. RETURNS CHAR AS '
  3. DECLARE
  4.     rut ALIAS FOR $1;
  5.     rut_cero character varying(8);
  6.     valor int;
  7. BEGIN
  8.     valor := 0;
  9.     rut_cero := lpad(rut,8,''0'');
  10.  
  11.     valor := valor + (substring(rut_cero,8,1)::int8)*2;
  12.     valor := valor + (substring(rut_cero,7,1)::int8)*3;
  13.     valor := valor + (substring(rut_cero,6,1)::int8)*4;
  14.     valor := valor + (substring(rut_cero,5,1)::int8)*5;
  15.     valor := valor + (substring(rut_cero,4,1)::int8)*6;
  16.     valor := valor + (substring(rut_cero,3,1)::int8)*7;
  17.     valor := valor + (substring(rut_cero,2,1)::int8)*2;
  18.     valor := valor + (substring(rut_cero,1,1)::int8)*3;
  19.    
  20.     valor := valor % 11;
  21.  
  22.     IF valor =1 THEN
  23.         RETURN ''K'';
  24.     END IF;
  25.     IF valor =0 THEN
  26.         RETURN ''0'';
  27.     END IF;
  28.     IF valor>1 AND valor<11 THEN
  29.         RETURN (11-valor)::char;
  30.     END IF;
  31. END
  32. ' 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