> Date: Mon, 28 Jan 2013 19:33:46 +0000
> From: martin.ev...@easysoft.com
> To: dbi-dev@perl.org
> Subject: Re: bind_param () - did something change?
> 
> On 28/01/2013 19:03, John Scoles wrote:
> > I do not think so. That section of DBD::Oracle code does need some rework 
> > as it was written for Oracle 8. It should be updated to use the Oracle 10+ 
> > functionality for both select and updates.  Alas one never seems to have 
> > any time work, (well finish actully) the work on this one.  CheersJohn
> 
> In addition (and I know you'll not like it) but people are still using 
> Oracle 8 and 9. Steffen only recently submitted a load of patches for 
> tests in the trunk which fail on Oracle 8. That table 
> (http://search.cpan.org/~pythian/DBD-Oracle-1.56/lib/DBD/Oracle.pm#WHICH_VERSION_OF_DBD::ORACLE_IS_FOR_ME?)
>  
> in DBD::Oracle looks wrong as I know Steffen is using older Oracle's 
> than the table suggests you can use. I'm not in a great rush to remove 
> support for any Oracle versions whilst people are still using them. No 
> doesn't bug me.  The big problem is not really if 8~7 work it is more to do 
> with theclient they are using.  OCI8 really hasn't changed much since Oracle 
> 8.If they can get it to compile and connect then good on them.  > I  know the 
> arguments but no one having the tuits to remove support for 
> older Oracles is a good thing to me unless a good case for improvement 
> and tuits can be made. I'd rather continue to support all we can in the 
> code using conditional code as it does now.
>  The main point it the present fetch is somthing like this 1) parse 
> statement2) idetify lobs3) get lob thingy (can't remeber off the top of my 
> head,, lob locator perhaps??) on execute4) run an extra select to actully get 
> the lob5) munge it back into the select call Just a buch of extra steps and 
> round trips that are not needed.  If memory serves me correctly.  
> As for Merijn's problem we discussed this on irc. I'm not sure my 
> answers satisfied Merijn but I believe the situation right now is that 
> if you have a table with multiple lobs and you are updating one of them 
> you need to specify ora_field. The driver does not know the columns on 
> an insert, it only scans the SQL for placeholders and does not parse the  Yep 
> that is true it is a two step process generate the lob_locatior and insert 
> intothe orginal table and create the lob for the locator. The newer way to do 
> it is just insert it directly with the persitant data interface. I think 
> there is a flag someplace I think 'ora_pers_lob' for the select anway Cheers
> SQL as such. In addition, the parameters may not align with a column - 
> they could be args to a function in an insert/update/delete. As Merijn 
> discovered, many/most DBDs don't even return the column names in an 
> insert/update/delete statement (I know DBD::ODBC doesn't and Merijn 
> found DBD::Pg and DBD::Oracle doesn't either - none of which surprised 
> me as in DBD::ODBC's case the call to SQLDescribeParam does not return 
> column names).
> 
> Martin
> 
> >   > Date: Mon, 28 Jan 2013 14:31:44 +0100
> >> From: h.m.br...@xs4all.nl
> >> To: dbi-dev@perl.org
> >> Subject: bind_param () - did something change?
> >>
> >> I have a table with 5 BLOB's. BLOB's are easy in DBD::CSV and
> >> DBD::Unify, but they need "some help" in Oracle.
> >>
> >> I had a script that did load a table from a CSV file by first inserting
> >> all the records without the blob's and then update each blob in turn
> >> ((DBD::Oracle would not allow me to have 5 BLOB's in one insert or
> >> update).
> >>
> >> Given that c_ll + m_nr are a primary key, I had to change
> >>
> >> foreach my $blob (qw( w_tl w_xml0 w_xml1 w_xml2 w_xml3 attr )) {
> >>      print STDERR "Setting $blob in ll_verz_rel ...\n";
> >>      my $sth = $dbh->prepare ("update ll_verz_rel set $blob = ? where c_ll 
> >> = ? and m_nr = ?");
> >>      for (@llvr) {
> >>    $_->{$blob} or next;
> >>    $sth->bind_param (1, $_->{$blob}, { ora_type => ORA_BLOB   });
> >>    $sth->bind_param (2, $_->{c_ll},  { ora_type => ORA_NUMBER });
> >>    $sth->bind_param (3, $_->{m_nr},  { ora_type => ORA_NUMBER });
> >>    $sth->execute ();
> >>    }
> >>      }
> >>
> >> to
> >>
> >> foreach my $blob (qw( w_tl w_xml0 w_xml1 w_xml2 w_xml3 attr )) {
> >>      print STDERR "Setting $blob\tin ll_verz_rel ... ";
> >>      my $sth = prepar ("update ll_verz_rel set $blob = ? where c_ll = ? 
> >> and m_nr = ?");
> >>         $sth->bind_param (1, undef, { ora_type => ORA_BLOB, ora_field => 
> >> $blob });
> >>      for (@llvr) {
> >>    $_->{$blob} or next;
> >>    $sth->execute ($_->{$blob}, $_->{c_ll}, $_->{m_nr});
> >>    }
> >>      }
> >>
> >> to get it to insert the records. It FAILED to work without the
> >> ora_field addition
> >>
> >> Now in this case I don't really mind the change. It makes my code
> >> easier, but if I bind to one parameter only, the bind should/could know
> >> what to bind to, it shouldn't need the ora_field entry in the hashref.
> >> In above case, there is one ONE blob in the statement at any time, so
> >> there is no conflict at all, ever.
> >>
> >> -- 
> >> H.Merijn Brand  http://tux.nl   Perl Monger  http://amsterdam.pm.org/
> >> using perl5.00307 .. 5.17   porting perl5 on HP-UX, AIX, and openSUSE
> >> http://mirrors.develooper.com/hpux/        http://www.test-smoke.org/
> >> http://qa.perl.org   http://www.goldmark.org/jeff/stupid-disclaimers/
> >                                     
> 
                                          

Reply via email to