Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/interfaces/ecpg/test/preproc/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 6 kB image not shown  

Quelle  cursor.pgc   Sprache: unbekannt

 
Spracherkennung für: .pgc vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#include <stdlib.h>
#include <string.h>

exec sql include ../regression;

exec sql whenever sqlerror stop;

exec sql type c is char reference;
typedef char* c;

exec sql type ind is union { int integer; short smallint; };
typedef union { int integer; short smallint; } ind;

#define BUFFERSIZ 8
exec sql type str is varchar[BUFFERSIZ];

#define CURNAME "mycur"

int
main (void)
{
exec sql begin declare section;
 char *stmt1 = "SELECT id, t FROM t1";
 char *curname1 = CURNAME;
 char *curname2 = CURNAME;
 char *curname3 = CURNAME;
 varchar curname4[50];
 char *curname5 = CURNAME;
 int count;
 int id;
 char t[64];
exec sql end declare section;

 char msg[128];

 ECPGdebug(1, stderr);

 strcpy(msg, "connect");
 exec sql connect to REGRESSDB1 as test1;
 exec sql connect to REGRESSDB2 as test2;

 strcpy(msg, "set");
 exec sql at test1 set datestyle to iso;

 strcpy(msg, "create");
 exec sql at test1 create table t1(id serial primary key, t text);
 exec sql at test2 create table t1(id serial primary key, t text);

 strcpy(msg, "insert");
 exec sql at test1 insert into t1(id, t) values (default, 'a');
 exec sql at test1 insert into t1(id, t) values (default, 'b');
 exec sql at test1 insert into t1(id, t) values (default, 'c');
 exec sql at test1 insert into t1(id, t) values (default, 'd');
 exec sql at test2 insert into t1(id, t) values (default, 'e');

 strcpy(msg, "commit");
 exec sql at test1 commit;
 exec sql at test2 commit;

 /* Dynamic cursorname test with INTO list in FETCH stmts */

 strcpy(msg, "declare");
 exec sql at test1 declare :curname1 cursor for
  select id, t from t1;

 strcpy(msg, "open");
 exec sql at test1 open :curname1;

 strcpy(msg, "fetch from");
 exec sql at test1 fetch forward from :curname1 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch");
 exec sql at test1 fetch forward :curname1 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch 1 from");
 exec sql at test1 fetch 1 from :curname1 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch :count from");
 count = 1;
 exec sql at test1 fetch :count from :curname1 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "move in");
 exec sql at test1 move absolute 0 in :curname1;

 strcpy(msg, "fetch 1");
 exec sql at test1 fetch 1 :curname1 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch :count");
 count = 1;
 exec sql at test1 fetch :count :curname1 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "close");
 exec sql at test1 close :curname1;

 /* Dynamic cursorname test with INTO list in DECLARE stmt */

 strcpy(msg, "declare");
 exec sql at test1 declare :curname2 cursor for
  select id, t into :id, :t from t1;

 strcpy(msg, "open");
 exec sql at test1 open :curname2;

 strcpy(msg, "fetch from");
 exec sql at test1 fetch from :curname2;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch");
 exec sql at test1 fetch :curname2;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch 1 from");
 exec sql at test1 fetch 1 from :curname2;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch :count from");
 count = 1;
 exec sql at test1 fetch :count from :curname2;
 printf("%d %s\n", id, t);

 strcpy(msg, "move");
 exec sql at test1 move absolute 0 :curname2;

 strcpy(msg, "fetch 1");
 exec sql at test1 fetch 1 :curname2;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch :count");
 count = 1;
 exec sql at test1 fetch :count :curname2;
 printf("%d %s\n", id, t);

 strcpy(msg, "close");
 exec sql at test1 close :curname2;

 /* Dynamic cursorname test with PREPARED stmt */

 strcpy(msg, "prepare");
 exec sql at test1 prepare st_id1 from :stmt1;
 exec sql at test2 prepare st_id1 from :stmt1;

 strcpy(msg, "declare");
 exec sql at test1 declare :curname3 cursor for st_id1;
 exec sql at test2 declare :curname5 cursor for st_id1;

 strcpy(msg, "open");
 exec sql at test1 open :curname3;
 exec sql at test2 open :curname5;

 strcpy(msg, "fetch");
 exec sql at test2 fetch :curname5 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch from");
 exec sql at test1 fetch from :curname3 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch 1 from");
 exec sql at test1 fetch 1 from :curname3 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch :count from");
 count = 1;
 exec sql at test1 fetch :count from :curname3 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "move");
 exec sql at test1 move absolute 0 :curname3;

 strcpy(msg, "fetch 1");
 exec sql at test1 fetch 1 :curname3 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch :count");
 count = 1;
 exec sql at test1 fetch :count :curname3 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "close");
 exec sql at test1 close :curname3;
 exec sql at test2 close :curname5;

 strcpy(msg, "deallocate prepare");
 exec sql at test1 deallocate prepare st_id1;
 exec sql at test2 deallocate prepare st_id1;

 /* Dynamic cursorname test with PREPARED stmt,
    cursor name in varchar */

 curname4.len = strlen(CURNAME);
 strcpy(curname4.arr, CURNAME);

 strcpy(msg, "prepare");
 exec sql at test1 prepare st_id2 from :stmt1;

 strcpy(msg, "declare");
 exec sql at test1 declare :curname4 cursor for st_id2;

 strcpy(msg, "open");
 exec sql at test1 open :curname4;

 strcpy(msg, "fetch from");
 exec sql at test1 fetch from :curname4 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch");
 exec sql at test1 fetch :curname4 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch 1 from");
 exec sql at test1 fetch 1 from :curname4 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch :count from");
 count = 1;
 exec sql at test1 fetch :count from :curname4 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "move");
 exec sql at test1 move absolute 0 :curname4;

 strcpy(msg, "fetch 1");
 exec sql at test1 fetch 1 :curname4 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "fetch :count");
 count = 1;
 exec sql at test1 fetch :count :curname4 into :id, :t;
 printf("%d %s\n", id, t);

 strcpy(msg, "close");
 exec sql at test1 close :curname4;

 strcpy(msg, "deallocate prepare");
 exec sql at test1 deallocate prepare st_id2;

 /* End test */

 strcpy(msg, "drop");
 exec sql at test1 drop table t1;
 exec sql at test2 drop table t1;

 strcpy(msg, "commit");
 exec sql at test1 commit;

 strcpy(msg, "disconnect");
 exec sql disconnect all;

 return 0;
}

[Dauer der Verarbeitung: 0.18 Sekunden, vorverarbeitet 2026-08-08]