| From: | PG Doc comments form <noreply(at)postgresql(dot)org> | 
|---|---|
| To: | pgsql-docs(at)lists(dot)postgresql(dot)org | 
| Cc: | andrew(at)andrewculver(dot)com | 
| Subject: | ECPG cursor examples should include EXEC SQL WHENEVER NOT FOUND CONTINUE; after the while loop | 
| Date: | 2021-07-03 11:54:11 | 
| Message-ID: | 162531325118.701.13401788614496956581@wrigleys.postgresql.org | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-docs | 
The following documentation comment has been logged on the website:
Page: https://www.postgresql.org/docs/13/ecpg-variables.html
Description:
Without this line:
EXEC SQL WHENEVER NOT FOUND CONTINUE;
after the while(1), I find that ECPG CURSOR examples fail.
For example, this example under 36.4.4.3.2. Structures fails:
EXEC SQL BEGIN DECLARE SECTION;
    typedef struct
    {
       int oid;
       char datname[65];
       long long int size;
    } dbinfo_t;
    dbinfo_t dbval;
EXEC SQL END DECLARE SECTION;
memset(&dbval, 0, sizeof(dbinfo_t));
    EXEC SQL DECLARE cur1 CURSOR FOR SELECT oid, datname,
pg_database_size(oid) AS size FROM pg_database;
    EXEC SQL OPEN cur1;
    /* when end of result set reached, break out of while loop */
    EXEC SQL WHENEVER NOT FOUND DO BREAK;
    while (1)
    {
        /* Fetch multiple columns into one structure. */
        EXEC SQL FETCH FROM cur1 INTO :dbval;
        /* Print members of the structure. */
        printf("oid=%d, datname=%s, size=%lld\n", dbval.oid, dbval.datname,
dbval.size);
    }
    EXEC SQL CLOSE cur1;
| From | Date | Subject | |
|---|---|---|---|
| Next Message | David Rowley | 2021-07-04 10:38:33 | Re: Update maintenance_work_mem/autovacuum_work_mem to reflect the 1GB limitation with VACUUM | 
| Previous Message | Bruce Momjian | 2021-07-03 00:43:41 | Re: Cities name column name inconsistent |