The indp parameter is an indicator buffer and an array. Each element is a value of the sb2 type. This parameter is generally used for input. If this dynamic parameter is output, it is also used for output. In
The indp parameter is an indicator buffer and an array. Each element is a value of the sb2 type. This parameter is generally used for input. If this dynamic parameter is output, it is also used for output. In
Processing null in oci must be completed through Indicator.
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0
# Include
# Include
# Include
# Include "include \ oci. h"
# Include "include \ ociextp. h"
# Define ERRGOTO (Recode) do \
{\
If (Recode! = 0 )\
{\
Goto ERR ;\
}\
} While (0)
Void main ()
{
Int a = 0;
OCIDefine * defhp1 = 0;
OCIDefine * defhp2 = 0;
Int blength = 40;
Char B [40];
Sb2 indicator;
Text * select_ SQL = (text *) "select a, B from teststmt2 ";
Dvoid * tmp;
OCIEnv * envhp;
OCIServer * srvhp;
OCIError * errhp;
OCISvcCtx * svchp;
OCISession * usrhp;
OCIStmt * effecthp;
Char serName1 [30] = "10.0.4.161: 1521/orcl ";
Char userName1 [30] = "cxy ";
Char pwd1 [30] = "cxy ";
//! If no data exists, use this test case to create a data table.
// Test_BindArrayOfStruct ();
Memset (B, 0, blength );
//! Initialize Environment Change handle
ERRGOTO (OCIEnvCreate (& (envhp), OCI_DEFAULT,
NULL, 0, NULL ));
//! Initialization error handle
ERRGOTO (OCIHandleAlloc (dvoid *) envhp, (dvoid **) & errhp, OCI_HTYPE_ERROR, 64, (dvoid **) & tmp ));
//! Allocate service context handle and Service handle
ERRGOTO (OCIHandleAlloc (dvoid *) envhp, (dvoid **) & srvhp, OCI_HTYPE_SERVER, 64, (dvoid **) & tmp ));
ERRGOTO (OCIHandleAlloc (dvoid *) envhp, (dvoid **) & svchp, OCI_HTYPE_SVCCTX, 64, (dvoid **) & tmp ));
//! Initialize server handle
ERRGOTO (OCIServerAttach (srvhp, errhp, (text *) serName1, (sb4) strlen (serName1), (ub4) OCI_DEFAULT ));
//! /Connect the server handle to the service context handle
ERRGOTO (OCIAttrSet (dvoid *) svchp, OCI_HTYPE_SVCCTX, (dvoid *) srvhp, (ub4) 0, OCI_ATTR_SERVER, errhp ));
//! Allocate and set the session handle, and fill in the username and password
ERRGOTO (OCIHandleAlloc (dvoid *) envhp, (dvoid **) & usrhp, OCI_HTYPE_SESSION, 0, (dvoid **) 0 ));
ERRGOTO (OCIAttrSet (dvoid *) usrhp, OCI_HTYPE_SESSION, (dvoid *) userName1, (ub4) strlen (userName1), OCI_ATTR_USERNAME, errhp ));
ERRGOTO (OCIAttrSet (dvoid *) usrhp, OCI_HTYPE_SESSION, (dvoid *) pwd1, (ub4) strlen (pwd1), OCI_ATTR_PASSWORD, errhp ));
//! Establish a session
ERRGOTO (OCISessionBegin (svchp, errhp, usrhp, OCI_CRED_RDBMS, OCI_DEFAULT ));
//! Connect the session handle to the service context handle
ERRGOTO (OCIAttrSet (dvoid *) svchp, OCI_HTYPE_SVCCTX, (dvoid *) usrhp, (ub4) 0, OCI_ATTR_SESSION, errhp ));
//! Allocate statement handle
ERRGOTO (OCIHandleAlloc (dvoid *) envhp, (dvoid **) & effecthp, OCI_HTYPE_STMT, 0, 0 ));
//! Start query and obtain results
Text * delete_table = (text *) "delete from teststmt2 ";
ERRGOTO (OCIStmtPrepare (effecthp, errhp, (text *) delete_table, strlen (char *) delete_table), OCI_NTV_SYNTAX, OCI_DEFAULT ));
ERRGOTO (OCIStmtExecute (svchp, rjthp, errhp, OCI_DEFAULT ));
Int aa = 8;
Char bb [] = "bbbbbb ";
Indicator =-1;
Text * insert_ SQL = (text *) "insert into teststmt2 (a, B) values (: 1,: 2 )";
OCIBind * bindhp = 0;
//! Prepare data and bind Parameters
ERRGOTO (OCIStmtPrepare (effecthp, errhp, (text *) insert_ SQL, strlen (char *) insert_ SQL), OCI_NTV_SYNTAX, OCI_DEFAULT ));
ERRGOTO (OCIBindByPos (rjthp, & bindhp, errhp, 1, (dvoid *) & aa, 4, SQLT_INT, (void *) & indicator, NULL, NULL, 0, 0, 0 ));
// OCIBindArrayOfStruct (bindhp, errhp, sizeof (int), 0, 0 );
ERRGOTO (OCIBindByPos (rjthp, & bindhp, errhp, 2, (dvoid *) & bb, 6, SQLT_CHR, NULL, 0, 0 ));
// OCIBindArrayOfStruct (bindhp, errhp, 2, 0, 0 );
//! Execution statement
ERRGOTO (OCIStmtExecute (svchp, rjthp, errhp, 0 ));
Indicator =-1;
//! Start query and obtain results
ERRGOTO (OCIStmtPrepare (effecthp, errhp, (text *) select_ SQL, strlen (char *) select_ SQL), OCI_NTV_SYNTAX, OCI_DEFAULT ));
//! Bind to a column
ERRGOTO (OCIDefineByPos (effecthp, & defhp1, errhp, 1, & a, sizeof (a), SQLT_INT, (void *) & indicator, OCI_DEFAULT ));
// ERRGOTO (OCIDefineArrayOfStruct (defhp1, errhp, sizeof (int), 0, 4, 0 ));
//! Bind with two columns
Indicator =-2;
ERRGOTO (OCIDefineByPos (effecthp, & defhp2, errhp, 2, & B, 20, SQLT_CHR, (void *) & indicator, 0, 0, OCI_DEFAULT ));
// ERRGOTO (OCIDefineArrayOfStruct (defhp2, errhp, 2, 0, 2, 0 ));
//! Execution statement
ERRGOTO (OCIStmtExecute (svchp, rjthp, errhp, OCI_DEFAULT ));
// ERRGOTO (OCIStmtFetch (%thp, errhp, 1, OCI_FETCH_NEXT, 0 ));
Printf ("% d, % s, % d", a, B, indicator );
ERRGOTO (OCITransCommit (svchp, errhp, 0 ));
//! Release resources
// ERRGOTO (OCIHandleFree (srvhp, OCI_HTYPE_SERVER ));
// ERRGOTO (OCIHandleFree (errhp, OCI_HTYPE_ERROR ));
// ERRGOTO (OCIHandleFree (envhp, OCI_HTYPE_ENV ));
Return;
ERR:
Sb4 errcod = 0;
OraText msgerr [200] = "";
OraText msgstat [200] = "";
OCIErrorGet (errhp, 1, msgstat, & errcod, Ms Gerr, 200, OCI_HTYPE_ERROR );
Printf (char *) msgerr );
Return;
}