Re: como anidar funciones plpgsql

Lists: pgsql-es-ayuda
From: "Carlos Mendez" <lucas1850(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: como anidar funciones plpgsql
Date: 2008-01-30 13:55:56
Message-ID: 4610af1f0801300555o720449f6g2ed9bf6d67294725@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola,

estoy aprendiendo a realizar funciones en plpgsql, hice algunas, ahora tengo
que ejecutarlas en cadena, es decir una a continuacion de otra, lo que se me
ocurre es realizar otra funcion que agrupe a todas las funciones, no se si
existe otra manera mejor de solucionarlo,
hice la sgte funcion llamada unirfunc, no tiene parametros de entrada,
retorna un int4, utilizo pgaccess;

DECLARE
consulta varchar;
resultado integer;
BEGIN
consulta:='select insertar()';
raise notice 'LA CONSULTA ES: %',consulta;
execute consulta into resultado;
raise notice 'el resultado es: %',resultado;
RETURN 1;
END;

la funcion no tiene mucho sentido, es solo para aprender, lo que me arroja
es:

CONTEXTO: SQL statement "select insertar()"
PL/pgSQL function "unirfunc" line 7 at execute statement

Lo que hace insertar() es tomar los registros de una tabla e insertarlos o
actualizarlos segun sea el caso en otra tabla.
he probado la funcion unirfunc() con otra funcion mas sencilla como una que
cuenta las filas de una tabla y funciona bien, pero con insertar() me sale
lo que dije anteriormente

Gracias de antemano por la ayuda.
saludos.


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Carlos Mendez <lucas1850(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: como anidar funciones plpgsql
Date: 2008-01-30 16:48:33
Message-ID: 20080130164833.GJ4536@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Carlos Mendez escribió:

> estoy aprendiendo a realizar funciones en plpgsql, hice algunas, ahora tengo
> que ejecutarlas en cadena, es decir una a continuacion de otra, lo que se me
> ocurre es realizar otra funcion que agrupe a todas las funciones, no se si
> existe otra manera mejor de solucionarlo,
> hice la sgte funcion llamada unirfunc, no tiene parametros de entrada,
> retorna un int4, utilizo pgaccess;

pgaccess? Estas de broma? Ese programa lleva años muerto. Mejor usa
pgAdmin.

> DECLARE
> consulta varchar;
> resultado integer;
> BEGIN
> consulta:='select insertar()';
> raise notice 'LA CONSULTA ES: %',consulta;
> execute consulta into resultado;
> raise notice 'el resultado es: %',resultado;
> RETURN 1;
> END;

Prueba con

begin
perform insertar();
return 1;
end;

Si necesitas el resultado para algo (lo cual me parece dudoso), puedes
hacer

declare
resultado integer;
begin;
select insertar() into resultado;
raise notice 'el resultado es %', resultado;
return 1;
end;

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


From: "Carlos Mendez" <lucas1850(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: como anidar funciones plpgsql
Date: 2008-01-31 02:16:15
Message-ID: 4610af1f0801301816h3c28a40bl81b1500bc9b1c0af@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola, gracias por responder,

probe con perform, ahora sale:

CONTEXTO: SQL statement "SELECT insertar()"
PL/pgSQL function "unirfunc()" line 8 at perform

y en la linea 8 creo, tengo lo sgte:

perform insertar();

la funcion parece que se ejecuta correctamente, pero sin embargo sale ese
aviso o advertencia lo cual quisiera saber que me quiere decir, como
mencione antes la funcion toma los registros de una tabla y trata de
insertarlos o actualizarlos en otra, y parece que cada vez que toma un
registro para insetarlo o actualizarlo aparece el mensaje o aviso, pero la
funcion no se detiene solo el mensaje aparece como en un bucle, bueno en la
funcion utilizo varios bucles debe ser por eso que el mensaje se repite,
para probar las funciones utilizo la consola de windows y es ahi donde veo
la advertencia o aviso que se repite varias veces cuando ejecuto la funcion
unirfunc();

Gracias de antemano por la ayuda,
saludos.

2008/1/30, Alvaro Herrera <alvherre(at)commandprompt(dot)com>:
>
> Carlos Mendez escribió:
>
> > estoy aprendiendo a realizar funciones en plpgsql, hice algunas, ahora
> tengo
> > que ejecutarlas en cadena, es decir una a continuacion de otra, lo que
> se me
> > ocurre es realizar otra funcion que agrupe a todas las funciones, no se
> si
> > existe otra manera mejor de solucionarlo,
> > hice la sgte funcion llamada unirfunc, no tiene parametros de entrada,
> > retorna un int4, utilizo pgaccess;
>
> pgaccess? Estas de broma? Ese programa lleva años muerto. Mejor usa
> pgAdmin.
>
> > DECLARE
> > consulta varchar;
> > resultado integer;
> > BEGIN
> > consulta:='select insertar()';
> > raise notice 'LA CONSULTA ES: %',consulta;
> > execute consulta into resultado;
> > raise notice 'el resultado es: %',resultado;
> > RETURN 1;
> > END;
>
>
> Prueba con
>
> begin
> perform insertar();
> return 1;
> end;
>
> Si necesitas el resultado para algo (lo cual me parece dudoso), puedes
> hacer
>
> declare
> resultado integer;
> begin;
> select insertar() into resultado;
> raise notice 'el resultado es %', resultado;
> return 1;
> end;
>
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/
> The PostgreSQL Company - Command Prompt, Inc.
>


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Carlos Mendez <lucas1850(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: como anidar funciones plpgsql
Date: 2008-01-31 12:42:04
Message-ID: 20080131124204.GH5145@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Carlos Mendez escribió:
> Hola, gracias por responder,
>
> probe con perform, ahora sale:
>
> CONTEXTO: SQL statement "SELECT insertar()"
> PL/pgSQL function "unirfunc()" line 8 at perform
>
> y en la linea 8 creo, tengo lo sgte:
>
> perform insertar();

Que aparece antes de la linea CONTEXTO?

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


From: "Carlos Mendez" <lucas1850(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: como anidar funciones plpgsql
Date: 2008-01-31 13:47:47
Message-ID: 4610af1f0801310547y5d017850v2ded16119db3012d@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola,
ejecuto la sgte funcion:

CREATE OR REPLACE FUNCTION unirfunc()
RETURNS integer AS
$BODY$DECLARE
consulta varchar;
result integer;
BEGIN
--consulta:='select insertar()';
--raise notice 'LA CONSULTA ES: %',consulta;
--execute consulta5 into result;
perform insertar();
--raise notice 'el resultado es: %',result;
RETURN 1;
END;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION unirfunc() OWNER TO carlos;

para ejecutar la funcion voy al pgadminIII a la venta query tool y escribo:
select unirfunc(); y ejecuto
el resultado en la pestaña data output me dice 1 es decir al parecer no
existe error, voy a la pestaña messages y ahi encuentro el mensaje que
mencione anteriormente:

CONTEXTO: SQL statement "SELECT insertar()"
PL/pgSQL function "unirfunc" line 8 at perform

como en la funcion insertar() utilizo utilizo bucles, puse varios raise
notice para ir testeando la funcion, por lo tanto el mensaje contexto me
aparece varias veces y los notice tambien,
antes de contexto solo aparece notices he aqui un ejemplo:

NOTICE: al principio bandera vale: <NULL>
CONTEXTO: SQL statement "SELECT insertar()"
PL/pgSQL function "unirfunc" line 8 at perform
NOTICE: select * from alumnos where id=1 //esta consulta la escribi con
raise notice
CONTEXTO: SQL statement "SELECT insertar()"
PL/pgSQL function "unirfunc" line 8 at perform
NOTICE: llegamos
CONTEXTO: SQL statement "SELECT insertar()"
PL/pgSQL function "unirfunc" line 8 at perform

cuando ejecuto *directamente* la funcion insertar() no aparece ningun
"CONTEXTO:" solo los notice que yo le puse,

Gracias de antemano por la ayuda,
saludos.

2008/1/31, Alvaro Herrera <alvherre(at)commandprompt(dot)com>:
>
> Carlos Mendez escribió:
> > Hola, gracias por responder,
> >
> > probe con perform, ahora sale:
> >
> > CONTEXTO: SQL statement "SELECT insertar()"
> > PL/pgSQL function "unirfunc()" line 8 at perform
> >
> > y en la linea 8 creo, tengo lo sgte:
> >
> > perform insertar();
>
> Que aparece antes de la linea CONTEXTO?
>
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Carlos Mendez <lucas1850(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: como anidar funciones plpgsql
Date: 2008-01-31 14:19:47
Message-ID: 20080131141947.GA7471@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Carlos Mendez escribió:

> NOTICE: al principio bandera vale: <NULL>
> CONTEXTO: SQL statement "SELECT insertar()"
> PL/pgSQL function "unirfunc" line 8 at perform
> NOTICE: select * from alumnos where id=1 //esta consulta la escribi con
> raise notice
> CONTEXTO: SQL statement "SELECT insertar()"
> PL/pgSQL function "unirfunc" line 8 at perform

El CONTEXTO es parte del NOTICE. Esta ahi para decirte en que lugar se
esta invocando el NOTICE. Cuando quites el RAISE NOTICE, desaparecera
tambien el contexto. Es decir, en el pedazo de log de arriba solo hay
dos mensajes de log: el "al principio el bandera vale" y el "select *
from alumnos". El resto de las lineas son parte de cada uno.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


From: "Carlos Mendez" <lucas1850(at)gmail(dot)com>
To: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: como anidar funciones plpgsql
Date: 2008-01-31 14:51:19
Message-ID: 4610af1f0801310651x3e7be0a5ud27d92b6aa5b3395@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Si, tienen razon, Muchas gracias por la ayuda,
saludos.

2008/1/31, Alvaro Herrera <alvherre(at)commandprompt(dot)com>:
>
> Carlos Mendez escribió:
>
> > NOTICE: al principio bandera vale: <NULL>
> > CONTEXTO: SQL statement "SELECT insertar()"
> > PL/pgSQL function "unirfunc" line 8 at perform
> > NOTICE: select * from alumnos where id=1 //esta consulta la escribi
> con
> > raise notice
> > CONTEXTO: SQL statement "SELECT insertar()"
> > PL/pgSQL function "unirfunc" line 8 at perform
>
> El CONTEXTO es parte del NOTICE. Esta ahi para decirte en que lugar se
> esta invocando el NOTICE. Cuando quites el RAISE NOTICE, desaparecera
> tambien el contexto. Es decir, en el pedazo de log de arriba solo hay
> dos mensajes de log: el "al principio el bandera vale" y el "select *
> from alumnos". El resto de las lineas son parte de cada uno.
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/
> PostgreSQL Replication, Consulting, Custom Development, 24x7 support
>