how to use cx_Oracle callfunc
Mariano Mara
mmara at fibertel.com.ar
Fri May 11 00:32:33 EDT 2007
Godzilla escribió:
> On May 11, 11:51 am, Godzilla <godzillais... at gmail.com> wrote:
>
>> Hi all,
>>
>> I need to know how to use the method callfunc in cx_Oracle. I am
>> trying to get a primary key after an insert via a function call, but I
>> do not know how to pass the return value from the function via the
>> callfunc method. Can anyone help?
>>
>> I also tried the execute(), and callproc(), but to no avail. My
>> function is as below:
>>
>> create or replace function addRow(desc table1.col1%type) return number
>> is id number;
>> begin
>> insert into table1 (description) values (desc) returning table1ID
>> into id;
>> return(id);
>> exception
>> when others then return(-1)
>> end;
>>
>> The code in the callfunc:
>>
>> cur.callfunc("addRow", returnType, param)
>>
>> Question is:
>> - What is returnType and how to I declare that before passing into the
>> function?
>> - How do I define the parameters?
>>
>> I tried the setinputsizes and setoutputsize, but I keep getting errors
>> saying the parameter is incorrectly defined. Please help. Thank.
>>
>
> Hello,
>
> found a solution in another thread... see
>
> http://groups.google.com/group/comp.lang.python/browse_thread/thread/ab13d3364aafdd28/4ca1fde2069ff3da?lnk=st&q=cx_oracle+how+to+setinputsizes&rnum=9&hl=en#4ca1fde2069ff3da
>
> for more info.
>
> Thanks.
>
>
Did you mean A. Tuininga's suggestion dated Sep 13 2002?
cx_Oracle improved since then.
Maybe I fail to understand the problem but the following code looks like
valid anwer for what you asked:
create table test1 (id1 number, id2 varchar2(600));
create sequence testseq;
create or replace function functest(texto in test1.id2%type)
return number
is
output number;
begin
insert into test1 (id1, id2) values (testseq.nextval, texto)
returning id1 into output;
commit work;
return output;
end functest;
/
>>> import cx_Oracle as ora
>>> con = ora.connect('myuser', 'qwerty', 'orcl')
>>> cur = con.cursor()
>>> val = 0
>>> cur.callfunc("functest", val, ['this is a test'])
'1'
>>> cur.callfunc("functest", val, ['this is a test'])
'2'
>>> cur.callfunc("functest", val, ['this is a test'])
'3'
>>> cur.callfunc("functest", val, ['this is a test'])
'4'
>>> cur.callfunc("functest", val, ['this is a test'])
'5'
>>> cur.callfunc("functest", val, ['this is a test'])
'6'
Cheers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20070511/9c444526/attachment.html>
More information about the Python-list
mailing list