Re: CURSORES

From: "Marco Castillo" <mabcastillo(at)gmail(dot)com>
To: "FRANZ RICHARD MARIN VASQUEZ" <frarimava(at)hotmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: CURSORES
Date: 2007-03-23 19:07:09
Message-ID: 47f6f3240703231207x5c34dd1bya9afa80c908e9af3@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Estimado Franz:
Necesitas abrir y cerrar adecuadamente los cursores. Te mando un código de
ejemplo:

open cr_catalogo(parametros_cursor);
fetch cr_catalogo into variables_cursor;
while found loop
-- Procesas la información que guardaste en las variables del cursor...

-- Siguiente registro...
fetch cr_catalogo into variables_cursor;
end loop;
close cr_catalogo;

Ahora parametros_cursor son los parametros que definiste en el cursor al
declararlo. variables_cursor son variables
declaradas en la seccion de declare del mismo tipo y en el mismo orden de
los valores que regresa el select del cursor.
Ahora para saber cuantos valores va a regresar el cursor, te aconsejo hacer
un count(*), no hay manera de saberlo de antemano. Si quieres saberlo luego
de procesar el cursor, en el código de arriba agrega un contador.
Espero que esto te sirva

Saludos

Marco

On 3/23/07, FRANZ RICHARD MARIN VASQUEZ <frarimava(at)hotmail(dot)com> wrote:
>
> BUEN DIA .... TENGO UN PROBLEMA CON EL MANEJO DE CURSORES EN UN PL
> CON EL
>
> FETCH NEXT FROM nombre_cursor
>
> y trambien necesito saber con obtengo el nuemro de filas que tiene ese
> cursos o una varible de tipo record
>
> esto es lo que estoy tratando de hacer
>
>
> CREATE OR REPLACE FUNCTION manejocursorprueba(empresa integer, usuario
> text, clave text)
> RETURNS integer AS
> $BODY$
> DECLARE
> --LV_EMPRESAS empresas%ROWTYPE;
> LV_strconexion text;
> SqlStr text;
> CR_catalogo CURSOR FOR SELECT * FROM dblink(LV_strconexion,'SELECT
> trim(dblk_host),trim(dblk_dbname),trim(dblk_port) FROM tcatd_dblinksempresas
> WHERE empr_codigo ='||$1||' AND dblk_estado = ''A''') AS (dblk_host
> varchar,dblk_dbname varchar,dblk_port varchar);
> prueba record;
> otra varchar;
> i integer;
> f integer;
> BEGIN
> --Se crea la conexion con la DB de catalogo
> LV_strconexion := 'hostaddr=127.0.0.1 port=5432 dbname= catalogoDBs
> user='||usuario||' password='||clave;
> EXECUTE 'SELECT
> dblink_connect(''LG_conexcatalog'','||quote_literal(LV_strconexion)||')';
> FETCH NEXT FROM CR_catalogo;
> FETCH CR_catalogo INTO prueba;
> i := 0;
> --FETCH COUNT FROM CR_catalogo INTO F;
> FOR i IN 1..prueba/* necesito saber para este for cuantos registro
> contiene el cursor o en su defecto la varible prueba*/ LOOP
> otra := prueba.dblk_dbname;
> END LOOP;
>
> RETURN 1;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
>
>
>
> ------------------------------
> Prueba algunos de los nuevos servicios en línea que te ofrece Windows Live
> Ideas: tan nuevos que ni siquiera se han publicado oficialmente todavía.
> Pruébalo <http://ideas.live.com>
>

In response to

  • CURSORES at 2007-03-23 16:33:57 from FRANZ RICHARD MARIN VASQUEZ

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Javier Carlos 2007-03-23 19:09:52 Re: Transacciones!
Previous Message Alvaro Herrera 2007-03-23 18:47:11 Re: Transacciones!