Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

problema con llamado a funcion

Estas en el tema de problema con llamado a funcion en el foro de PostgreSQL en Foros del Web. hola buenas tengo mi trigger en sql que es este: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE OR REPLACE FUNCTION ins_empleados ( ) RETURNS TRIGGER ...
  #1 (permalink)  
Antiguo 12/07/2010, 09:18
 
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
  #2 (permalink)  
Antiguo 12/07/2010, 10:40
Avatar de chicohot20  
Fecha de Ingreso: mayo-2009
Mensajes: 388
Antigüedad: 14 años, 10 meses
Puntos: 43
Respuesta: problema con llamado a funcion

Es porque tu funcion val_rut solo recibe un parametro y en tu trigger le estas enviando 2 parametros. Otro punto tu funcion val_rut te retorna un caracter como la 'K' , '0' y en tu trigger porque lo comparas con el caracter 'NO'? deberias comparar con lo que te devuelve el trigger.
  #3 (permalink)  
Antiguo 12/07/2010, 10:40
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: problema con llamado a funcion

Te has dado cuenta que la función que declaras recibe un solo parametro, y cuando la usas le envías 2?

Eso es exactamente lo que te dice el error
no existe la función val_rut(character varying, character varying)
Por que en la realidad lo que existe es
val_rut(character varying)


Se me adelantó chicohot20 con la misma anotación

saludos a ambos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 12/07/2010, 10:43
 
Fecha de Ingreso: enero-2009
Mensajes: 142
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: problema con llamado a funcion

que le enviaba dos parametros si me habia dado cuenta de lo otro no :( revisare otra vez vale :D

Etiquetas: funcion, llamado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:33.