| Oracle FAQ | Your Portal to the Oracle Knowledge Grid | |
Home -> Community -> Usenet -> c.d.o.misc -> Re: How to use OCIRowid ?
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;
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));
                                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");
                                (dvoid *) &rowid, (sb4) 0, 
                                SQLT_RDD, 0, 0, 0, 0, 0,
OCI_DEFAULT)); 
printf("        OCIStmtExecute\n");
                                (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;  
                }
![]()  | 
![]()  |