Funcion no existe

From: Felipe Hernández <pipelx(at)gmail(dot)com>
To: pgsql-es-ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Funcion no existe
Date: 2014-07-15 16:18:37
Message-ID: CAPwoUi39dw_+svjOtjTrhkxy_-90FxuCPAptju1_fBj=r1J4ww@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Carlos Miguel Sing Ramos 2014-07-15 16:20:30 Buenas practicas Postgresql
Previous Message Ortolani, Jorge 2014-07-15 13:39:47 Alta disponibilidad de Postgresql