I encountered the following bug in the recent DCOracle this week:

When trying to use stored procedures with more than 1 out parameter like

create or replace procedure testproc ( pname out string, pid out int)

and calling it from python with

pname,pid= dbc.procedures.testproc()

an exception will be raised:

Traceback (innermost last):
  File "./testcall.py", line 9, in ?
    x= dbc.procedures.testproc()
  File "/opt/python/lib/python1.5/site-packages/DCOracle/ociProc.py", line 149, in 
    raise t, v, tb
NameError: t

This is due to the fact that an return from __call__ is only executed when exactly one 
parameter is returned by Oracle.

I fixed this by adding a line returning the whole tuple.

BTW: The following raise will do the NameError because the variables will only be 
defined when the for loop is raising an exception. Without the return it was returning 
from the loop without an exception and thus raise had no valid namespace.

And here is the patch:

Common subdirectories: DCOracle.orig/CVS and DCOracle/CVS
diff -c DCOracle.orig/ociProc.py DCOracle/ociProc.py
*** DCOracle.orig/ociProc.py    Thu Jan 14 18:44:56 1999
--- DCOracle/ociProc.py Sun Jul  2 15:54:27 2000
*** 143,148 ****
--- 143,149 ----
                                  if f is not None: v=f(v)
                      if len(r)==1: return r[0]
+                   return r
                  except: t,v,tb=sys.exc_info()
              raise t, v, tb
          finally: tb=None

Go to your DCOracle directory in site-packages/DCOracle (or the source) and

patch -p1 <thispatch

(assuming that you've stored above fragment into 'thispatch').

After this it will also run with stored procedures using two (and more) out parameters.

I've also added it to the bug collector.


COM.lounge                                          http://comlounge.net/
communication & design                                 [EMAIL PROTECTED]

Zope-Dev maillist  -  [EMAIL PROTECTED]
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope )

Reply via email to