Re: [Orclib-users] Question about calling procedures in packages with custom types
Open source C and C++ library for accessing Oracle Databases
Brought to you by:
vince_del_paris
|
From: vincent r. <vin...@gm...> - 2013-11-12 21:54:37
|
I'll have a look tomorrow and let you know.
Le 12 nov. 2013 18:49, "Florian Grißmer" <spi...@gm...> a écrit :
> Hi Vincent
>
> Using this destroy-loop doesn't make any diffence
>
> While ( elem != Null ) {
>
> OCI_ObjectFree ( OCI_ElemGetObject( elem ) ) ;
>
> elem = OCI_IterGetNext ( iter ) ;
> }
>
> I still get the same error
>
>
> Only call OCI_xxxFree() çon object returned by OCI_xxxCreate()
>>
>
> Yes Thats why I thought i coul call the Function OCI_ElemFree on my elem,
> which I created with OCI_ElemCreate. Is it impossible to destroy the
> objects using only the collection-Object?
>
> Thx for your help
>
>
>
>>
>> Regards,
>>
>> Vincent
>>
>>
>> On Tue, Nov 12, 2013 at 4:12 PM, Florian Grißmer <spi...@gm...>wrote:
>>
>>> Hi Vincent
>>>
>>> Thx for you answer, I was afraid of that, I liked the package-scheme,
>>> It's a pity I can't use it this way.
>>>
>>> I have another question. I created and destroyed a list (collection of
>>> an object-type with two string-fields) with 5000 Elements as Objects and it
>>> still gives me this error at the end: *OCI Error 0, Found 5000 unfreed
>>> OCI Object handles *after the OCI_Cleanup call. What am I doing wrong,
>>> I create and destroy all Elements
>>>
>>> I call OCI_ElemFree ( elem ), but because of this check:
>>>
>>> if ((obj)->hstate == OCI_OBJECT_FETCHED_CLEAN)
>>> return (ret);
>>>
>>> This Elements object ist not destroyed. Is this an effect of my test,
>>> that Elements in Lists, if they are not used in a request can't be
>>> destroyed and in a productive environment, where I would always call a
>>> PL/SQL procedure with this list, this would never happen? Or sth different?
>>>
>>> Thx for your help
>>>
>>>
>>> OCI_Initialize ( err_handler, Null, OCI_ENV_DEFAULT) ) ;
>>>
>>> con = OCI_ConnectionCreate ( db, user, pwd ) ;
>>>
>>> list_typinf = OCI_TypeInfoGet ( con, name, OCI_TIF_TYPE ) ;
>>>
>>> column = OCI_TypeInfoGetColumn ( list_typinf, 1 ) ;
>>>
>>> col_typinf = OCI_ColumnGetTypeInfo ( column ) ;
>>>
>>> coll = OCI_CollCreate ( list_typinf ) ;
>>>
>>> obj = OCI_ObjectCreate ( con, col_typinf ) ;
>>>
>>> OCI_ObjectSetString ( obj, field_1, field_1_value ) ;
>>>
>>> OCI_ObjectSetString ( obj, field_2, field_2_value ) ;
>>>
>>> For (int i = 1; i <= 5000; i++) {
>>>
>>> elem = OCI_ElemCreate ( list_typinf ) ;
>>>
>>> OCI_ElemSetObject ( elem, obj ) ;
>>>
>>> OCI_CollAppend ( coll, elem ) ;
>>> }
>>>
>>> OCI_ObjectFree ( obj ) ;
>>>
>>> iter = OCI_IterCreate ( coll ) ;
>>>
>>> elem = OCI_IterGetNext ( iter ) ;
>>>
>>> While ( elem != Null ) {
>>>
>>> OCI_ElemFree ( elem ) ;
>>>
>>> elem = OCI_IterGetNext ( iter ) ;
>>> }
>>>
>>> OCI_IterFree ( iter ) ;
>>>
>>> OCI_CollFree ( coll ) ;
>>>
>>> OCI_ConnectionFree ( con ) ;
>>>
>>> OCI_Cleanup () ;
>>>
>>>
>>>
>>> On Mon, Nov 11, 2013 at 3:53 PM, vincent rogier <vin...@gm...>wrote:
>>>
>>>> Hello,
>>>>
>>>> PL/SQL records and tables of records cannot be used outside PL/SQL. In
>>>> order to use collections in PL/SQL,SQL and host programs, you must use SQL
>>>> collections (varrays or nested tables).
>>>> Thus you need to create an object type and a nested table of objects.
>>>> Change your record definition to an object type definition.
>>>> You can have a look at the ocilib demo source files for definition and
>>>> usage :)
>>>>
>>>> Regards,
>>>>
>>>> Vincent
>>>> Le 11 nov. 2013 14:13, "Florian Grißmer" <spi...@gm...> a écrit
>>>> :
>>>>
>>>>> Hi
>>>>>
>>>>> I have a question about an OCI_Collection Argument of a procedure.
>>>>> Suppose I have a procedure defined in a package like this:
>>>>>
>>>>> CREATE OR REPLACE
>>>>> PACKAGE TEST_PACK AS
>>>>>
>>>>> TYPE test_rcd IS RECORD ( testnum Number(4,0)
>>>>> , test_varchar Varchar(14) );
>>>>>
>>>>> TYPE list_of_rcds IS TABLE OF test_rcd;
>>>>>
>>>>> Procedure test_prc1 ( rcd IN Out list_of_rcds ) ;
>>>>>
>>>>>
>>>>> END TEST_PACK;
>>>>>
>>>>> Ho do I call this procedure with a binded argument? To build the
>>>>> "rcd"-OCI_Collection Variable i have to have an OCI_TypeInf, which I cant
>>>>> get, because the type is inside a package. OCI_TypeInfoGet() uses
>>>>> "Describe" and this can't access types inside packages.
>>>>>
>>>>> Thx in advance.
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> November Webinars for C, C++, Fortran Developers
>>>>> Accelerate application performance with scalable programming models.
>>>>> Explore
>>>>> techniques for threading, error checking, porting, and tuning. Get the
>>>>> most
>>>>> from the latest Intel processors and coprocessors. See abstracts and
>>>>> register
>>>>>
>>>>> http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk
>>>>> _______________________________________________
>>>>> Orclib-users mailing list
>>>>> Orc...@li...
>>>>> https://lists.sourceforge.net/lists/listinfo/orclib-users
>>>>>
>>>>>
>>>
>>
>>
>> --
>> Vincent Rogier
>>
>
>
|