in reply to Re: Increase a value inside MySQL query using perl
in thread Increase a value inside MySQL query using perl
SET @a:=10; UPDATE table SET table.ID=@a:=@a+1 WHERE table.ID=5
In sqlite I employ limit
#!/usr/bin/perl -- use strict; use warnings; use DBI; use DBD::SQLite; use Data::Dump qw/ dd /; unlink 'goner.sqlite'; my $dbh = DBI->connect( "DBI:SQLite:database=goner.sqlite", undef, undef, {qw/RaiseError 1/} ); eval { $dbh->do('CREATE TABLE NameId ( ID INTEGER , Name TEXT );'); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('1','bar');!); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('2','bar');!); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FEE');!); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FII');!); $dbh->do(q!INSERT INTO NameID ( ID, Name ) VALUES ('5','FOO');!); } or warn "$@"; dd( $dbh->selectall_arrayref('select * from NameID' ) ); dd( $dbh->selectrow_array(q{ select COUNT(*) from NameID WHERE ID='5' + } ) ); #~ http://www.sqlite.org/compile.html#enable_update_delete_limit #~ https://www.sqlite.org/lang_update.html #~ https://dev.mysql.com/doc/refman/5.0/en/update.html my $sql = qq{ UPDATE NameID SET ID=? WHERE ID='5' LIMIT 1 }; my( $count ) = $dbh->selectrow_array(q{ select COUNT(*) from NameID W +HERE ID='5' } ); my $nid = 10; while( $count ){ dd({ rowsaffected => $dbh->do( $sql, {}, $nid ) }); dd( $dbh->selectall_arrayref('select * from NameID' ) ); $nid++; $count--; } undef $dbh; unlink 'goner.sqlite'; __END__ [[1, "bar"], [2, "bar"], [5, "FEE"], [5, "FII"], [5, "FOO"]] 3 { rowsaffected => 1 } [[1, "bar"], [2, "bar"], [10, "FEE"], [5, "FII"], [5, "FOO"]] { rowsaffected => 1 } [[1, "bar"], [2, "bar"], [10, "FEE"], [11, "FII"], [5, "FOO"]] { rowsaffected => 1 } [[1, "bar"], [2, "bar"], [10, "FEE"], [11, "FII"], [12, "FOO"]]
|
|---|