コード例 #1
0
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;
}
コード例 #2
0
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;
}