|
Re: stored procedures: msg#00040db.mysql.perl
To save the time, wait until 5.0.21 is fixed http://bugs.mysql.com/bug.php?id=19857 --w On Wed, May 24, 2006 at 08:11:05PM -0500, Richard Fogle wrote: > Martin, > > I've tested this with 3.0004_1 and you're right, I can handle the result > sets now. Thank you for pointing me in the right direction. I don't > monitor the DBI list, just this one - perhaps I should monitor both.. Had > no idea this was out there. Anyone reading this can find the release here: > > http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0004_1.tar. > gz > > This will handle stored procedures as I said it wouldn't in my previous > statements. This is great! My C is a bit rusty, but I certainly wouldn't > be above lending a hand. I know there are quite a few people typing 'mysql > perl stored procedures' in google and the like, would be nice to be able to > get the word out. > > Thanks for the response and thanks to Patrick for the release. > > R > > > On 5/24/06 12:23 PM, "Martin J. Evans" <martin.evans@xxxxxxxxxxxx> wrote: > > > On 24-May-2006 Richard Fogle wrote: > >> Martin - thanks for responding, would you please point to an example where > >> a > >> stored procedure will return a result set that DBD::mysql enables us loop > >> through and/or assign to an array/ref? > > > > perl -e 'use DBI; $dbh = DBI->connect("dbi:mysql:test", "xxx", "yyy"); $sql > > = > > q/call p_next_sequence()/; $sth = $dbh->prepare($sql); $sth->execute; while > > (@row = $sth->fetchrow_array) {print join(",", @row),"\n";}' > > > > outputs: > > > > 7 > > > > > >> Also, please post an example of how > >> to handle OUT vars in the procedure. No problems in RTFM, just can't find > >> any and I'm not alone. > > > > DBD::mysql does not do bind_param_inout, I was answering the statement of > > DBD::mysql does not support procedures not DBD::mysql does not support out > > parameters. > > > > You can immitate them with DBD::mysql by doing a select x,y at the end of > > the > > procedure and using more results. > > > >> We've been able to call stored procedures via $dbh->do("CALL foo(bar)") and > >> the like, and see if any rows changed, but nothing that would handle the > >> result sets which is about 75% of the functionality needed. Thus stored > >> procedures not being supported. $sth->dump_results, while useful to a > >> point, isn't a very good example. Again, if I'm wrong please let me know, > >> I'd really like to use this. Thanks! > > > > dump_results just dumps the rows in the result-set - it is just a wrapper > > around fetchrow_*. > > > > Isn't the above example a result-set in you terms? The procedure is: > > > > create procedure p_next_sequence() > > BEGIN > > UPDATE sequence SET id=LAST_INSERT_ID(id+1); > > select LAST_INSERT_ID(); > > END$ > > > > > >> I must've missed the notice going out on this list that there were new > >> releases, I'll go download and check them out. > > > > I don't think you did but you need to keep your eye on CPAN. > > > > OTOH, Richard Sketon posted to this list about 3.0004_1 only a few days ago > > (see > > Problem testing DBD::mysql 3.0004) so 3.0004 is not unknown on this list > > even > > if > > there was not a formal announcement. Note the _1 denoting a development > > release. > > > > Personally, I have always viewed dbi-users list as the definitive place for > > DBI > > and DBD but its volume is a lot more than this list. > > > > I suspect the reason there are new releases of DBD::mysql is that recently a > > few > > people posted patches to fix issues and add features to Patrick who cannot > > reasonably be expected to do everything himself. I know not everyone can > > work > > out a fix or add features but I see little-to-none patches posted on this > > list > > and that is generally what makes open source move. > > > > If you post an example of a short procedure that uses output parameters that > > you'd like to use I may find some time to take a quick look at doing > > something > > with it but that is not a promise. > > > > Martin > > -- > > Martin J. Evans > > Easysoft Ltd, UK > > http://www.easysoft.com > > > > > > > >> R > >> > >> > >> On 5/24/06 10:35 AM, "Martin J. Evans" <martin.evans@xxxxxxxxxxxx> wrote: > >> > >>> > >>> On 24-May-2006 Richard Fogle wrote: > >>>> Hey Mark, > >>>> > >>>> Stored procedures still isn't supported. > >>> > >>> Don't agree. Here is one working: > >>> > >>> perl -e 'use DBI; $dbh = DBI->connect("dbi:mysql:test", "xxx", "yyy"); > >>> $sql > >>> = > >>> q/call p_next_sequence()/; $sth = $dbh->prepare($sql); $sth->execute; > >>> $sth->dump_results;' > >>> > >>> '2' > >>> 1 rows > >>> > >>> MySQL client 5.0.15 > >>> DBD::Mysql 3.0004 > >>> > >>> They also work in DBD::ODBC with myodbc - I use them all the time. > >>> > >>>> I asked this question some time ago. > >>>> At this point, I'm not sure if DBD::mysql is still under active > >>>> development, > >>> > >>> It is. > >>> > >>>> it's so far behind PHP/Java. > >>> > >>> How is it behind PHP and Java? > >>> > >>> To my knowledge all of the DBI interface is supported (there may be a few > >>> minor > >>> exceptions I've not found yet) and some additional DBD::mysql methods also > >>> exist. > >>> > >>>> Couldn't get much of an answer on > >>>> the mysql developer boards either, except that someone at MySQL maintains > >>>> the code (I think part time). If anyone has more information or if I'm > >>>> wrong I'd really like to hear it, this is preventing me from using perl > >>>> for > >>>> a large project. > >>> > >>> DBD::mysql is actively maintained by Patrick Galbraith at mysql. There > >>> have > >>> been 2 development releases in the last 3 weeks: > >>> > >>> http://search.cpan.org/~capttofu/DBD-mysql-3.0004/ > >>> > >>> Martin > >>> -- > >>> Martin J. Evans > >>> Easysoft Ltd, UK > >>> http://www.easysoft.com > >>> > >>> > >>>> R > >>>> > >>>> > >>>> On 5/23/06 11:27 PM, "Mark Strong" <mstrong@xxxxxxxx> wrote: > >>>> > >>>>> Can't get em to work correctly > >>>>> > >>>>> See example. > >>>>> > >>>>> Which works fine as it is, but comment out > >>>>> > >>>>> $dbh->do('drop procedure if exists someproc') or die $DBI::errstr; > >>>>> > >>>>> and > >>>>> > >>>>> $dbh->do("$sql") or die $DBI::errstr; > >>>>> > >>>>> After all we already created it on the first run, but it doesn't work > >>>>> correctly with those lines commented out. > >>>>> > >>>>> This is with DBD-mysql-3.0004_1.tar.gz, DBI 1.50, mysql > >>>>> libs from v 5.0.20a > >>>>> > >>>>> What am I doing wrong? And a more complex example that actually selects > >>>>> some data from a table (using a stored procedure) and returns it, only > >>>>> returns the column headings, but for both (using ethereal) I can see the > >>>>> data is returned from the server to the client (perl DBD), but I can't > >>>>> seem to successfully retrieve it > >>>>> > >>>>> > >>>>> Mark. > >>>>> > >>>>> > >>>>> example > >>>>> #!/usr/bin/perl -w > >>>>> > >>>>> use DBI; > >>>>> > >>>>> $db = 'db5'; > >>>>> $host = 'mas-data01'; > >>>>> $user = 'root'; > >>>>> $password = 'frednirk'; > >>>>> > >>>>> my ($rowset, $i); > >>>>> > >>>>> $dbh = DBI->connect("DBI:mysql:database=$db;host=$host", > >>>>> $user, $password, {RaiseError => 1}); > >>>>> > >>>>> $dbh->do('drop procedure if exists someproc') or die $DBI::errstr; > >>>>> > >>>>> $sql = q{create procedure someproc() deterministic > >>>>> begin > >>>>> declare a,b,c,d int; > >>>>> set a=1; > >>>>> set b=2; > >>>>> set c=3; > >>>>> set d=4; > >>>>> select a, b, c, d; > >>>>> select d, c, b, a; > >>>>> select b, a, c, d; > >>>>> select c, b, d, a; > >>>>> end}; > >>>>> > >>>>> $dbh->do("$sql") or die $DBI::errstr; > >>>>> > >>>>> $sth=$dbh->prepare('call someproc()') or die $DBI::err.": > >>>>> ".$DBI::errstr; > >>>>> $sth->execute() or die DBI::err.": ".$DBI::errstr; $rowset=0; > >>>>> do { > >>>>> print "\nRowset > >>>>> ".++$i."\n---------------------------------------\n\n"; > >>>>> foreach $colno (0..$sth->{NUM_OF_FIELDS}-1) { > >>>>> print $sth->{NAME}[$colno]."\t"; > >>>>> } > >>>>> print "\n"; > >>>>> while (@row= $sth->fetchrow_array()) { > >>>>> foreach $field (0..$#row) { > >>>>> print $row[$field]."\t"; > >>>>> } > >>>>> print "\n"; > >>>>> } > >>>>> } until (!$sth->more_results); > >>>>> > >>>>> $sth->finish(); > >>>>> $dbh->disconnect(); > >>>>> exit(0); > >>>>> > >>>>> > >>>>> This e-mail message is for the sole use of the intended recipient(s) and > >>>>> may > >>>>> contain confidential and privileged information of Transaction Network > >>>>> Services. > >>>>> Any unauthorized review, use, disclosure or distribution is prohibited. > >>>>> If > >>>>> you > >>>>> are not the intended recipient, please contact the sender by reply > >>>>> and > >>>>> destroy all copies of the original message. -- MySQL Perl Mailing List For list archives: http://lists.mysql.com/perl To unsubscribe: http://lists.mysql.com/perl?unsub=gcdmp-msql-mysql-modules@xxxxxxxxxxx |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | RE: stored procedures: 00040, Martin J. Evans |
|---|---|
| Next by Date: | Re: stored procedures: 00040, Mark Strong |
| Previous by Thread: | Re: stored proceduresi: 00040, Richard Fogle |
| Next by Thread: | stored procedures: 00040, Mark Strong |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |