|
|
 |  |
cpp access stored function: OCIBindByName, OCIBindByPosFrom: Bennett, Paul A (AZ75) Date: Friday, January 7, 2005
Time: 8:06:25 amThis message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_001_01C4F4D2.084D09B4
Content-Type: text/plain
Hi
I'm trying to retrieve multiple rows from a call to a stored function.
I am currently trying to use OCIBindByName, OCIBindByPos in the same
OCIStmtExecute.
Is that allowed? It's not working, the way I have it, but i'm not sure if
there is a better way.
Not much info about this anywhere, any info appreciated.
void CSpDlg::readFromOracle()
{
//FUNCTION Extract_CoRte(dbid IN VARCHAR2, corteid IN VARCHAR2) RETURN
out_table_type;
text *funcall = (text *) "BEGIN\
:RetVal := CPTPF.TEST_PKG.EXTRACT_CORTE
(:dbid,:corteid);\
END;";
OCIBind *bnd1p = NULL; /* the first bind handle */
OCIBind *bnd2p = NULL; /* the second bind handle */
OCIBind *bnd3p = NULL; /* the third bind handle */
OCIEnv *envhp = NULL;
OCIServer *srvhp = NULL;
OCIError *errhp = NULL;
OCISvcCtx *svchp = NULL;
OCISession *seshp = NULL;
OCIStmt *stmhp = NULL;
#define MAXROWS 8
#define MAXCOLS 2
#define ROWSPERFETCH MAXROWS
typedef struct
{
char col_1[150];
char col_2[150];
} DATA_STRUCT;
DATA_STRUCT data_out[MAXROWS];
for(int x=0;x<MAXROWS;x++)
{
strcpy(data_out[x].col_1,"");
strcpy(data_out[x].col_2,"");
}
char *colptr[MAXCOLS] =
{data_out[0].col_1,data_out[0].col_2};
ub4 collen[MAXCOLS] =
{sizeof(data_out[0].col_1),sizeof(data_out[0].col_2)};
ub2 coltyp[MAXCOLS] = {SQLT_STR, SQLT_STR};
char dbname[1024];
strcpy( dbname, "UNKNOWN DB" );
if(mDB.GetLength()>0)strcpy( dbname, mDB );
char *sid = dbname;
//SetDlgItemText(IDC_EDIT3, dbname );
char *usr = "CPTPF";
char *pwd = "baba";
// Initialise OCI
OCIInitialize(OCI_DEFAULT,NULL,NULL,NULL,NULL);
// Initialise OCI environment
OCIEnvInit(&envhp,OCI_DEFAULT,0,NULL);
if (
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&errhp,OCI_HTYPE_ERROR,0,NU
LL))<0 )
{
AfxMessageBox ("OCI_HTYPE_ERROR!");
}
// Allocate OCI server
if (
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&srvhp,OCI_HTYPE_SERVER,0,N
ULL))<0 )
{
AfxMessageBox ("OCI_HTYPE_SERVER!");
}
// Allocate OCI service
if (
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&svchp,OCI_HTYPE_SVCCTX,0,N
ULL))<0 )
{
AfxMessageBox ("OCI_HTYPE_SVCCTX!");
}
// Attach to the server specified by sid
if ( ociCheckError(errhp,OCIServerAttach(srvhp,errhp,(text
*)sid,strlen(sid),0))<0 )
{
AfxMessageBox ("OCIServerAttach_ERROR!");
}
// Set the server attribute for the service
if (
ociCheckError(errhp,OCIAttrSet(svchp,OCI_HTYPE_SVCCTX,srvhp,0,OCI_ATTR_SERVE
R,errhp))<0 )
{
AfxMessageBox ("OCIAttrSet_HTYPE_SVCCTX_ERROR!");
}
// Allocate OCI Session
if (
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&seshp,OCI_HTYPE_SESSION,0,
NULL))<0 )
{
AfxMessageBox ("OCIHandleAlloc_SESSION_ERROR!");
}
// Set the username attibute for the session
if (
ociCheckError(errhp,OCIAttrSet(seshp,OCI_HTYPE_SESSION,(text*)usr,strlen(usr
),OCI_ATTR_USERNAME,errhp))<0 )
{
AfxMessageBox ("OCIAttrSet_HTYPE_usr_ERROR!");
}
// Set the password attibute for the session
if (
ociCheckError(errhp,OCIAttrSet(seshp,OCI_HTYPE_SESSION,(text*)pwd,strlen(pwd
),OCI_ATTR_PASSWORD,errhp))<0 )
{
AfxMessageBox ("OCIAttrSet_HTYPE_pwd_ERROR!");
}
// Start the session
ociCheckError(errhp,OCISessionBegin(svchp,errhp,seshp,OCI_CRED_RDBMS,OCI_DEF
AULT));
// Set session attribute for the service
if (
ociCheckError(errhp,OCIAttrSet(svchp,OCI_HTYPE_SVCCTX,seshp,0,OCI_ATTR_SESSI
ON,errhp))<0 )
{
AfxMessageBox ("OCIAttrSet_HTYPE_seshp_ERROR!");
}
#define EXEC 1
#define FETCH 2
OCIBind *bindhp = NULL;
OCIDefine *defhp = NULL;
int c;
sb4 rowsProcessed,rowsFetched,rows;
int status;
int mode;
if (
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&stmhp,OCI_HTYPE_STMT,0,NUL
L))<0 )
{
AfxMessageBox ("OCIHandleAlloc_STMT_ERROR!");
}
if ( ociCheckError(errhp,OCIStmtPrepare(stmhp,errhp,(text
*)funcall,(sword)sizeof(funcall),OCI_NTV_SYNTAX,OCI_DEFAULT))<0 )
{
AfxMessageBox ("OCIStmtPrepare_ERROR!");
}
/* bind each of the placeholders to a program variable */
if ( ociCheckError( errhp, OCIBindByName(stmhp, &bnd1p, errhp, (text *)
":dbid", -1, (text *) &mDBID, (sword) sizeof(mDBID), SQLT_INT, (dvoid *) 0,
(ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))<0 )
{
AfxMessageBox ("OCIDefineByName1_ERROR!");
}
if ( ociCheckError( errhp, OCIBindByName(stmhp, &bnd2p, errhp, (text *)
":corteid", -1, (text *) &mCORTEID, (sword) sizeof(mCORTEID), SQLT_INT,
(dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT))<0 )
{
AfxMessageBox ("OCIDefineByName2_ERROR!");
}
for ( c=0 ; c<MAXCOLS ; c++ )
{
if (
ociCheckError(errhp,OCIDefineByPos(stmhp,&defhp,errhp,c+1,colptr[c],collen[c
],coltyp[c],NULL,NULL,NULL,OCI_DEFAULT))<0 )
{
AfxMessageBox
("OCIDefineByPos_ERROR!");
}
//if ( ociCheckError( errhp,
OCIBindByName(stmhp, &bnd3p, errhp, (text *) ":RetVal", -1,
colptr[c],collen[c],coltyp[c], (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0,
(ub4 *) 0, OCI_DEFAULT))<0 )
//{
// AfxMessageBox
("OCIDefineByName3_ERROR!");
//}
if (
ociCheckError(errhp,OCIDefineArrayOfStruct(defhp,errhp,sizeof(data_out[0]),0
,0,0))<0 )
{
AfxMessageBox
("OCIDefineArrayOfStruct_ERROR!");
}
}
mode = EXEC;
rowsProcessed = 0;
int totalRowsRead = 0;
do
{
if ( mode==EXEC )
{
if (
(status=ociCheckError(errhp,OCIStmtExecute(svchp,stmhp,errhp,ROWSPERFETCH,0,
NULL,NULL,OCI_DEFAULT)))<0 )
{
AfxMessageBox
("OCIStmtExecute_ERROR!");
}
mode = FETCH;
}
else
{
if (
(status=ociCheckError(errhp,OCIStmtFetch(stmhp,errhp,ROWSPERFETCH,OCI_FETCH_
NEXT,OCI_DEFAULT)))<0 )
{
AfxMessageBox
("OCIStmtFetch_ERROR!");
}
}
if (
ociCheckError(errhp,OCIAttrGet(stmhp,OCI_HTYPE_STMT,&rowsFetched,0,OCI_ATTR_
ROW_COUNT,errhp))<0 )
{
AfxMessageBox ("OCIAttrGet_ERROR!");
}
if( rowsFetched == 0 )
{
strcpy(data_out[0].col_1, "NO
DATA");
strcpy(data_out[0].col_2, "NO
DATA");
totalRowsRead = 1;
break;
}
rows = rowsFetched - rowsProcessed;
rowsProcessed = rowsFetched;
totalRowsRead += rows;
break; //that's enough
} while ( status!=OCI_NO_DATA && status>=0 );
if(
ociCheckError(errhp,OCIHandleFree(stmhp,OCI_HTYPE_STMT)) )
{
AfxMessageBox ("OCIHandleFree_ERROR!");
}
if (seshp)
{
// Stop the session
if(
ociCheckError(errhp,OCISessionEnd(svchp,errhp,seshp,OCI_DEFAULT)) )
{
AfxMessageBox ("OCISessionEnd_ERROR!");
}
// Free the OCI Session
if(
ociCheckError(errhp,OCIHandleFree(seshp,OCI_HTYPE_SESSION)) )
{
AfxMessageBox ("OCIHandleFree_ERROR!");
}
}
if (srvhp)
{
// Detatch from the server
if(
ociCheckError(errhp,OCIServerDetach(srvhp,errhp,OCI_DEFAULT)) )
{
AfxMessageBox ("OCIServerDetach_ERROR!");
}
// Free OCI server
if(
ociCheckError(errhp,OCIHandleFree(srvhp,OCI_HTYPE_SERVER)) )
{
AfxMessageBox ("OCIHandleFree_ERROR!");
}
}
if (svchp)
{
// Free OCI service
if(
ociCheckError(errhp,OCIHandleFree(svchp,OCI_HTYPE_SVCCTX)) )
{
AfxMessageBox ("OCIHandleFree_ERROR!");
}
}
if (errhp)
{
// Free OCI error handler
OCIHandleFree(errhp,OCI_HTYPE_ERROR);
}
}
sb4 CSpDlg::ociCheckError(OCIError *errhp,sword status)
{
text errbuf[OCI_ERROR_MAXMSG_SIZE+1];
sb4 e;
if ( errhp==NULL ) {
printf("Error - Can't create error handler");
return -1;
}
switch ( status )
{
case OCI_SUCCESS:
break;
case OCI_SUCCESS_WITH_INFO:
OCIErrorGet(errhp,1,NULL,&e,errbuf,sizeof(errbuf),OCI_HTYPE_ERROR);
AfxMessageBox("SUCCESS WITH INFO");
break;
case OCI_NEED_DATA:
AfxMessageBox("Error - OCI_NEED_DATA");
break;
case OCI_NO_DATA:
//AfxMessageBox("Error - OCI_NODATA");
return 0;
case OCI_ERROR:
OCIErrorGet(errhp,1,NULL,&e,errbuf,sizeof(errbuf),OCI_HTYPE_ERROR);
//AfxMessageBox("OCI_ERROR");
return 0;
case OCI_INVALID_HANDLE:
AfxMessageBox("Error - OCI_INVALID_HANDLE");
break;
case OCI_STILL_EXECUTING:
AfxMessageBox("Error - OCI_STILL_EXECUTE");
break;
case OCI_CONTINUE:
AfxMessageBox("Error - OCI_CONTINUE");
break;
default:
AfxMessageBox( "Unknown Oracle error");
break;
}
return status;
}
--
Paul.A.Bennett@honeywell.com
------_=_NextPart_001_01C4F4D2.084D09B4
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3DUS-ASCII">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
5.5.2658.2">
<TITLE>cpp access stored function: OCIBindByName, OCIBindByPos</TITLE>
</HEAD>
<BODY>
<P><FONT SIZE=3D2 FACE=3D"Arial">Hi</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial">I'm trying to retrieve multiple rows =
from a call to a stored function.</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial">I am currently trying to use =
OCIBindByName, OCIBindByPos in the same OCIStmtExecute.</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial">Is that allowed? It's not working, =
the way I have it, but i'm not sure if there is a better way.</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial">Not much info about this anywhere, =
any info appreciated.</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial">void CSpDlg::readFromOracle()</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial">{</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> //FUNCTION =
Extract_CoRte(dbid IN VARCHAR2, corteid IN VARCHAR2) RETURN =
out_table_type;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> text *funcall =3D (text =
*) "BEGIN\</FONT>
<BR><FONT SIZE=3D2 =
FACE=3D"Arial"> &nb=
sp; &nb=
sp; :RetVal :=3D =
CPTPF.TEST_PKG.EXTRACT_CORTE (:dbid,:corteid);\</FONT>
<BR><FONT SIZE=3D2 =
FACE=3D"Arial"> &nb=
sp; &nb=
sp; END;";</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> OCIBind *bnd1p =3D =
NULL; &=
nbsp; /* the =
first bind handle */</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> OCIBind *bnd2p =3D =
NULL; &=
nbsp; /* the second =
bind handle */</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> OCIBind *bnd3p =3D =
NULL; &=
nbsp; /* the third bind =
handle */</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial">OCIEnv *envhp =3D NULL;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">OCIServer *srvhp =3D NULL;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">OCIError *errhp =3D NULL;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">OCISvcCtx *svchp =3D NULL;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">OCISession *seshp =3D NULL;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">OCIStmt *stmhp =3D NULL;</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial">#define MAXROWS 8</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">#define MAXCOLS 2</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">#define ROWSPERFETCH MAXROWS</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial">typedef struct </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> char col_1[150];</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> char col_2[150];</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">} DATA_STRUCT;</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial">DATA_STRUCT data_out[MAXROWS];</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">for(int x=3D0;x<MAXROWS;x++)</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> =
strcpy(data_out[x].col_1,"");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> =
strcpy(data_out[x].col_2,"");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">}</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">char *colptr[MAXCOLS] =3D =
{data_out[0].col_1,data_out[0].col_2};</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">ub4 collen[MAXCOLS] =
=3D {sizeof(data_out[0].col_1),sizeof(data_out[0].col_2)};</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">ub2 coltyp[MAXCOLS] =
=3D {SQLT_STR, SQLT_STR};</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial">char =
dbname[1024];</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">strcpy( dbname, "UNKNOWN DB" );</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">if(mDB.GetLength()>0)strcpy( dbname, mDB );</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">char =
*sid =3D dbname;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">//SetDlgItemText(IDC_EDIT3, dbname );</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">char =
*usr =3D =
"CPTPF";</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">char =
*pwd =3D =
"baba";</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Initialise OCI</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> =
OCIInitialize(OCI_DEFAULT,NULL,NULL,NULL,NULL);</FONT>
</P>
<P> =
<FONT SIZE=3D2 FACE=3D"Arial"=
> // Initialise OCI environment</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> OCIEnvInit(&envhp,OCI_DEFAULT,0,NULL);</FONT>
</P>
<BR>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&errhp,OCI_HTYPE_ER=
ROR,0,NULL))<0 ) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCI_HTYPE_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Allocate OCI server</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&srvhp,OCI_HTYPE_SE=
RVER,0,NULL))<0 ) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCI_HTYPE_SERVER!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Allocate OCI service</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&svchp,OCI_HTYPE_SV=
CCTX,0,NULL))<0 ) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCI_HTYPE_SVCCTX!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Attach to the server specified by sid</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIServerAttach(srvhp,errhp,(text =
*)sid,strlen(sid),0))<0 ) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIServerAttach_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Set the server attribute for the =
service</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIAttrSet(svchp,OCI_HTYPE_SVCCTX,srvhp,0,OCI_ATTR_S=
ERVER,errhp))<0 ) </FONT>
<BR> &=
nbsp; <FONT SIZE=3D2 FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIAttrSet_HTYPE_SVCCTX_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Allocate OCI Session</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&seshp,OCI_HTYPE_SE=
SSION,0,NULL))<0 ) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIHandleAlloc_SESSION_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Set the username attibute for the session =
</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIAttrSet(seshp,OCI_HTYPE_SESSION,(text*)usr,strlen=
(usr),OCI_ATTR_USERNAME,errhp))<0 ) </FONT></P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIAttrSet_HTYPE_usr_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Set the password attibute for the session =
</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIAttrSet(seshp,OCI_HTYPE_SESSION,(text*)pwd,strlen=
(pwd),OCI_ATTR_PASSWORD,errhp))<0 ) </FONT></P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIAttrSet_HTYPE_pwd_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Start the session</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> =
ociCheckError(errhp,OCISessionBegin(svchp,errhp,seshp,OCI_CRED_RDBMS,OCI=
_DEFAULT));</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> // Set session attribute for the service</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIAttrSet(svchp,OCI_HTYPE_SVCCTX,seshp,0,OCI_ATTR_S=
ESSION,errhp))<0 ) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIAttrSet_HTYPE_seshp_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial">#define EXEC 1</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial">#define FETCH 2</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> OCIBind *bindhp =3D =
NULL;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> OCIDefine *defhp =3D NULL;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> =
int c;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> =
sb4 =
rowsProcessed,rowsFetched,rows;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> =
int status;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> =
int mode;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> </FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIHandleAlloc(envhp,(void**)&stmhp,OCI_HTYPE_ST=
MT,0,NULL))<0 )</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIHandleAlloc_STMT_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIStmtPrepare(stmhp,errhp,(text =
*)funcall,(sword)sizeof(funcall),OCI_NTV_SYNTAX,OCI_DEFAULT))<0 =
)</FONT></P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIStmtPrepare_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> /* bind each of the =
placeholders to a program variable */</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> if ( ociCheckError( =
errhp, OCIBindByName(stmhp, &bnd1p, errhp, (text *) =
":dbid", -1, (text *) &mDBID, (sword) sizeof(mDBID), =
SQLT_INT, (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, =
OCI_DEFAULT))<0 )</FONT></P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> {</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
AfxMessageBox ("OCIDefineByName1_ERROR!");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> }</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> if ( ociCheckError( =
errhp, OCIBindByName(stmhp, &bnd2p, errhp, (text *) =
":corteid", -1, (text *) &mCORTEID, (sword) =
sizeof(mCORTEID), SQLT_INT, (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) 0, =
(ub4 *) 0, OCI_DEFAULT))<0 )</FONT></P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> {</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
AfxMessageBox ("OCIDefineByName2_ERROR!");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> for ( c=3D0 ; c<MAXCOLS ; c++ ) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if ( =
ociCheckError(errhp,OCIDefineByPos(stmhp,&defhp,errhp,c+1,colptr[c],=
collen[c],coltyp[c],NULL,NULL,NULL,OCI_DEFAULT))<0 )</FONT></P>
<P> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIDefineByPos_ERROR!");</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">}</FONT>
</P>
<P> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">//if ( ociCheckError( errhp, OCIBindByName(stmhp, =
&bnd3p, errhp, (text *) ":RetVal", -1, =
colptr[c],collen[c],coltyp[c], (dvoid *) 0, (ub2 *) 0, (ub2 *) 0, (ub4) =
0, (ub4 *) 0, OCI_DEFAULT))<0 )</FONT></P>
<P> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">//{</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">// AfxMessageBox =
("OCIDefineByName3_ERROR!");</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">//}</FONT>
</P>
<P> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if ( =
ociCheckError(errhp,OCIDefineArrayOfStruct(defhp,errhp,sizeof(data_out[0=
]),0,0,0))<0 )</FONT></P>
<P> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIDefineArrayOfStruct_ERROR!");</FONT>
<BR> =
=
=
<FONT SIZE=3D2 FACE=3D"Arial"=
>}</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<BR>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> mode =3D EXEC;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> rowsProcessed =3D 0;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> int totalRowsRead =3D 0;</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> do </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
</P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( mode=3D=3DEXEC ) </FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if ( =
(status=3DociCheckError(errhp,OCIStmtExecute(svchp,stmhp,errhp,ROWSPERFE=
TCH,0,NULL,NULL,OCI_DEFAULT)))<0 )</FONT></P>
<P> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIStmtExecute_ERROR!");</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">}</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">mode =3D FETCH;</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> } </FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> else </FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if ( =
(status=3DociCheckError(errhp,OCIStmtFetch(stmhp,errhp,ROWSPERFETCH,OCI_=
FETCH_NEXT,OCI_DEFAULT)))<0 )</FONT></P>
<P> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCIStmtFetch_ERROR!");</FONT>
<BR> =
=
 =
