Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Usenet -> c.d.o.misc -> Re: How to insert BLOB?
You need to first allocate a OCILobLocator, then bind that and execute the
query and then use OCILobWrite. Though it will only work with Oracle 9
onwards.
Something like this (You might need some tweaks in this code below):
OCIBind * bind; OCILobLocator *locator = 0; char *insert_ = "INSERT INTO MYTABLE VALUES(:locator);"; check(err_, OCIDescriptorAlloc((dvoid *)env_, (dvoid **)&locator, OCI_DTYPE_LOB, 0, (dvoid**)0)); cout << "Got descriptor" << endl; // Now create a temporary LOB check(err_, OCILobCreateTemporary(context_, err_, locator, 0, SQLCS_IMPLICIT, OCI_TEMP_BLOB, OCI_ATTR_NOCACHE, OCI_DURATION_SESSION)); cout << "Created Temp" << endl; check(err_, OCIStmtPrepare(stmt_, err_, (ub1*)insert_, strlen(insert_), OCI_NTV_SYNTAX, OCI_DEFAULT)); cout << "Created statement" << endl; check(err_, OCIBindByPos(stmt_, &bind, err_, 1, (dvoid*)&locator, sizeof(OCILobLocator *), SQLT_BLOB, 0,0,0,0,0, OCI_DEFAULT)); cout << "Statement Bound" << endl; check(err_, OCIStmtExecute(context_, stmt_, err_, 1, 0, (OCISnapshot*)NULL, (OCISnapshot *)NULL, OCI_DEFAULT)); cout << "Executed" << endl; ub4 amtp = LargeSize; ub4 loblen = LargeSize; check(err_, OCILobWrite(context_, err_, locator, &amtp, 1, (dvoid*) buff, loblen, OCI_ONE_PIECE, (dvoid *)0, (sb4 (*)(dvoid *, dvoid *, ub4*, ub1*)
cout << "Written" << endl;
OCITransCommit(context_, err_, 0); cout << "Commited. Done!" << endl; -----------------------------------------------------------------Amit Jindal, Development Engineer
Want ease of development or performance? Why not get both! http://www.roguewave.com/products/sourcepro/db/
[Disclaimer: All views expressed here are my personal views
and they can be incorrect at times]
"Ole Hansen" <rm_oha_rm_at_city.dk> wrote in message
news:3f54aba0$0$32520$edfadb0f_at_dread16.news.tele.dk...
> Hi,
>
>
>
>
![]() |
![]() |