Обсуждение: ECPG and Curors.

Поиск
Список
Период
Сортировка

ECPG and Curors.

От
"Peter L. Berghold"
Дата:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I'm looking at the documentation for Postgresql in Chapter 30 and I'm
checking out how to use FETCH INTO and CURSORs to loop through multiple
results from a table.

In the documentation they show something like

EXEC SQL DECLARE foo CURSOR for select a,b,c from test_table

do {
EXEC SQL FETCH NEXT FROM foo INTO ....

} while ( ... );

what I don't see is how to detect that I've fetched the last row from a
query.   Is there more complete doco on this process somewhere?



- --
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Peter L. Berghold                                     Peter@Berghold.Net
"Those who fail to learn from history are condemned to repeat it."
AIM: redcowdawg        Yahoo IM: blue_cowdawg              ICQ: 11455958
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
Comment: Using GnuPG with Red Hat - http://enigmail.mozdev.org

iD8DBQFEji2QUM9/01RIhaARAqV6AJ43/F6y5sKbvY837dVwNL8ZPz0MxgCeIJlL
5Fo3FyR3e5Aup53s/z0UrxY=
=RLxy
-----END PGP SIGNATURE-----

Вложения

Re: ECPG and Curors.

От
Michael Meskes
Дата:
On Mon, Jun 12, 2006 at 11:14:24PM -0400, Peter L. Berghold wrote:
> what I don't see is how to detect that I've fetched the last row from a
> query.   Is there more complete doco on this process somewhere?

Just look for "exec sql whenever not found ..."

Michael

--
Michael Meskes
Email: Michael at Fam-Meskes dot De, Michael at Meskes dot (De|Com|Net|Org)
ICQ: 179140304, AIM/Yahoo: michaelmeskes, Jabber: meskes@jabber.org
Go SF 49ers! Go Rhein Fire! Use Debian GNU/Linux! Use PostgreSQL!

Re: ECPG and Curors.

От
"John Smith"
Дата:
On Mon, Jun 12, 2006 at 11:14:24PM -0400, Peter L. Berghold wrote:
> what I don't see is how to detect that I've fetched the last row from a
> query.   Is there more complete doco on this process somewhere?

You could either handle a NOT FOUND exception, or make use of SQLCODE or
SQLSTATE like this...


EXEC SQL DECLARE csr_fred CURSOR FOR SELECT....

EXEC SQL OPEN csr_fred;

while (SQLCODE == 0) {
    EXEC SQL FETCH csr_fred INTO :jim, :sheila,...

    if (SQLCODE == 0) {

        ....
        body of row processing here
        ....
    }
}

EXEC SQL CLOSE csr_fred;