; <FONT SIZE=3D2 FACE=3D"Arial">}</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> if ( =
ociCheckError(errhp,OCIAttrGet(stmhp,OCI_HTYPE_STMT,&rowsFetched,0,O=
CI_ATTR_ROW_COUNT,errhp))<0 )</FONT></P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCIAttrGet_ERROR!");</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> if( rowsFetched =3D=3D 0 )</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">strcpy(data_out[0].col_1, "NO DATA");</FONT>
<BR> =
=
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">strcpy(data_out[0].col_2, "NO DATA");</FONT>
<BR> =
=
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">totalRowsRead =3D 1;</FONT>
<BR> =
=
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">break;</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> rows =3D rowsFetched - rowsProcessed;</FONT>
</P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> rowsProcessed =3D rowsFetched;</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> totalRowsRead +=3D rows;</FONT>
</P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> break; //that's enough</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> } while ( status!=3DOCI_NO_DATA && =
status>=3D0 );</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if( =
ociCheckError(errhp,OCIHandleFree(stmhp,OCI_HTYPE_STMT)) )</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial"> AfxMessageBox =
("OCIHandleFree_ERROR!");</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if (seshp) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">// Stop the session</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if( =
ociCheckError(errhp,OCISessionEnd(svchp,errhp,seshp,OCI_DEFAULT)) =
)</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCISessionEnd_ERROR!");</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">}</FONT>
</P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">// Free the OCI Session</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if( =
ociCheckError(errhp,OCIHandleFree(seshp,OCI_HTYPE_SESSION)) )</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCIHandleFree_ERROR!");</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">}</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if (srvhp) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">// Detatch from the server</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if( =
ociCheckError(errhp,OCIServerDetach(srvhp,errhp,OCI_DEFAULT)) )</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox =
("OCIServerDetach_ERROR!");</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">}</FONT>
</P>
<P> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">// Free OCI server</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if( =
ociCheckError(errhp,OCIHandleFree(srvhp,OCI_HTYPE_SERVER)) )</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCIHandleFree_ERROR!");</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">}</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if (svchp) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">// Free OCI service</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">if( =
ociCheckError(errhp,OCIHandleFree(svchp,OCI_HTYPE_SVCCTX)) )</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">{</FONT>
<BR> =
=
=
<FONT SIZE=3D2 =
FACE=3D"Arial">AfxMessageBox ("OCIHandleFree_ERROR!");</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">}</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> if (errhp) </FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> {</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">// Free OCI error handler</FONT>
<BR> =
=
<FONT SIZE=3D2 =
FACE=3D"Arial">OCIHandleFree(errhp,OCI_HTYPE_ERROR);</FONT>
<BR> =
<FONT SIZE=3D2 =
FACE=3D"Arial"> }</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial">}</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial">sb4 CSpDlg::ociCheckError(OCIError =
*errhp,sword status)</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial">{</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> text =
errbuf[OCI_ERROR_MAXMSG_SIZE+1];</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> sb4 e;</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> if ( errhp=3D=3DNULL ) {</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> printf("Error =
- Can't create error handler");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> return -1;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> }</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial"> switch ( status ) </FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> {</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> case =
OCI_SUCCESS:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
break;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> case =
OCI_SUCCESS_WITH_INFO:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
OCIErrorGet(errhp,1,NULL,&e,errbuf,sizeof(errbuf),OCI_HTYPE_ERROR);<=
/FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
AfxMessageBox("SUCCESS WITH INFO");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
break;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> case =
OCI_NEED_DATA:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
AfxMessageBox("Error - OCI_NEED_DATA");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
break;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> case =
OCI_NO_DATA:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
//AfxMessageBox("Error - OCI_NODATA");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> return =
0;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> case =
OCI_ERROR:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
OCIErrorGet(errhp,1,NULL,&e,errbuf,sizeof(errbuf),OCI_HTYPE_ERROR);<=
/FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
//AfxMessageBox("OCI_ERROR");</FONT>
<BR> <FONT SIZE=3D2 =
FACE=3D"Arial"> return 0;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> case =
OCI_INVALID_HANDLE:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
AfxMessageBox("Error - OCI_INVALID_HANDLE");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
break;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> case =
OCI_STILL_EXECUTING:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
AfxMessageBox("Error - OCI_STILL_EXECUTE");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
break;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> case =
OCI_CONTINUE:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
AfxMessageBox("Error - OCI_CONTINUE");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
break;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> default:</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
AfxMessageBox( "Unknown Oracle error");</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> =
break;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> }</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial"> return status;</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial">}</FONT>
</P>
<P><FONT SIZE=3D2 FACE=3D"Arial">--</FONT>
<BR><FONT SIZE=3D2 FACE=3D"Arial">Paul.A.Bennett@honeywell.com </FONT>
</P>
</BODY>
</HTML>
------_=_NextPart_001_01C4F4D2.084D09B4--
----------------------------------------------------------
To subscribe, unsubscribe or to search list archive
please visit http://www.digitalpoint.com/lists/oracle.html
----------------------------------------------------------
|

Return to Digital Point Solutions' Home Page |