| From: | Desarrollo Escuintla <desarrollo(dot)escuintla(at)gmail(dot)com> | 
|---|---|
| To: | pgsql-es-ayuda(at)postgresql(dot)org | 
| Subject: | Re: Funcion Trigger | 
| Date: | 2010-05-04 15:16:56 | 
| Message-ID: | p2oa6e132361005040816h98f5268coeb75ad018d4486@mail.gmail.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
Ya resolvi el problema,
era cuestión de tipo de argumento.
la función sp_traesaldo(integer),
debería recibir como paramentro un valor numeric:
sp_traesaldo(numeric)
saludos
2010/5/4 Desarrollo Escuintla <desarrollo(dot)escuintla(at)gmail(dot)com>
> Hola buen día,
>
> tengo el siguiente trigger:
>
>
>
> CREATE TRIGGER tri_actualizar_asig
>   AFTER INSERT
>    ON tbl_08
>   FOR EACH ROW
>   EXECUTE PROCEDURE *tri_actualiza_asignacion()*;
>
> y aqui el procedimiento:
>
> CREATE OR REPLACE FUNCTION *tri_actualiza_asignacion()*
>   RETURNS trigger AS
> $BODY$
>  DECLARE resto numeric;
>  BEGIN
> *  resto=sp_traesaldo(NEW.tbl_07_asignacion);*              //aqui me
> salta el error
>    IF (resto=0) THEN
>      UPDATE tbl_07 SET tbl_07_estado='PAGADO' WHERE
> tbl_07_asignacion=NEW.tbl_07_asignacion;
>    END IF;
>  RETURN NEW;
> END;
> $BODY$
>   LANGUAGE 'plpgsql' VOLATILE
>   COST 100;
>
>
>
> dentro del cual llamo a la siguiente funcion "sp_traesaldo(integer)":
> (que me devuelve el saldo restante entre el precio de venta y los abonos
> realizados y que recibe
>  como parametro el número de asignacion de la venta)
>
> CREATE OR REPLACE FUNCTION sp_traesaldo(integer)
>   RETURNS numeric AS
> $BODY$
>  SELECT
>  (tbl_03.tbl_03_pventa  - SUM(tbl_10.tbl_10_cant)) AS resto
>  FROM tbl_10 LEFT JOIN tbl_08
>  ON tbl_10.tbl_08_no=tbl_08.tbl_08_no
>  LEFT JOIN tbl_07 ON
>  tbl_07.tbl_07_asignacion=tbl_08.tbl_07_asignacion
>  LEFT JOIN tbl_03 ON
>  tbl_07.tbl_03_placa=tbl_03.tbl_03_placa
>  LEFT JOIN tbl_01 ON
>  tbl_07.tbl_01_codigo=tbl_01.tbl_01_codigo
>   WHERE tbl_10.tbl_08_no
>  IN (SELECT tbl_08.tbl_08_no FROM tbl_08 WHERE
>  tbl_08.tbl_07_asignacion=$1)
>  GROUP BY tbl_03.tbl_03_pventa,tbl_07.tbl_07_asignacion,
>  tbl_07.tbl_07_fecha,tbl_01.tbl_01_codigo;
> $BODY$
>   LANGUAGE 'sql' VOLATILE
>   COST 100;
> --
>
>
> pero al insertar un registro en la tabla "tbl_08" donde se debe activar el
> trigger
> despues de la inserción, me resulta el siguiente error:
>
>
> ERROR:  no existe la función sp_traesaldo(numeric)
> LINE 1: SELECT sp_traesaldo( $1 )
>                ^
> HINT:  Ninguna función coincide en el nombre y tipos de argumentos. Puede
> desear agregar conversión explícita de tipos.
> QUERY:  SELECT sp_traesaldo( $1 )
> CONTEXT:  PL/pgSQL function "tri_actualiza_asignacion" line 3 at asignación
>
>
>
> Saludos
>
> _________________
> José de Paz
> Escuintla, Guatemala
> Tel. (502)-56041676
>
> http://desarrolloescuintla.wordpress.com
>
>
-- 
Saludos
_________________
José de Paz
Escuintla, Guatemala
Tel. (502)-56041676
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Fernando Hevia | 2010-05-04 15:17:16 | RE: Funcion Trigger | 
| Previous Message | Fabián Eduardo Núñez Salcedo | 2010-05-04 15:11:47 | Re: Problema con la barra de Menu |