Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Usenet -> c.d.o.misc -> Re: How to use OCIRowid ?

Re: How to use OCIRowid ?

From: mark tomlinson <marktoml_at_gdi.net>
Date: Mon, 04 May 1998 14:14:59 GMT
Message-ID: <3553cd29.254577583@newshost.us.oracle.com>


Here is a working example:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <oci.h>

static void checkerr (OCIError *p_err, sword status);

#pragma comment(lib, "d:\\orant\\oci80\\lib\\msvc\\oci.lib")

void main()
{
OCIEnv *p_env;

OCIError        *p_err;
OCISvcCtx       *p_svc;
OCIStmt *p_sql;
OCIStmt *p_sql2 = (OCIStmt *) 0;
OCIBind *p_Bind1 = (OCIBind *) 0;

OCIBind *p_Bind2 = (OCIBind *) 0;
OCIBind *p_Bind3 = (OCIBind *) 0;
OCIDefine *p_define1 = (OCIDefine *) 0; OCIDefine *p_define2 = (OCIDefine *) 0; OCIRowid *rowid = (OCIRowid *) 0;
text field2[20];
ub4 ridlen;
text *mySql = (text *) "SELECT ename FROM EMP where empno = 7499 FOR UPDATE"; memset((void *) field2, (int)'\0' , (size_t) 20);

printf("OCIInitialize\n");

checkerr(p_err, OCIInitialize((ub4) OCI_OBJECT, 
                 (dvoid *) 0, (dvoid * (*) ()) 0,                
                 (dvoid * (*) ()) 0, (void (*) ()) 0));

printf("OCIEnvInit\n");
checkerr(p_err, OCIEnvInit(&p_env, (ub4) OCI_DEFAULT,

(size_t) 0, (dvoid **)0));

printf("OCIHandleAlloc\n");
checkerr(p_err, OCIHandleAlloc(p_env, &p_err, OCI_HTYPE_ERROR,

(size_t) 0, (dvoid **) 0));

printf("OCIHandleAlloc\n");
checkerr(p_err, OCIHandleAlloc(p_env, &p_svc, OCI_HTYPE_SVCCTX,

(size_t) 0, (dvoid **) 0));

printf("OCIHandleAlloc\n");
checkerr(p_err, OCIHandleAlloc(p_env, &p_sql,

                                OCI_HTYPE_STMT, (size_t) 0, (dvoid **)
0));
checkerr(p_err, OCIHandleAlloc(p_env, &p_sql2,
                                OCI_HTYPE_STMT, (size_t) 0, (dvoid **)
0));

printf("OCILogon\n\n");
checkerr(p_err, OCILogon(p_env, p_err, &p_svc, "SCOTT", 5, "TIGER", 5, "V8", 2));

printf("\n*************************************************\n");
printf("                  RowID Sample \n");
printf("*************************************************\n");

printf("        OCIStmtPrepare\n");
printf("           %s\n",mySql);
checkerr(p_err, OCIStmtPrepare(p_sql, p_err, mySql, 

(ub4) strlen(mySql),
OCI_NTV_SYNTAX, OCI_DEFAULT)); checkerr(p_err, OCIDefineByPos(p_sql, &p_define1, p_err, 1,
(dvoid *) field2, (sb4) 19,
SQLT_CHR, (dvoid *) 0,
(ub2 *)0,(ub2 *)0, OCI_DEFAULT));
printf(" OCIStmtExecute\n"); checkerr(p_err, OCIStmtExecute(p_svc, p_sql, p_err, (ub4) 1,
(ub4) 0, (OCISnapshot *)
NULL, (OCISnapshot *) NULL,
(ub4) OCI_COMMIT_ON_SUCCESS));
printf(" Employee Name ----> %s\n", field2); printf(" OCIAttrGet\n"); checkerr(p_err, OCIDescriptorAlloc((dvoid *)p_env,
(dvoid **) &rowid,OCI_DTYPE_ROWID,
(size_t) 0, (dvoid **) 0)); checkerr(p_err, OCIAttrGet ((dvoid *)p_sql, OCI_HTYPE_STMT,
(dvoid *) rowid, (ub4 *) &ridlen,
OCI_ATTR_ROWID, (OCIError *) p_err));

strcpy(mySql,(text *) "UPDATE EMP SET ename = 'MyUpdate' WHERE ROWID = :1");

printf("           %s\n",mySql);
printf("        OCIStmtStmtPrepare\n");
checkerr(p_err, OCIStmtPrepare(p_sql2, p_err, mySql, 

(ub4) strlen(mySql), OCI_NTV_SYNTAX,
OCI_DEFAULT)); printf(" OCIBindByPos 1\n");
checkerr(p_err, OCIBindByPos(p_sql2, &p_Bind1, p_err, 1,

(dvoid *) &rowid, (sb4) 0,

                                SQLT_RDD, 0, 0, 0, 0, 0,
OCI_DEFAULT)); printf(" OCIStmtExecute\n");
checkerr(p_err, OCIStmtExecute(p_svc, p_sql2, p_err,

(ub4) 1, (ub4) 0, (OCISnapshot *)
NULL,
(OCISnapshot *) NULL, (ub4)
OCI_COMMIT_ON_SUCCESS)); return;
}

static void checkerr(errhp, status)
OCIError *errhp;sword status;
{
  text errbuf[512];
  ub4 errcode;
  switch (status)

                {  
                case OCI_SUCCESS:
                        break;  
                case OCI_SUCCESS_WITH_INFO:
                        printf("Error - OCI_SUCCESS_WITH_INFO\n");    
                        break;  
                case OCI_NEED_DATA:
                        printf("Error - OCI_NEED_DATA\n");    
                        break;  
                case OCI_NO_DATA:
                        printf("Error - OCI_NO_DATA\n");    
                        break;  
                case OCI_ERROR:
                        OCIErrorGet ((dvoid *) errhp, (ub4) 1, (text
*) NULL, &errcode,
                                        errbuf, (ub4) sizeof(errbuf),
(ub4) OCI_HTYPE_ERROR);
                        printf("Error - %s\n", errbuf);    
                        break;  
                case OCI_INVALID_HANDLE:
                        printf("Error - OCI_INVALID_HANDLE\n");    
                        break;  
                case OCI_STILL_EXECUTING:
                        printf("Error - OCI_STILL_EXECUTE\n");    
                        break;  
                case OCI_CONTINUE:
                        printf("Error - OCI_CONTINUE\n");    
                        break;  
                default:    
                        break;  
                }

} Received on Mon May 04 1998 - 09:14:59 CDT

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US