Guest User

Untitled

a guest
Oct 15th, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <dpi.h>
  5.  
  6. static dpiContext *g_context;
  7.  
  8. #define chkerr(func) do { \
  9. if ((func) < 0) { \
  10. dpiErrorInfo err; \
  11. dpiContext_getError(g_context, &err); \
  12. printf("ERROR at line %d\n %s\n %s\n", __LINE__, #func, err.message); \
  13. exit(1); \
  14. } \
  15. } while (0)
  16.  
  17. static const char *env(const char *name, const char *default_value)
  18. {
  19. const char *value = getenv(name);
  20. if (value == NULL) {
  21. value = default_value;
  22. }
  23. return value;
  24. }
  25.  
  26. int main()
  27. {
  28. const char *username = env("ODPIC_SAMPLES_MAIN_USER", "odpicdemo");
  29. const char *password = env("ODPIC_SAMPLES_MAIN_PASSWORD", "welcome");
  30. const char *connectString = env("ODPIC_SAMPLES_CONNECT_STRING", "localhost/orclpdb");
  31. const char *sqltext1 = "select to_timestamp_tz('2017-01-01 00:00:00 -3:30', 'YYYY-MM-DD HH24:MI:SS TZH:TZM') from dual";
  32. const char *sqltext2 = "select to_char(:1, 'YYYY-MM-DD HH24:MI:SS TZH:TZM') from dual";
  33. dpiErrorInfo err;
  34. dpiConn *conn;
  35. dpiStmt *stmt;
  36. uint32_t numQueryColumns;
  37. uint32_t bufferRowIndex;
  38. int found;
  39. dpiNativeTypeNum nativeTypeNum;
  40. dpiVar *var;
  41. dpiData *data;
  42. dpiTimestamp ts;
  43.  
  44. if (dpiContext_create(DPI_MAJOR_VERSION, DPI_MINOR_VERSION, &g_context, &err) < 0) {
  45. printf("ERROR\n dpiContext_create()\n %s\n", err.message);
  46. exit(1);
  47. }
  48.  
  49. chkerr(dpiConn_create(g_context, username, strlen(username), password, strlen(password),
  50. connectString, strlen(connectString), NULL, NULL, &conn));
  51.  
  52. // fetch timestamp with time zone whose offset is '-03:30'.
  53. chkerr(dpiConn_prepareStmt(conn, 0, sqltext1, strlen(sqltext1), NULL, 0, &stmt));
  54. chkerr(dpiStmt_execute(stmt, 0, &numQueryColumns));
  55. chkerr(dpiStmt_fetch(stmt, &found, &bufferRowIndex));
  56. if (!found) {
  57. printf("No rows are found.\n");
  58. exit(1);
  59. }
  60. chkerr(dpiStmt_getQueryValue(stmt, 1, &nativeTypeNum, &data));
  61. ts = *dpiData_getTimestamp(data);
  62. printf("Timestamp value:\n"
  63. " year: %d\n"
  64. " month: %u\n"
  65. " day: %u\n"
  66. " hour: %u\n"
  67. " minute: %u\n"
  68. " second: %u\n"
  69. " fsecond %u\n"
  70. " tzHourOffset: %d\n"
  71. " tzMinuteOffset: %d\n\n",
  72. ts.year, ts.month, ts.day,
  73. ts.hour, ts.minute, ts.second, ts.fsecond,
  74. ts.tzHourOffset, ts.tzMinuteOffset);
  75. chkerr(dpiStmt_release(stmt));
  76.  
  77. // bind the fetched timestamp
  78. chkerr(dpiConn_newVar(conn, DPI_ORACLE_TYPE_TIMESTAMP_TZ, DPI_NATIVE_TYPE_TIMESTAMP, 1, 0, 0, 0, NULL, &var, &data));
  79. dpiData_setTimestamp(data, ts.year, ts.month, ts.day, ts.hour,
  80. ts.minute, ts.second, ts.fsecond,
  81. ts.tzHourOffset, ts.tzMinuteOffset);
  82. chkerr(dpiConn_prepareStmt(conn, 0, sqltext2, strlen(sqltext2), NULL, 0, &stmt));
  83. chkerr(dpiStmt_bindByPos(stmt, 1, var));
  84. chkerr(dpiStmt_execute(stmt, 0, &numQueryColumns)); // error here!
  85. printf("No error\n");
  86.  
  87. // cleanup
  88. chkerr(dpiStmt_release(stmt));
  89. chkerr(dpiConn_release(conn));
  90. return 0;
  91. }
Add Comment
Please, Sign In to add comment