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 -- TIP 8: explain analyze es tu amigo