in reply to Re^2: Recursive dbh executions
in thread Recursive dbh executions
The statement handle is still open in your snippet, isn't it?If I understand what I think you mean: No, putting it in a for means all the rows have been fetched before the loop body starts execution.
If you're really going to fix this, note that the statement doesn't change across calls, only the bound value. I'd rewrite it like this:
But as to why the OP's using recursion: I agree with you that it seems unnecessary. It may even be fixable in the SQL, but not knowing enough about the problem and the database, I can't tell.my $sth = $dbh->prepare(<<_EOSQL); select obj_id, type from table where parent_id = ? _EOSQL sub GetChildren { my ($objid) = @_; for my $row (@{$dbh->selectall_arrayref, undef, $objid)}) { if ($row->[1] eq 'Container') { GetChildren($row->[0]); } else { # whatever } } }
Your point about assignment and equality confusion is well-taken. Another reason to use warnings, which will complain about "assignment in conditional".
|
|---|