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 16:14:21
Message-ID: 6b81cb150807230914v24672f52ke2ea934f29e0f56c@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message francisco . 2008-07-23 17:49:26 explain analyze
Previous Message Miguel Rodríguez Penabad 2008-07-23 16:08:15 Re: ayuda con ejecucion de funcion