[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-26 19:39:33
|
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;
}
|