Re: [Orclib-users] collection insert assist
Open source C and C++ library for accessing Oracle Databases
Brought to you by:
vince_del_paris
|
From: Kourosh A. <kou...@gm...> - 2012-09-27 00:18:24
|
Hi,
Thanks for the error handler. It showed that OCI_ObjectSetString
works fine. But, OCI_ElemSetObject and OCI_CollAppend report errors
that " A null Statement handle has been provided".
That seems to be the reason a null is inserted for the collection.
I checked the syntax and I could not find anything wrong with the two
following high lighted in red:
:
:
field6_col_obj = OCI_ObjectCreate (cn, OCI_TypeInfoGet(cn,
"field6_col_typ", OCI_TIF_TYPE));
field6_col_elem = OCI_ElemCreate (OCI_TypeInfoGet(cn,
"field6_col_typ", OCI_TIF_TYPE));
field6_col_coll = OCI_CollCreate (OCI_TypeInfoGet(cn,
"field6_col_tab_typ", OCI_TIF_TYPE));
OCI_ObjectSetString (field6_col_obj, "field6_name", "test123");
error: OCI_ElemSetObject (field6_col_elem, field6_col_obj);
error: OCI_CollAppend (field6_col_coll, field6_col_elem);
:
:
At 02:03 PM 9/26/2012, vincent rogier wrote:
>Let me know if you have solved your problem
>
>On Wed, Sep 26, 2012 at 10:48 PM, Kourosh Ashkon
><<mailto:kou...@gm...>kou...@gm...> wrote:
>Thank you!
>Regards,
>
>At 01:37 PM 9/26/2012, vincent rogier wrote:
>>Hi,
>>First, always use an error handler. This would tell why i does not
>>work. Try again with an error handler.
>>Also, use OCI_CollAppend() instead of OCI_CollSetAt().
>>Regards,
>>Vincent
>>
>>On Wed, Sep 26, 2012 at 9:38 PM, Kourosh Ashkon
>><<mailto:kou...@gm...>kou...@gm... > wrote:
>>Hi,
>>I have a simple table with the last column as a collection. I
>>created an object and assigned a value to it. Then I created an
>>element and assigned the object to it. Then I created a collection
>>and assigned the element to it. When I insert in to the table it
>>enters null for the collection. Can you help?
>>The following are the type definitions and the C code.
>>Thank you in advance!
>>====================================================================================================
>>
>>CREATE OR REPLACE TYPE field6_coltyp AS OBJECT
>>(
>> field6_name varchar2(50),
>>)
>>/
>>CREATE OR REPLACE TYPE field6_coltab_typ AS table of field6_coltyp ;
>>CREATE OR REPLACE TYPE test_table_typ AS OBJECT
>> (
>> field1 varchar2(25),
>> field2 varchar2(25),
>> field3 varchar2(20),
>> field4 timestamp,
>> field5 number,
>> field6 field6_coltab_typ)
>>/
>>CREATE table test_table
>> (
>> field1 varchar2(25),
>> field2 varchar2(25),
>> field3 varchar2(20),
>> field4 timestamp,
>> field5 number,
>> field6 field6_coltab_typ)
>> NESTED TABLE field6 STORE AS field6_tab
>>/
>>
>>-----------------------------------------------
>>#include <stdio.h>
>>#include <ctype.h>
>>#include <stdlib.h>
>>#include <string.h>
>>#include <time.h>
>>#include "ocilib.h"
>>int main(void)
>>{
>> OCI_Connection *cn;
>> OCI_Statement *st;
>> char field1 [25];
>> char field2 [25];
>> char field3 [25];
>> char field4 [30];
>> char field5 [25];
>> OCI_Coll* field6_col_coll;
>> OCI_Elem* field6_col_elem;
>> OCI_Object* field6_col_obj;
>> OCI_TypeInfo *type;
>> OCI_Iter *iter;
>>
>> int i;
>> if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
>> return EXIT_FAILURE;
>> cn = OCI_ConnectionCreate("db", "usr", "pwd", OCI_SESSION_DEFAULT);
>> if (cn != NULL)
>> {
>> st = OCI_StatementCreate(cn);
>> field6_col_obj = OCI_ObjectCreate (cn, OCI_TypeInfoGet(cn,
>> "field6_col_typ", OCI_TIF_TYPE));
>> field6_col_elem = OCI_ElemCreate (OCI_TypeInfoGet(cn,
>> "field6_col_typ", OCI_TIF_TYPE));
>> field6_col_coll = OCI_CollCreate (OCI_TypeInfoGet(cn,
>> "field6_col_tab_typ", OCI_TIF_TYPE));
>> OCI_ObjectSetString (field6_col_obj, "field6_name", "test123");
>> OCI_ElemSetObject (field6_col_elem, field6_col_obj);
>> OCI_CollSetAt (field6_col_coll, 1, field6_col_elem);
>> OCI_Prepare(st, "INSERT INTO test_table VALUES (:c, :s, :x,
>> :d, :g, :h)");
>> memset (field1, 0, sizeof (field1));
>> memset (field2, 0, sizeof (field2));
>> memset (field3, 0, sizeof (field3));
>> memset (field4, 0, sizeof (field4));
>> memset (field5, 0, sizeof (field5));
>> strcpy (field1, "field1_val");
>> strcpy (field2, "field2_val");
>> strcpy (field3, "field3_val");
>> strcpy (field4, "field4_val");
>> strcpy (field5, "field5_val");
>> OCI_BindString(st, ":c", field1, 25);
>> OCI_BindString(st, ":s", field2, 25);
>> OCI_BindString(st, ":x", field3, 25);
>> OCI_BindString(st, ":d", field4, 30);
>> OCI_BindString(st, ":g", field5, 25);
>> OCI_BindColl(st, ":h", field6_col_coll);
>>
>> OCI_Execute(st);
>> OCI_Commit(cn);
>> OCI_ElemFree (field6_col_elem);
>> OCI_CollFree (field6_col_coll);
>> OCI_StatementFree(st);
>> OCI_ConnectionFree(cn);
>> }
>> else
>> printf("Failure\n");
>> OCI_Cleanup();
>> return EXIT_SUCCESS;
>>}
>>------------------------------------------------------------------------------
>>
>>How fast is your code?
>>3 out of 4 devs don\\\'t know how their code performs in production.
>>Find out how slow your code is with AppDynamics Lite.
>><http://ad.doubleclick.net/clk;262219672;13503038;z>http://ad.doubleclick.net/clk;262219672;13503038;z?
>>
>>http://info.appdynamics.com/FreeJavaPerformanceDownload.html
>>_______________________________________________
>>Orclib-users mailing list
>><mailto:Orc...@li...>Orc...@li...
>>
>>https://lists.sourceforge.net/lists/listinfo/orclib-users
>>
>>
>>
>>
>>--
>>Vincent Rogier
>
>
>
>--
>Vincent Rogier
|