Hi Miguel
the problem is the C++ Code
try this
string sql = "begin listatipos(:1); end;";
con.Open(connectString, user, passw);
Statement st(con);
Statement st2(con);
St.Bind(":1",&st2,1);
st.Execute(sql);
// something missing to bind the oracle variable "rc"?
Resultset rs = st2.GetResultset();
int total_colunas = int(rs.GetColumnCount());
cout << "Tabela com " << total_colunas << " colunas." << endl;
while (rs.Next())
{
for (int i = 1; i <= total_colunas; i++){
cout << rs.Get<string>(i) << "\t";
}
cout << std::endl;
}
con.Close();
Regards
Luiz
2015-01-03 15:09 GMT-02:00 Miguel Vaz <pag...@gm...>:
> Forgive my ignorance, but can you point me to an example or show me a bit
> of code to get me started? I am a beginner when it comes to oracle. From
> what i gathered from your reply, the PL/SQL procedure is the problem, not
> the c++ code, right?
>
> Thank you for the swift reply, vincent.
>
> best regards,
> Miguel
>
> On Sat, Jan 3, 2015 at 3:44 PM, vincent rogier <vin...@gm...>
> wrote:
>
>> Hi,
>>
>> In your procedure the ref cursor is not a return value but an out
>> parameter. You must bind another local statement object indicating to the
>> statement executing the sql and add a " :"in the sql string. When you call
>> st.Bind() passing the other stmt object that will receive the ref cursir
>> you must specify the out direction
>>
>> Regards
>>
>> Vincent
>> Le 3 janv. 2015 14:56, "Miguel Vaz" <pag...@gm...> a écrit :
>>
>>> Hi,
>>>
>>> I searched everywhere for a solution to this apparently simple question,
>>> but i couldnt find it anywhere. All the solutions i find are for C using
>>> OCI_* way.
>>>
>>> I have a stored procedure on an oracle db (12) and i simply want to call
>>> it, retrieve the resulting resultset and display it on my c++ application
>>> (using visual studio 2013).
>>>
>>> My stored procedure:
>>>
>>> CREATE OR REPLACE
>>> procedure listatipos(p_recordset OUT SYS_REFCURSOR) as
>>> BEGIN
>>> open p_recordset FOR
>>> select id_ctipo,nome from corpostipos cpt order by id_ctipo asc;
>>> END listatipos;
>>>
>>>
>>> My c++ code:
>>>
>>> string sql = "declare rc SYS_REFCURSOR; begin listatipos(rc); end;";
>>> con.Open(connectString, user, passw);
>>> Statement st(con);
>>> st.Execute(sql);
>>> // something missing to bind the oracle variable "rc"?
>>> Resultset rs = st.GetResultset();
>>> int total_colunas = int(rs.GetColumnCount());
>>> cout << "Tabela com " << total_colunas << " colunas." << endl;
>>> while (rs.Next())
>>> {
>>> for (int i = 1; i <= total_colunas; i++){
>>> cout << rs.Get<string>(i) << "\t";
>>> }
>>> cout << std::endl;
>>> }
>>> con.Close();
>>>
>>> This results in "A null Resultset handle has been provided". If i use a
>>> simple query like "select * from table1", the records are listed perfectly.
>>>
>>> From comparing my code to the previous version ones i find online, i can
>>> see its probably something with a bind(?)? Is it something with my
>>> procedure?
>>>
>>> Please help, i find the ocilib a very straightforward library to work
>>> with but this simple problem is driving me crazy. there are no references
>>> online as to how to call and retrieve procedure results using it.
>>>
>>> Should i use the other code? I mean, use OCI_ etc? Shouldnt the c++ api
>>> be complete?
>>>
>>> Thanks!
>>>
>>> best regards,
>>> MV
>>>
>>> NOTE: i also posted this question on the forums, please forgive the
>>> duplication.
>>>
>>>
>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Dive into the World of Parallel Programming! The Go Parallel Website,
>>> sponsored by Intel and developed in partnership with Slashdot Media, is
>>> your
>>> hub for all things parallel software development, from weekly thought
>>> leadership blogs to news, videos, case studies, tutorials and more. Take
>>> a
>>> look and join the conversation now. http://goparallel.sourceforge.net
>>> _______________________________________________
>>> Orclib-users mailing list
>>> Orc...@li...
>>> https://lists.sourceforge.net/lists/listinfo/orclib-users
>>>
>>>
>
>
> ------------------------------------------------------------------------------
> Dive into the World of Parallel Programming! The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media, is
> your
> hub for all things parallel software development, from weekly thought
> leadership blogs to news, videos, case studies, tutorials and more. Take a
> look and join the conversation now. http://goparallel.sourceforge.net
> _______________________________________________
> Orclib-users mailing list
> Orc...@li...
> https://lists.sourceforge.net/lists/listinfo/orclib-users
>
>
|