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

数据库系统

开发平台:

Unix_Linux

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