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,'[EMAIL PROTECTED]',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 <[EMAIL PROTECTED]> 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 < > [EMAIL PROTECTED]> escribió: > > El día 23 de julio de 2008 16:40, Diego Ayala <[EMAIL PROTECTED]> >> 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