a pastebin project

vpol

  1. #include <oci.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. #define MAXL 4000
  7.  
  8. typedef struct sql_oracle_sock {
  9.       OCIEnv        *env;
  10.       OCIError    *errHandle;
  11.       OCISvcCtx  *conn;
  12.       OCIStmt      *queryHandle;
  13. } sql_oracle_sock;
  14.  
  15. char *sqlerror(sql_oracle_sock *sqlsock) {                                                                                                       
  16.  
  17.    static char msgbuf[512];
  18.    sb4   errcode = 0;
  19.    
  20.    if (!sqlsock) return "No connection to database";
  21.  
  22.    memset((void *) msgbuf, (int)'\0', sizeof(msgbuf));
  23.  
  24.    OCIErrorGet((dvoid *) sqlsock->errHandle, (ub4) 1, (text *) NULL, &errcode, msgbuf, (ub4) sizeof(msgbuf), (ub4) OCI_HTYPE_ERROR);
  25.    if (errcode) {
  26.       return msgbuf;
  27.    } else {
  28.       return NULL;
  29.    }
  30. }                   
  31.  
  32. main()
  33. {
  34.  
  35. OCIBind  *bnd1p = (OCIBind *) 0;
  36. OCIBind  *bnd2p = (OCIBind *) 0;
  37.  
  38. char *ConnString = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=XXX.XXX.XXX.XXX)(PORT=1521))(CONNECT_DATA=(SID=XXXX)))";
  39. char *login = "xxxxxxx";
  40. char *passwd = "xxxxxxx";
  41. char *query = "BEGIN TEST(:param1, :param2); END;";
  42.  
  43. text *param1 = (text *)malloc(sizeof(char)*MAXL);
  44. text *param2 = (text *)malloc(sizeof(char)*MAXL);
  45.  
  46. memset ((void *)param1, '\0', MAXL);
  47. memset ((void *)param2, '\0', MAXL);
  48.  
  49. strcpy((char *)param1, "This is a test");
  50.  
  51. sql_oracle_sock *oracle_sock;
  52.  
  53. if (OCIEnvCreate(&oracle_sock->env, OCI_DEFAULT|OCI_THREADED, (dvoid *)0, (dvoid * (*)(dvoid *, size_t)) 0, (dvoid * (*)(dvoid *, dvoid *, size_t))0, (void (*)(dvoid *, dvoid *)) 0, 0, (dvoid **)0))
  54. {
  55.    printf("%s", "EnvCreate failed");
  56.         printf("%s\n", sqlerror(oracle_sock));
  57.    return -1;
  58. }
  59.  
  60. if (OCIHandleAlloc((dvoid *) oracle_sock->env, (dvoid **) &oracle_sock->errHandle, (ub4) OCI_HTYPE_ERROR, (size_t) 0, (dvoid **) 0))
  61. {
  62.     printf("%s", "ErrHandleAlloc failed");
  63.         printf("%s\n", sqlerror(oracle_sock));
  64.     return -1;
  65. }
  66.  
  67. if (OCIHandleAlloc((dvoid *) oracle_sock->env, (dvoid **) &oracle_sock->queryHandle, (ub4)OCI_HTYPE_STMT, (CONST size_t) 0, (dvoid **) 0))
  68. {
  69.     printf("%s", "QueryHandleAlloc failed");
  70.         printf("%s\n", sqlerror(oracle_sock));
  71.     return -1;
  72. }
  73.                                                                                                                                                                                                                             
  74. if (OCILogon(oracle_sock->env, oracle_sock->errHandle, &oracle_sock->conn, (unsigned char *) login, strlen(login), (unsigned char *) passwd,  strlen(passwd), (unsigned char *) ConnString, strlen(ConnString)))
  75. {
  76.     printf("%s", "Logon failed");
  77.         printf("%s\n", sqlerror(oracle_sock));
  78.     return -1;
  79. }
  80.  
  81. if (OCIStmtPrepare(oracle_sock->queryHandle, oracle_sock->errHandle, (text *) query, (ub4) strlen(query), OCI_NTV_SYNTAX, OCI_DEFAULT))
  82. {
  83.     printf("%s\n", "StmtPrepare failed");
  84.         printf("%s\n", sqlerror(oracle_sock));
  85.     return -1;
  86. }
  87.  
  88. if (OCIBindByName(oracle_sock->queryHandle, &bnd1p, oracle_sock->errHandle, (text *) ":param1", -1, (dvoid *) &param1, (sb4) MAXL, SQLT_STR, (dvoid *) 0, (ub2 *) 0, (ub2) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))
  89. {
  90.     printf("%s\n", "BindNyName 1 failed");
  91.         printf("%s\n", sqlerror(oracle_sock));
  92.     return -1;
  93. }
  94.  
  95. if (OCIBindByName(oracle_sock->queryHandle, &bnd2p, oracle_sock->errHandle, (text *) ":param2", -1, (dvoid *) &param2, (sb4) MAXL, SQLT_STR, (dvoid *) 0, (ub2 *) 0, (ub2) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))
  96. {
  97.     printf("%s\n", "BindNyName 2 failed");
  98.         printf("%s\n", sqlerror(oracle_sock));
  99.     return -1;
  100. }
  101.  
  102. if (OCIStmtExecute(oracle_sock->conn, oracle_sock->queryHandle, oracle_sock->errHandle, (ub4) 1, (ub4) 0, (OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT))
  103. {
  104.     printf("%s\n", "StmtExecute failed");
  105.         printf("%s\n", sqlerror(oracle_sock));
  106.     return -1;
  107. }
  108.  
  109. printf("The param2 is %s\n", param2);
  110.  
  111. return 0;
  112. }

advertising

Create a Paste

Please enter your new post below (or upload a file instead):





Please note that information posted here will not expire by default. If you want it to expire, please set the expiry time above. If it is set to expire, web search engines will not be allowed to index it prior to it expiring. Items that are not marked to expire will be indexable by search engines. Be careful with your passwords.

worth-right
worth-right
fantasy-obligation