Re: Funcion no existe

From: Juan <smalltalker(dot)marcelo(at)gmail(dot)com>
To: Felipe Hernández <pipelx(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Funcion no existe
Date: 2014-07-15 21:46:55
Message-ID: CAKizN9wvNbcz4v6W3qKX2ToCs7Bwi_1WF5eZFh3P8EB9quZxRQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Felipe

Así a simple visa tu función espera un char(5) sino le pasas parametro
deberás crear otra función donde no reciba parametro.

Salu2
Jmdc
El 15/07/2014 13:19, "Felipe Hernández" <pipelx(at)gmail(dot)com> escribió:

> Hola,
>
> Se me esta presentando el siguiente problema, Tengo una funcion llamada
> pendientes, el llamado de esta funcion la hago de la siguiente forma,
>
> select pendientes('20294');
>
> donde '20294' es un codigo que varia; la funcion trabaja correctamente,
> pero si esta es llamada muchas veces obtengo el siguiente error:
>
> ERROR: no existe la función pendientes(character) en carácter 8
> HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede
> desear agregar conversión explícita de tipos.
>
> SENTENCIA: SELECT pendientes('20294');
>
> Hice la siguiente prueba para descartar el tipo de argumento, le quite el
> argumento a la funcion y la llame asi:
>
> select pendientes();
>
> Estableciendo como constante internamente '20294' el valor de la variable,
> pero obtengo un error similar
>
> ERROR: no existe la función pendientes() en carácter 8
> HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede
> desear agregar conversión explícita de tipos.
> SENTENCIA: SELECT pendientes();
>
> La funcion es eficiente, retornando el resultado en tiempos que van entre
> los 200 a 230 milisegudos como maximo.
>
> Estoy trabajando con un postgresql version 8.4.20, sistema operativo
> Centos kernel 2.6.32 y me conecto a postgres por jdbc.
>
> Adjunto procedimiento a continuacion.
>
> CREATE OR REPLACE FUNCTION pendientes(vlr character(5))
> RETURNS character AS
> $BODY$
> DECLARE
> fila resultadof%ROWTYPE;
> rta text;
> BEGIN
> rta:='';
>
> --TEMPORALES
> DROP TABLE IF EXISTS vinfo_pedido,vinfo_ppendiente,vdinfo_ppendiente,vinv,
> pendientes;
>
> CREATE TEMP TABLE vinfo_pedido(codigo character(5));
>
> INSERT INTO vinfo_pedido VALUES (vlr);
> UPDATE vinfo_pedido SET codigo=lpad(codigo,5,'0');
>
> CREATE TEMP TABLE vinfo_ppendiente AS
> SELECT
> ps.id_prod_serv,
> coalesce(sum(pedido),0)-coalesce(sum(despacho),0) AS pendiente
> FROM
> pendiente p,
> documentos d,
> prod_serv ps,
> vinfo_pedido ip
> WHERE
> ps.codigo=ip.codigo AND
> p.id_prod_serv=ps.id_prod_serv AND
> d.ndocumento=p.ndocumentoa AND
> p.estado AND
> d.estado
> GROUP BY
> ps.id_prod_serv
> HAVING
> coalesce(sum(pedido),0)-coalesce(sum(despacho),0)!=0;
>
> CREATE TEMP TABLE vdinfo_ppendiente AS
> SELECT
> ps.id_prod_serv,
> d.fecha::date,
> trim(g.nombre1||' '||g.nombre2||' '||g.apellido1||' '||g.apellido2||'
> '||g.razon_social) as tercero,
> coalesce(sum(pedido),0)-coalesce(sum(despacho),0) AS pendiente
> FROM
> general g,
> tercero_def t,
> pendiente p,
> documentos d,
> prod_serv ps,
> vinfo_pedido ip
> WHERE
> t.ndocumento=d.ndocumento AND
> t.id=g.id AND
> ps.codigo=ip.codigo AND
> p.id_prod_serv=ps.id_prod_serv AND
> d.ndocumento=p.ndocumentoa AND
> p.estado AND
> d.estado
> GROUP BY
> d.fecha::date,
> trim(g.nombre1||' '||g.nombre2||' '||g.apellido1||' '||g.apellido2||'
> '||g.razon_social),
> ps.id_prod_serv
> HAVING
> coalesce(sum(pedido),0)-coalesce(sum(despacho),0)!=0;
>
> CREATE TEMP TABLE vinv AS
> SELECT DISTINCT ON(p.id_prod_serv)
> p.id_prod_serv,
> p.cant_minima,
> d.ndocumento
> FROM
> inventarios i,
> documentos d,
> vinfo_pedido ip,
> prod_serv p
> WHERE
> ip.codigo=p.codigo AND
> p.id_prod_serv=i.id_prod_serv AND
> d.ndocumento=i.ndocumento AND
> (d.codigo_tipo='EA' OR
> d.codigo_tipo='RM')
> ORDER BY
> p.id_prod_serv,
> i.fecha DESC,
> orden DESC;
>
> DELETE FROM resultadof;
> INSERT INTO resultadof
> SELECT
> pp.fecha,
> pp.tercero,
> pp.dpendiente AS tpendientes,
> 'PENDIENTE '||COALESCE(pp.pendiente,0)||' - U.C.
> '||COALESCE(g.proveedor,'')||' - Cant. Mínima: '||COALESCE(g.cant_minima,0)
> AS pendiente
> FROM
> (SELECT
> pp.id_prod_serv,
> dp.fecha,
> dp.tercero,
> dp.pendiente AS dpendiente,
> pp.pendiente
> FROM
> vdinfo_ppendiente AS dp,
> vinfo_ppendiente AS pp
> WHERE
> dp.id_prod_serv=pp.id_prod_serv) AS pp
> FULL OUTER JOIN
> (SELECT
> i.id_prod_serv,
> d.fecha::date||' '||TRIM(g.nombre1||' '||g.nombre2||' '||g.apellido1||'
> '||g.apellido2||' '||g.razon_social||' CANT DESPACHADA
> '||to_char(dp.cant,'9,999,999.99')) AS proveedor,
> i.cant_minima
> FROM
> documentos d,
> datos_prod dp,
> tercero_def t,
> general g,
> vinv AS i
> WHERE
> dp.ndocumento=i.ndocumento AND
> dp.id_prod_serv=i.id_prod_serv AND
> i.ndocumento=d.ndocumento AND
> t.ndocumento=i.ndocumento AND
> t.id=g.id) AS g
> ON
> g.id_prod_serv=pp.id_prod_serv;
> --FUNCION INS
>
> create temp table pendientes (id_pendiente varchar(20),texto text);
>
> FOR fila IN SELECT * FROM resultadof
> LOOP
> -- INSERT INTO pendiente VALUES('0',fila.fecha);
> rta:=COALESCE(fila.fecha,current_date)||' -
> '||COALESCE(fila.tercero,'NO EXISTEN PENDIENTES A LA FECHA ')||' -
> '||COALESCE(fila.tpendientes,0)||'\n'||rta;
> END LOOP;
> rta:=rta||''||fila.pendiente;
> INSERT INTO pendientes VALUES(vlr,rta);
> return rta;
> END;
> $BODY$
> LANGUAGE plpgsql VOLATILE
> COST 100;
> ALTER FUNCTION pendientes(character(5))
> OWNER TO emaku;
>
>
>
>
> LUIS FELIPE HERNANDEZ
> PASTO - COLOMBIA
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Felipe Hernández 2014-07-15 22:11:02 Re: Funcion no existe
Previous Message Felipe de Jesús Molina Bravo 2014-07-15 21:41:33 Re: Funcion no existe