Charles Jardine said:

> I am still convinced that Michael should not need explicitly to
> close his cursors. I would be interested to know if tracing shows
> his cursors being destroyed in a timely fashion, since I suspect
> that something may be maintaining references to the DBI handles for
> longer than necessary.

and Charles Jardine also said:

> Note that bind_param_inout creates a reference from the pl/sql
> statement handle to the cursor statement handle, so the last
> cursor retrieved will not be destroyed until the pl/sql handle
> is destroyed.

OK. This sounds like we might be getting somewhere. I agree that it
sounds like something is keeping a reference to the cursor statement
handle. What you're saying, I believe, is that after

  $sth1->bind_param_inout(':curref', \$sth2, 0, { ora_type => ORA_RSET }
  );

I have a ref cursor statement handle in $sth2, but $sth1, the pl/sql
statement handle, *also* keeps a reference to the ref cursor statement
handle. Is that correct?

I'm going to go through my code again this morning and see if I can
figure out what might be keeping references open. In general, what would
be a good way of tracing or otherwise checking on where I'm leaking
references? I've tried using DBI->trace, and that works, but it's not
the easiest way to track what has references to what. Does anyone know
of a better way of tracking Perl references?

Mike

Reply via email to