Thread: [cx-oracle-users] Problem with cx_Oracle 5.0.4 and Unicode support for Oracle 10g
Brought to you by:
atuining
From: W. C. T. <cra...@gm...> - 2010-09-22 18:15:23
|
I'm trying to use cx_Oracle 5.0.4 on 64-bit RedHat EL 5.5 / CentOS 5.5) with Python 2.6 and Oracle 10g (client libraries 10.2.0). When I build cx_Oracle without Unicode support, it all works as expected. When I build cx_Oracle *with* Unicode support, attempting to use a query that returns a numeric value (such as): con = Connection( ... ) cur = con.cursor() cur.execute( 'SELECT 1 FROM DUAL' ) rows = cur.fetchall() results in this exception: cx_Oracle.DatabaseError: OCI-22061: invalid format text [T I've tried the SourceForge RPMs and I've tried installing from the source tar, and the results are consistent -- without Unicode works, with Unicode fails. All help will be greatfully appreciated. - Craig - |
From: W. C. T. <cra...@gm...> - 2010-09-22 20:58:57
|
Additional information: When I look at the error context of the exception, the message is: in NumberVar_GetValue(): as string Which implies that the failure is in the call to OCINumberToText() at line 535 of NumberVar.c. - Craig - On Wed, Sep 22, 2010 at 14:15, W. Craig Trader <cra...@gm...>wrote: > I'm trying to use cx_Oracle 5.0.4 on 64-bit RedHat EL 5.5 / CentOS 5.5) > with Python 2.6 and Oracle 10g (client libraries 10.2.0). > > When I build cx_Oracle without Unicode support, it all works as expected. > When I build cx_Oracle *with* Unicode support, attempting to use a query > that returns a numeric value (such as): > > con = Connection( ... ) > cur = con.cursor() > cur.execute( 'SELECT 1 FROM DUAL' ) > rows = cur.fetchall() > > results in this exception: > > cx_Oracle.DatabaseError: OCI-22061: invalid format text [T > > I've tried the SourceForge RPMs and I've tried installing from the source > tar, and the results are consistent -- without Unicode works, with Unicode > fails. > > All help will be greatfully appreciated. > > - Craig - > > |
From: W. C. T. <cra...@gm...> - 2010-09-22 21:50:25
|
Further information: I checked the documentation for OCINumberToText()<http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14250/oci18map003.htm#sthref4703>and it referred me to TO_NUMBER()<http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions191.htm>. The call to OCINumberToText is passing in g_ShortNumberToStringFormatObj, which is set to 'TM9'. When I used sqlplus to run some tests, I discovered that while Oracle is fine with SELECT TO_NUMBER ( '1' ) FROM DUAL, it becomes most unhappy when you try SELECT TO_NUMBER( '1', 'TM9' ) FROM DUAL, responding with ORA-01722: invalid number. On the other hand, SELECT TO_CHAR( '1', 'TM9' ) FROM DUAL works just fine. It would appear that Oracle 10g does NOT like the 'TM9' conversion () for numbers. - Craig - On Wed, Sep 22, 2010 at 16:58, W. Craig Trader <cra...@gm...>wrote: > Additional information: > > When I look at the error context of the exception, the message is: > > in NumberVar_GetValue(): as string > > Which implies that the failure is in the call to OCINumberToText() at line > 535 of NumberVar.c. > > - Craig - > > > On Wed, Sep 22, 2010 at 14:15, W. Craig Trader <cra...@gm...>wrote: > >> I'm trying to use cx_Oracle 5.0.4 on 64-bit RedHat EL 5.5 / CentOS 5.5) >> with Python 2.6 and Oracle 10g (client libraries 10.2.0). >> >> When I build cx_Oracle without Unicode support, it all works as expected. >> When I build cx_Oracle *with* Unicode support, attempting to use a query >> that returns a numeric value (such as): >> >> con = Connection( ... ) >> cur = con.cursor() >> cur.execute( 'SELECT 1 FROM DUAL' ) >> rows = cur.fetchall() >> >> results in this exception: >> >> cx_Oracle.DatabaseError: OCI-22061: invalid format text [T >> >> I've tried the SourceForge RPMs and I've tried installing from the source >> tar, and the results are consistent -- without Unicode works, with Unicode >> fails. >> >> All help will be greatfully appreciated. >> >> - Craig - >> >> > |
From: Anthony T. <ant...@gm...> - 2010-09-22 21:36:44
|
Hi, I can see that problem myself in certain situations as well -- not sure what the problem is but I suspect a bug in Oracle on certain platforms. I have asked Oracle about it but have not received any information to date. Based on other bugs that I have seen and some other comments made on and off the list I am thinking that Unicode mode is not worth the trouble and I am thinking of ripping it out completely. In the meantime, so long as you can live without metadata in unicode the normal mode works fine with unicode data passed in to queries. If you want unicode returned, you can use a output type converter method -- see the samples for an example. Hope that helps. Anthony On Wed, Sep 22, 2010 at 2:58 PM, W. Craig Trader <cra...@gm...> wrote: > Additional information: > > When I look at the error context of the exception, the message is: > > in NumberVar_GetValue(): as string > > Which implies that the failure is in the call to OCINumberToText() at line > 535 of NumberVar.c. > > - Craig - > > On Wed, Sep 22, 2010 at 14:15, W. Craig Trader <cra...@gm...> > wrote: >> >> I'm trying to use cx_Oracle 5.0.4 on 64-bit RedHat EL 5.5 / CentOS 5.5) >> with Python 2.6 and Oracle 10g (client libraries 10.2.0). >> >> When I build cx_Oracle without Unicode support, it all works as expected. >> When I build cx_Oracle *with* Unicode support, attempting to use a query >> that returns a numeric value (such as): >> >> con = Connection( ... ) >> cur = con.cursor() >> cur.execute( 'SELECT 1 FROM DUAL' ) >> rows = cur.fetchall() >> >> results in this exception: >> >> cx_Oracle.DatabaseError: OCI-22061: invalid format text [T >> >> I've tried the SourceForge RPMs and I've tried installing from the source >> tar, and the results are consistent -- without Unicode works, with Unicode >> fails. >> >> All help will be greatfully appreciated. >> >> - Craig - >> > > > ------------------------------------------------------------------------------ > Start uncovering the many advantages of virtual appliances > and start using them to simplify application deployment and > accelerate your shift to cloud computing. > http://p.sf.net/sfu/novell-sfdev2dev > _______________________________________________ > cx-oracle-users mailing list > cx-...@li... > https://lists.sourceforge.net/lists/listinfo/cx-oracle-users > > |
From: W. C. T. <cra...@gm...> - 2010-09-22 22:01:14
|
Anthony ... Thanks for the quick response. Irritating (but not surprising) that Oracle is ignoring you -- Oracle suffers from Not Invented Here syndrome. In any case, thanks for all of the work putting together cx_Oracle. - Craig - On Wed, Sep 22, 2010 at 17:36, Anthony Tuininga <ant...@gm...>wrote: > Hi, > > I can see that problem myself in certain situations as well -- not > sure what the problem is but I suspect a bug in Oracle on certain > platforms. I have asked Oracle about it but have not received any > information to date. Based on other bugs that I have seen and some > other comments made on and off the list I am thinking that Unicode > mode is not worth the trouble and I am thinking of ripping it out > completely. In the meantime, so long as you can live without metadata > in unicode the normal mode works fine with unicode data passed in to > queries. If you want unicode returned, you can use a output type > converter method -- see the samples for an example. Hope that helps. > > Anthony > > On Wed, Sep 22, 2010 at 2:58 PM, W. Craig Trader <cra...@gm...> > wrote: > > Additional information: > > > > When I look at the error context of the exception, the message is: > > > > in NumberVar_GetValue(): as string > > > > Which implies that the failure is in the call to OCINumberToText() at > line > > 535 of NumberVar.c. > > > > - Craig - > > > > On Wed, Sep 22, 2010 at 14:15, W. Craig Trader <cra...@gm...> > > wrote: > >> > >> I'm trying to use cx_Oracle 5.0.4 on 64-bit RedHat EL 5.5 / CentOS 5.5) > >> with Python 2.6 and Oracle 10g (client libraries 10.2.0). > >> > >> When I build cx_Oracle without Unicode support, it all works as > expected. > >> When I build cx_Oracle *with* Unicode support, attempting to use a query > >> that returns a numeric value (such as): > >> > >> con = Connection( ... ) > >> cur = con.cursor() > >> cur.execute( 'SELECT 1 FROM DUAL' ) > >> rows = cur.fetchall() > >> > >> results in this exception: > >> > >> cx_Oracle.DatabaseError: OCI-22061: invalid format text [T > >> > >> I've tried the SourceForge RPMs and I've tried installing from the > source > >> tar, and the results are consistent -- without Unicode works, with > Unicode > >> fails. > >> > >> All help will be greatfully appreciated. > >> > >> - Craig - > |
From: Amaury F. d'A. <ama...@gm...> - 2010-09-22 22:14:01
|
Hi, 2010/9/22 Anthony Tuininga <ant...@gm...>: > Based on other bugs that I have seen and some > other comments made on and off the list I am thinking that Unicode > mode is not worth the trouble and I am thinking of ripping it out > completely Isn't the Unicode mode mandatory for python 3.x? -- Amaury Forgeot d'Arc |
From: Anthony T. <ant...@gm...> - 2010-09-22 22:20:28
|
On Wed, Sep 22, 2010 at 4:13 PM, Amaury Forgeot d'Arc <ama...@gm...> wrote: > Hi, > > 2010/9/22 Anthony Tuininga <ant...@gm...>: >> Based on other bugs that I have seen and some >> other comments made on and off the list I am thinking that Unicode >> mode is not worth the trouble and I am thinking of ripping it out >> completely > > Isn't the Unicode mode mandatory for python 3.x? Yes, indeed at the moment. I am considering simply forcing the encoding of the unicode objects to the encoding expected by the setting of NLS_LANG -- that should work well enough and avoid the code path that doesn't seem to work well on certain platforms. I believe that bindnames() also segfaults in unicode mode. There was another problem but that one was resolved in the latest patchset for 11.2. Anthony |