In trunk! :-) On Wednesday, 5 August 2015 13:31:01 UTC-5, Boris Aramis Aguilar RodrÃguez wrote: > > Steps to reproduce: > > db.define_table('atable', Field('longtext', 'text'))#this makes longtext > to be a clob in oracle database > for i in range(1, 100): > db.atable.insert(longtext=str(i)) > > rows = db(db.atable.id>0).select() > for r in rows: > print r.longtext #this fails with the following exception > > Traceback (most recent call last): > File "<console>", line 1, in <module> > ProgrammingError: LOB variable no longer valid after subsequent fetch > > As I was trying to fix the error I found that LOB variables if not called > .read() they can't be accessed afterwards, so this only happened when you > selected something that returned more than 1 row. I finally found the issue > in > > *OracleAdapter method _fetchall* > def _fetchall(self): > if any(x[1]==cx_Oracle.LOB for x in self.cursor.description): > return [tuple([(c.read() if type(c) == cx_Oracle.LOB else c) \ > for c in r]) for r in self.cursor] > else: > return self.cursor.fetchall() > > So this method calls the read() method when it detects that the data is > cx_Oracle.LOB data type... but as long as the latest version of cx_Oracle > CLOB is not the same as LOB so this code fails for CLOB data (text fields > in web2py dal and Oracle backend). > > So, finally the bugfix is to detect for CLOB and LOB data types and call > the read() method > > The BugFix > def _fetchall(self): > if any(x[1]==cx_Oracle.LOB or x[1]==cx_Oracle.CLOB for x in self. > cursor.description): > return [tuple([(c.read() if type(c) == cx_Oracle.LOB else c) \ > for c in r]) for r in self.cursor] > else: > return self.cursor.fetchall() > > > >
-- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.