test2.pgc
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:3k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. exec sql include header_test;
  2. exec sql type c is char reference;
  3. typedef char* c;
  4. exec sql type ind is union { int integer; short smallint; };
  5. typedef union { int integer; short smallint; } ind;
  6. exec sql type str is varchar[8];
  7. int
  8. main ()
  9. {
  10. typedef struct { long born; short age; } birthinfo;
  11. exec sql type birthinfo is struct { long born; short age; };
  12. exec sql begin declare section;
  13. struct personal_struct { str name;
  14. birthinfo birth;
  15. } personal;
  16. struct personal_indicator { int ind_name;
  17. birthinfo ind_birth;
  18.   } ind_personal;
  19. float ind_married;
  20. ind children;
  21. ind ind_children;
  22. char *married = NULL;
  23. c testname="Petra";
  24. char *query="select name, born, age, married, children from meskes where name = :var1";
  25. exec sql end declare section;
  26. exec sql var ind_married is long;
  27. exec sql declare cur cursor for
  28.        select name, born, age, married, children from meskes;
  29. char msg[128], command[128];
  30. FILE *dbgs;
  31. if ((dbgs = fopen("log", "w")) != NULL)
  32.                 ECPGdebug(1, dbgs);
  33. strcpy(msg, "connect");
  34. exec sql connect to unix:postgresql://localhost:5432/mm;
  35. strcpy(msg, "create");
  36. exec sql create table meskes(name char(8), born integer, age smallint, married date, children integer);
  37. strcpy(msg, "insert");
  38. exec sql insert into meskes(name, married, children) values ('Petra', '19900404', 3);
  39. exec sql insert into meskes(name, born, age, married, children) values ('Michael', 19660117, 33, '19900404', 3);
  40. exec sql insert into meskes(name, born, age) values ('Carsten', 19910103, 8);
  41. exec sql insert into meskes(name, born, age) values ('Marc', 19930907, 5);
  42. exec sql insert into meskes(name, born, age) values ('Chris', 19970923, 1);
  43. strcpy(msg, "commit");
  44. exec sql commit;
  45. strcpy(msg, "open");
  46. exec sql open cur;
  47. exec sql whenever not found do break;
  48. while (1) {
  49. strcpy(msg, "fetch");
  50. exec sql fetch in cur into :personal:ind_personal, :married:ind_married, :children.integer:ind_children.smallint;
  51. printf("%8.8s", personal.name.arr);
  52. if (ind_personal.ind_birth.born >= 0)
  53. printf(", born %d", personal.birth.born);
  54. if (ind_personal.ind_birth.age >= 0)
  55. printf(", age = %d", personal.birth.age);
  56. if ((long)ind_married >= 0)
  57. printf(", married %s", married);
  58. if (ind_children.smallint >= 0)
  59. printf(", children = %d", children.integer);
  60. putchar('n');
  61. free(married);
  62. married = NULL;
  63. }
  64. strcpy(msg, "close");
  65. exec sql close cur;
  66. /* and now the same query with prepare */
  67. exec sql prepare MM from :query;
  68. exec sql declare prep cursor for MM;
  69. strcpy(msg, "open");
  70. exec sql open prep using :testname;
  71. exec sql whenever not found do break;
  72. while (1) {
  73. strcpy(msg, "fetch");
  74. exec sql fetch in prep into :personal:ind_personal, :married:ind_married, :children.integer:ind_children.smallint;
  75. printf("%8.8s", personal.name.arr);
  76. if (ind_personal.ind_birth.born >= 0)
  77. printf(", born %d", personal.birth.born);
  78. if (ind_personal.ind_birth.age >= 0)
  79. printf(", age = %d", personal.birth.age);
  80. if ((long)ind_married >= 0)
  81. printf(", married %s", married);
  82. if (ind_children.smallint >= 0)
  83. printf(", children = %d", children.integer);
  84. putchar('n');
  85. }
  86. free(married);
  87. strcpy(msg, "close");
  88. exec sql close prep;
  89. strcpy(msg, "drop");
  90. exec sql drop table meskes;
  91. strcpy(msg, "commit");
  92. exec sql commit;
  93. strcpy(msg, "disconnect"); 
  94. exec sql disconnect;
  95. if (dbgs != NULL)
  96.                 fclose(dbgs);
  97. return (0);
  98. }