Re: [Orclib-users] OCILIB vs OCCI
Open source C and C++ library for accessing Oracle Databases
Brought to you by:
vince_del_paris
From: vincent r. <vin...@ya...> - 2013-08-12 13:11:27
|
can you provide the prototype of the stored proc ? and and example ofaParameterString ? On Mon, Aug 12, 2013 at 2:06 PM, xavier lhomme <lho...@gm...>wrote: > Hi > I'd some trouble converting some part of the code using OCCI to OCILIB. > Especially the setNumber function and registeroutParam... > I replace these functions by a binding on a long and a RefGetObjet... > Is is the right choice ? > > ///------------------------------------------------ > /// OLD Syntax with OCCI > > strcpy(aParameterString,"("); > int i=1; > while(i<anIdIndex+1) > { > sprintf(aNumParameterString,":%d,",i); > strcat(aParameterString,aNumParameterString); > ++i; > } > aParameterString[strlen(aParameterString)-1]=')'; // remplace la dernière > ',' > sprintf(aRequest,"BEGIN %s%s; END;",aStoredProcedureName,aParameterString); > > std::string aQuery = std::string(aRequest); > > > oracle::occi::Statement* stmt = getConnection()->createStatement(aQuery); > oracle::occi::Connection* aConnectionPt = getConnection(); > > ... > aStatementPt->setNumber(1, aValueLong); > ... > > stmt->registerOutParam(anIdIndex,OCCIINT,sizeof(aNewElementId)); > > unsigned int aNbLine = stmt->executeUpdate(); > > aNewElementId = stmt->getInt(anIdIndex); > > getConnection()->commit(); > > getConnection()->terminateStatement(stmt); > > ///----------------------------------------------------------------- > /// New Syntax With OCILIB > aParameterString[0]='('; > while(i<anIdIndex+1) > { > sprintf(aNumParameterString,":%d,",i); > strcat(aParameterString,aNumParameterString); > ++i; > } > aParameterString[strlen(aParameterString)-1]=')'; // remplace la dernière > ',' > sprintf(aRequest,"BEGIN %s%s; END;",aStoredProcedureName,aParameterString); > > OCI_Connection* cnPt= getConnection(); > OCI_Statement * stmt = OCI_StatementCreate(cnPt); > OCI_Prepare(stmt,aRequest); > > OCI_BindLong(stmt,":1", (OCI_Long*)&aValueLong,sizeof(long)); > > OCI_Ref *ref; > > OCI_BindRef(stmt, ":r", ref); > OCI_Execute(stmt); > > OCI_Object *obj= OCI_RefGetObject(ref); > aNewElementId =OCI_ObjectGetInt(obj, ":r"); > > OCI_Commit(cnPt); > > OCI_RefFree(ref); > OCI_StatementFree(stmt); > > > 2013/8/10 vincent rogier <vin...@ya...> > >> Hi Xavier, >> >> You've pointered out the weakness of OCCI that explains why it has never >> been a great Oracle success ! >> Another major issue with OCCI is that you've have to deal with object >> pointers in C++ and is not the best C++ design and not STL like oriented. >> >> OCILIB is compatible with all C compilers and all Oracle plaforms, in >> their 32/64 flavours. >> >> Another thing is Version 4.0 of OCILIB introduces a new C++ API : >> OCILIB++ : full C++ design, based on templates, using right design patterns. >> No user dynamic object allocation (that is a pain for using exceptions >> with effectiveness). Instead, the library uses stack objects that >> implements internally references counting, raii, and so on. >> >> OCILIB++ is a single C++ header (ocilib.hhpp) ! >> It is already available on the SF.NET repository under the include >> folder. It hasn't been released because i'm missing a bit of time for >> completing the user documentation. You'll also find most of the c demo >> files under the demo folder ported to their c++ counterparts :) >> >> Give it a try ! >> >> It will be much easier to port OCCI code to OCILIB++ than porting to raw >> C code ! >> >> Regards, >> >> >> Vincent >> >> >> On Tue, Aug 6, 2013 at 8:59 PM, xavier lhomme <lho...@gm...>wrote: >> >>> Hi >>> >>> We wrote a software few years ago which use OCCI to connect to oracle >>> 9.x. The software was written with visual c++ 2005 on win32... >>> I tryed to build a new version with oracle 11.2, visual studio 2012 on >>> x64, and OCCI but I encounter heap corruption after calling getString(apparently it's a famous problem due to >>> inconsistency between version of the compiler used and the OCCI sdk see >>> on google OCCI getString). >>> I'm disappointed with OCCI because I can't obtain a version compliant >>> with my environment (visual studio 2012,x64,oracle 11.2.0.1) >>> Then I wonder If I would have more chance using OCILIB with visual >>> studio 2012,x64,oracle 11.2.0.1 and if anybody has experience porting code >>> from OCCI to OCILIB ? >>> >>> best regards >>> xlhomme >>> >>> >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Get 100% visibility into Java/.NET code with AppDynamics Lite! >>> It's a free troubleshooting tool designed for production. >>> Get down to code-level detail for bottlenecks, with <2% overhead. >>> Download for free and get started troubleshooting in minutes. >>> >>> http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk >>> _______________________________________________ >>> Orclib-users mailing list >>> Orc...@li... >>> https://lists.sourceforge.net/lists/listinfo/orclib-users >>> >>> >> >> >> -- >> Vincent Rogier >> > > -- Vincent Rogier |