#include "ocilib.h" void err_handler(OCI_Error *err) { printf( "code : ORA-%05i\n" "msg : %s\n" "sql : %s\n", OCI_ErrorGetOCICode(err), OCI_ErrorGetString(err), OCI_GetSql(OCI_ErrorGetStatement(err)) ); exit(1); } int main(int argc, char *argv[]) { OCI_Connection* cn; OCI_Statement* st; OCI_Resultset* rs; char col_char1[5]; char col_char2[2]; int col_number; int row=0; char *sql_text="SELECT /*+ index(MATABLE IDX1) */ COL_CHAR1, COL_CHAR2,COL_NUMBER1 FROM MATABLE WHERE (COL_CHAR1 || COL_CHAR2 || TO_CHAR(COL_NUMBER1,'9')) >= (:COL_CHAR1 || :COL_CHAR2 || TO_CHAR(:COL_NUMBER1,'9'))"; OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT); cn = OCI_ConnectionCreate(NULL, "an2000", "AN2000", OCI_SESSION_DEFAULT); st = OCI_StatementCreate(cn); printf("Preparing...\n"); OCI_Prepare(st, sql_text); printf("ok\n"); printf("Bind...\n"); OCI_BindString(st,":COL_CHAR1",col_char1,4); OCI_BindString(st,":COL_CHAR2",col_char2,1); OCI_BindInt(st,":COL_NUMBER1",&col_number); printf("ok\n"); memset(col_char1,0,sizeof(col_char1)); memset(col_char2,0,sizeof(col_char2)); printf("pass 1\n"); memcpy(col_char1,"AAAA",4); memcpy(col_char2," ",1); col_number=0; printf("Executing...\n"); OCI_Execute(st); printf("ok\n"); printf("Get Resultset...\n"); rs = OCI_GetResultset(st); printf("ok\n"); printf("Fetching...\n"); while (OCI_FetchNext(rs)) { ++row; const char *v=OCI_GetString(rs,2); if (v == NULL) printf("%d - %10.10s %10.10s %d\n", row, OCI_GetString(rs, 1), "",OCI_GetInt(rs, 3)); else printf("%d - %10.10s %10.10s %d\n", row, OCI_GetString(rs, 1), v,OCI_GetInt(rs, 3)); } printf("pass 2\n"); memcpy(col_char1,"AAAA",4); memcpy(col_char2,"\0",1); // Je force un caractÉre NULL.... col_number=0; printf("Executing...\n"); OCI_Execute(st); printf("ok\n"); printf("Get Resultset...\n"); rs = OCI_GetResultset(st); printf("ok\n"); printf("Fetching...\n"); while (OCI_FetchNext(rs)) { ++row; const char *v=OCI_GetString(rs,2); if (v == NULL) printf("%d - %10.10s %10.10s %d\n", row, OCI_GetString(rs, 1), "",OCI_GetInt(rs, 3)); else printf("%d - %10.10s %10.10s %d\n", row, OCI_GetString(rs, 1), v,OCI_GetInt(rs, 3)); } OCI_Cleanup(); return EXIT_SUCCESS; }