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
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 |