Re: [Orclib-users] Simple insert with in variables to procedure
Open source C and C++ library for accessing Oracle Databases
                
                Brought to you by:
                
                    vince_del_paris
                    
                
            
            
        
        
        
    | 
     
      
      
      From: Miguel V. <pag...@gm...> - 2015-01-13 22:51:36
      
     
   | 
Great stuff. Better support is impossible. :-) Going to download it right
away.
Thanks for everything, Vincent.
best regards,
Miguel
On Tue, Jan 13, 2015 at 10:46 PM, vincent rogier <vin...@gm...>
wrote:
> Btw, version 4.0.1 released :)
>
> On Tue, Jan 13, 2015 at 10:53 PM, vincent rogier <vin...@gm...>
> wrote:
>
>> you can create a procedure that takes an collection (PL/SQL table, VARRAY
>> or nested tables) as input parameter.
>> In the app code, you can use a collection<T> and bind it to the statement.
>> check the C++ main demo app and the collection cpp demo
>> As well you can refer to the C documentation - section Collection for
>> more information
>>
>> On Tue, Jan 13, 2015 at 10:47 PM, Miguel Vaz <pag...@gm...> wrote:
>>
>>> Yes, i understand the impossibility of sending a class, what i meant was
>>> send bulk rows of data in one go.
>>>
>>> Dont worry. Get that realeas done. And thanks. :-)
>>>
>>> best regards,
>>> MV
>>>
>>> On Tue, Jan 13, 2015 at 9:37 PM, vincent rogier <vin...@gm...>
>>> wrote:
>>>
>>>> I'm currently finishing creating release packages for v4.0.1.
>>>> They will be online wihtin the next hour.
>>>>
>>>> You cannot send a C++ class to an oracle procedure.
>>>>
>>>> Regards,
>>>>
>>>> Vincent
>>>>
>>>> On Tue, Jan 13, 2015 at 10:34 PM, Miguel Vaz <pag...@gm...>
>>>> wrote:
>>>>
>>>>> Hi Vincent,
>>>>>
>>>>> Thats perfectly ok. Just glad you know what the problem is. I did
>>>>> spend the whole afternoon cursing over my code and lack of skills, hehe. :-)
>>>>>
>>>>> On a different note, how can i send a simple class over to an oracle
>>>>> procedure?
>>>>>
>>>>> Something like:
>>>>>
>>>>> class person{
>>>>>    string nome;
>>>>>    int id;
>>>>> }
>>>>>
>>>>> on the oracle side somethign like:
>>>>>
>>>>> create ...
>>>>> procedure_name(indata IN cursor){
>>>>>
>>>>>
>>>>> }
>>>>>
>>>>> Any pointer on this is great help.
>>>>>
>>>>> Again, no worries about the bug. :-)
>>>>>
>>>>> best regards,
>>>>> MV
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Tue, Jan 13, 2015 at 6:40 PM, vincent rogier <
>>>>> vin...@gm...> wrote:
>>>>>
>>>>>> Hi Miguel,
>>>>>>
>>>>>> I apologize as there is an issue with binding string in the released
>>>>>> header files.
>>>>>>
>>>>>> I'm going to release an version 4.0.1 with some fixes for both C and
>>>>>> C++ APIs this week.
>>>>>>
>>>>>> Regarding your issue, while waiting for the new packages, you can fix
>>>>>> it quickly by making the following simple modification :
>>>>>>
>>>>>> * in the file ocilib_impl.hpp, line 3860  (BindAdaptor template class
>>>>>> constructor)
>>>>>> * replace _size by size
>>>>>>
>>>>>> and it should work again :)
>>>>>>
>>>>>> Sorry for the inconvenience !
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Vincent
>>>>>>
>>>>>>
>>>>>> On Tue, Jan 13, 2015 at 6:15 PM, Miguel Vaz <pag...@gm...>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi,
>>>>>>> I cant a simple insert to work using a procedure and ocilib.
>>>>>>>
>>>>>>> The procedure:
>>>>>>>
>>>>>>> CREATE OR REPLACE
>>>>>>> PROCEDURE criasistema(idout OUT NUMBER, nm IN VARCHAR2) AS
>>>>>>> BEGIN
>>>>>>> insert into sistemas(NOME) values(nm) returning id_sistema into
>>>>>>> idout;
>>>>>>>
>>>>>>> END;
>>>>>>>
>>>>>>>
>>>>>>> Heres the c++ code:
>>>>>>>
>>>>>>> Environment::Initialize(Environment::Default |
>>>>>>> Environment::Threaded);
>>>>>>> string sql = "declare ids NUMBER begin criasistema(:ids,:nm); end;";
>>>>>>>
>>>>>>> try{
>>>>>>> con.Open(connectString, user, passw);
>>>>>>> Statement st(con);
>>>>>>> Statement st2(con);
>>>>>>> st.Prepare(sql);
>>>>>>> st.Bind(":ids", st2, BindInfo::Out);
>>>>>>> st.Bind(":nm", nome, 255, BindInfo::In);
>>>>>>> st.Execute();
>>>>>>>
>>>>>>> con.Commit();
>>>>>>> con.Close();
>>>>>>>
>>>>>>> }
>>>>>>> catch (Exception &ex){
>>>>>>> cout << ex.what() << endl;
>>>>>>> }
>>>>>>>
>>>>>>> Environment::Cleanup();
>>>>>>>
>>>>>>> It compiles but breaks at st.Bind(":nm", nome, 255, BindInfo::In);
>>>>>>> What am i doing wrong?
>>>>>>>
>>>>>>> I assumed it would be simply a matter of binding in and out
>>>>>>> variables and it shuld work, but not so easy.. :-P
>>>>>>>
>>>>>>> I am really not at easy with the binds. Next step will be to send a
>>>>>>> full object (int,string,...) array, but if i cant solve this simple string
>>>>>>> issue, i am not going anywahere.
>>>>>>>
>>>>>>> Thanks.
>>>>>>> MV
>>>>>>>
>>>>>>>
>>>>>>> ------------------------------------------------------------------------------
>>>>>>> New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
>>>>>>> GigeNET is offering a free month of service with a new server in
>>>>>>> Ashburn.
>>>>>>> Choose from 2 high performing configs, both with 100TB of bandwidth.
>>>>>>> Higher redundancy.Lower latency.Increased capacity.Completely
>>>>>>> compliant.
>>>>>>> http://p.sf.net/sfu/gigenet
>>>>>>> _______________________________________________
>>>>>>> Orclib-users mailing list
>>>>>>> Orc...@li...
>>>>>>> https://lists.sourceforge.net/lists/listinfo/orclib-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Vincent Rogier
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Vincent Rogier
>>>>
>>>
>>>
>>
>>
>> --
>> Vincent Rogier
>>
>
>
>
> --
> Vincent Rogier
>
 |