int main(void) { OCI_Connection *cn; OCI_Statement *st; OCI_Resultset *rs; OCI_Lob *lob1, *lob2; char temp[SIZE_BUF+1]; int code, n; if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT)) return EXIT_FAILURE; cn = OCI_ConnectionCreate("db", "usr", "pwd", OCI_SESSION_DEFAULT); st = OCI_StatementCreate(cn); OCI_ExecuteStmt(st, "select code, content from test_lob for update"); rs = OCI_GetResultset(st); while (OCI_FetchNext(rs)) { code = OCI_GetInt(rs, 1); lob1 = OCI_GetLob(rs, 2); lob2 = OCI_LobCreate(cn, OCI_CLOB); n = OCI_LobWrite(lob1, "Today, ", 7); OCI_LobSeek(lob1, n, OCI_SEEK_SET); n = OCI_LobWrite(lob2, "I'm going to the cinema !", 25); OCI_LobAppendLob(lob1, lob2); OCI_LobSeek(lob1, 0, OCI_SEEK_SET); n = OCI_LobRead(lob1, temp, SIZE_BUF); temp[n] = 0; printf("code: %i, action : %s\n", code, temp); OCI_LobFree(lob2); } printf("\n%d row(s) fetched\n", OCI_GetRowCount(rs)); OCI_Cleanup(); return EXIT_SUCCESS; }
boolean OCI_API OCI_ElemFree2(OCI_Library *pOCILib, OCI_Elem *elem, ExceptionSink* xsink) { assert(elem); //OCI_CHECK_PTRQ(pOCILib, OCI_IPC_ELEMENT, elem, FALSE, xsink); OCI_CHECK_OBJECT_FETCHED(elem, FALSE); /* if the element has sub-objects that have been fetched, we need to free these objects */ if (elem->obj != NULL) { OCI_Datatype * data = (OCI_Datatype *) elem->obj; if (data->hstate == OCI_OBJECT_FETCHED_CLEAN) data->hstate = OCI_OBJECT_FETCHED_DIRTY; switch (elem->typinf->cols[0].type) { case OCI_CDT_DATETIME: OCI_DateFree(pOCILib, (OCI_Date *) elem->obj); break; case OCI_CDT_LOB: OCI_LobFree(pOCILib, (OCI_Lob *) elem->obj, xsink); break; case OCI_CDT_FILE: assert(false); //OCI_FileFree(pOCILib, (OCI_File *) elem->obj); break; case OCI_CDT_OBJECT: OCI_ObjectFree2(pOCILib, (OCI_Object *) elem->obj, xsink); break; case OCI_CDT_COLLECTION: OCI_CollFree2(pOCILib, (OCI_Coll *) elem->obj, xsink); break; case OCI_CDT_TIMESTAMP: OCI_TimestampFree2(pOCILib, (OCI_Timestamp *) elem->obj); break; case OCI_CDT_INTERVAL: OCI_IntervalFree2(pOCILib, (OCI_Interval *) elem->obj); break; case OCI_CDT_REF: assert(false); //OCI_RefFree(pOCILib, (OCI_Ref *) elem->obj); break; } } if ((elem->hstate == OCI_OBJECT_ALLOCATED) && (elem->typinf->cols[0].type == OCI_CDT_NUMERIC)) { OCI_FREE(elem->handle); } OCI_FREE(elem->buf); OCI_FREE(elem); OCI_RESULT(pOCILib, TRUE); return TRUE; }