Yo creo que es como deja configurada la conexión a la bd el jdbc. Revisa to search_path como esta cuando estas conectado con "psql" para que lo configures de igual forma en la conexión al jdbc
Saludos El 15 de julio de 2014, 11:18, Felipe Hernández <pip...@gmail.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 >