Re: ayuda con ejecucion de funcion

From: "Diego Ayala" <netdiego81(at)gmail(dot)com>
To: Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>
Cc: "Postgres Ayuda" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: ayuda con ejecucion de funcion
Date: 2008-07-23 20:19:21
Message-ID: 6b81cb150807231319y44eb55f2pf767dd689bea0d2a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

ejecutando la funcion con el casts funciona perfecto, pero al ejecutar la
funcion utilizando el dblink, obtengo el mismo error. Mi conexion es la
siguiente, esto esta metido dentro de un trigger AFTER INSERT
los valores de exp y anio son integer, ya probe casteandolos tambien pero
obtengo siempre el mismo resultado.

SELECT * INTO r1 FROM
dblink_connect('conn_wf41','hostaddr=192.168.192.199dbname=dncp-wf
user=desawf password=desawf');

PERFORM dblink_exec('conn_wf41','SELECT
sige_db.f_insert_tbl_expedientewf('||exp||','
||anio||','''||obs||''','||tipo::smallint||','||des::smallint||','
||med::smallint||','||mod||','||'now()':: timestamp without time
zone||','''||mail||''','||nen::smallint||',' ||ent::smallint||','
||uoc::smallint||',' ||suoc::smallint||',' ||uep::smallint||')' );

SELECT * INTO r1 FROM dblink_disconnect('conn_wf41');

intente castear los valores q le paso dentro de la ejecucion, pero sigo con
el mismo problema

desawf dncp-wf SELECTERROR: no existe la función
sige_db.f_insert_tbl_expedientewf(integer, integer, unknown, integer,
integer, integer, integer, unknown, integer, integer, integer, integer,
integer) en carácter 8
192.168.192.X(34070) desawf dncp-wf SELECTHINT: Ninguna función coincide en
el nombre y tipos de argumentos. Puede desear agregar conversión explícita
de tipos.
192.168.192.X(34070) desawf dncp-wf SELECTSENTENCIA: SELECT
sige_db.f_insert_tbl_expedientewf(12994,2008,'prueba de carga para
WF',2,0,0,8,'llucena(at)gmail(dot)com',51,1,1,0,0)
192.168.x(4951) dayala me INSERTERROR: sql error
192.168.x(4951) dayala me INSERTDETALLE: ERROR: no existe la función
sige_db.f_insert_tbl_expedientewf(integer, integer, unknown, integer,
integer, integer, integer, unknown, integer, integer, integer, integer,
integer)
LINEA 1: SELECT sige_db.f_insert_tbl_expedientewf(12994,2008,'prueba
...
^
HINT: Ninguna función coincide en el nombre y tipos de argumentos.
Puede desear agregar conversión explícita de tipos.

estoy realizando bien el cast dentro de la funcion o en que podria estar
equivocandome por eso q sigo con el problema, si es que me podrían ayudar
por favor, por que la verdad que ya estoy con esto un buen tiempo :-(

gracias..

El día 23 de julio de 2008 12:14, Diego Ayala <netdiego81(at)gmail(dot)com>
escribió:

> gracias por tu ayuda, intentare haciendo el cast, bueno, en realidad esta
> funcion lo debo invocar utilizando dblink, ya que esta en otra DB, entonces,
> cuando surge un evento en dentro de una tabla A en mi BD1, mediante un
> trigger y dblink, ejecuta esa funcion para insertar esos datos en la tabla B
> que esta en la base de datos B.. bueno, esa es la idea del por que esa
> funcion recibe esos parametros y hace la insercion..!!
>
> El día 23 de julio de 2008 12:08, Miguel Rodríguez Penabad <
> penabad(at)gmail(dot)com> escribió:
>
> El día 23 de julio de 2008 16:40, Diego Ayala <netdiego81(at)gmail(dot)com>
>> escribió:
>> > buenos dias listeros, tengo una consulta q quiero hacerles, tengo una
>> > funcion, q recibe varios parametros, con diferentes tipos de datos, esta
>> > funcion lo unico q debe hacer es insertar los datos que le llegan de los
>> > parametros dentro de una tabla, pero al ejecutar la funcion, recibo un
>> > mensaje de conversión de tipos.
>>
>> A mi esto me lleva a pensar que para que quieres la función (en mi
>> opinión para nada, pero puede haber algún motivo).
>>
>> > esta es mi funcion al pasarle los parametros.
>> >
>> > select sige_db.f_insert_tbl_expedientewf(1000,5000,2008, '1',2,2, 2, 8,
>> > current_date,'2', 51, 1, 1, 0, 0)
>> >
>> > este es el error q obtengo al ejecutar..
>> >
>> > ERROR: no existe la función sige_db.f_insert_tbl_expedientewf(integer,
>> > integer, integer, unknown, integer, integer, integer, integer, date,
>> > unknown, integer, integer, integer, integer, integer)
>> > LINE 1: select sige_db.f_insert_tbl_expedientewf(1000,5000,2008, '1'...
>>
>> El problema es que al llamar a la función sin hacer "cast" explícito
>> de los tipos, Postgres interpreta,
>> por ejemplo, que el primer parámetro (1000) es un integer, y en la
>> definición de tus funciones no hay ninguna
>> que coincida.
>>
>> Mira este ejemplo:
>>
>> penabad=> create table t1(a bigint, b varchar(20), c smallint);
>> CREATE TABLE
>> penabad=> create or replace function ins_t1(_a bigint,_b varchar, _c
>> smallint)
>> returns void as $$
>> begin
>> insert into t1 values(_a,_b,_c);
>> end
>> $$ language plpgsql;
>> CREATE FUNCTION
>>
>> Ahora tratamos de usar la función, y obtenemos un error
>>
>> penabad=> select ins_t1(1000,'1',3);
>> ERROR: no existe la función ins_t1(integer, unknown, integer)
>> LINEA 1: select ins_t1(1000,'1',3);
>> ^
>> HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede
>> desear
>> agregar conversión explícita de tipos.
>>
>> Hacemos un cast del primer parámetro como bigint, pero seguimos con
>> errores
>> penabad=> select ins_t1(1000::bigint,'1',3);
>> ERROR: no existe la función ins_t1(bigint, unknown, integer)
>> LINEA 1: select ins_t1(1000::bigint,'1',3);
>> ^
>> HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede
>> desear
>> agregar conversión explícita de tipos.
>>
>> Hacemos cast de los dos parámetros numéricos, y ahora sí que funciona
>> penabad=> select ins_t1(1000::bigint,'1',3::smallint);
>> ins_t1
>> --------
>>
>> (1 fila)
>>
>>
>> Así que supongo que la solución es usar estos casts.
>> Pero yo sigo pensando: ¿para qué quieres una función así?
>> ¿para asuntos de seguridad usando "security definer" en la definición
>> de la función?
>>
>> Un saludo
>>
>> --
>> Miguel Rodríguez Penabad
>>
>
>
>
> --
> Diego Ayala
>

--
Diego Ayala

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Kalelx Kalelx 2008-07-23 22:02:53 [OT]Sobre Implementar servicio de servidores virtuales
Previous Message Raul Andres Duque 2008-07-23 18:22:44 Re: EnterpriseDB Tuning Wizard