<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:10pt"><div style="font-family: times new roman,new york,times,serif; font-size: 10pt;">Ola Luis..<br>Aproveitando o seu codigo, tentei implementar o codigo abaixo, so para ver c funciona:<br><br><br>@data_hash_references=('2007-01-23 12:00');<br>$variavel='Nome''; -> essa variavel pode mudar...<br>$flag='BLABLA';<br>$id='33';<br>$table='tabela2';<br><br><br>my $sql = qq/ INSERT INTO $table(Nome,DataHora) VALUES(?,?) ON DUPLICATE KEY UPDATE ?=? /;<br><br>my ( $sth );<br><br>eval {<br>$sth = $dbh->prepare( $sql );<br><br>foreach my $data(@data_hash_references)<br>{<br><br> $sth->execute($id,$data,$variavel,$flag);<br><br>}<br>$sth->commit;<br>};<br>if( $@ )<br>{<br> $dbh->rollback;<br> die "Pau de base de dados:
$@";<br>}<br><br><br><br><br>So que ele da erro de Sintaxe quando ele atribui o ?=? eu acho q ele coloca uma aspas...<br><br>:D Alguem saberia dzer o pq??<br><br><br>Obnrigada + uma vez...<br><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">----- Mensagem original ----<br>De: Luis Motta Campos <luismottacampos@yahoo.co.uk><br>Para: Cascavel Perl Mongers <cascavel-pm@pm.org><br>Enviadas: Quinta-feira, 25 de Janeiro de 2007 11:31:56<br>Assunto: Re: [Cascavel-pm] Duvida $dbh->prepare<br><br><div>On Jan 25, 2007, at 12:15 PM, Patty Silva wrote:<br>> Bom estou tentando colocar 3 instrucoes de INSERT so que nao estou <br>> conseguindo..<br>> Isso eh possivel?<br><br> Não.<br><br>> my $sql=qq{INSERT into table1(Nome,DataHora) values <br>> ($nome,'$datahora') on duplicate key update <br>> $variavels='$result_flags'; };<br>> my $sql1=qq{INSERT
into table1(Nome,DataHora) values <br>> ($nome,'$datahora1') on duplicate key update <br>> $variavels='$result_flags'; };<br>> my $sql2=qq{INSERT into table1(Nome,DataHora) values <br>> ($nome,'$datahora2') on duplicate key update <br>> $variavels='$result_flags'; };<br>><br>> my $sql_insert=$sql."\n"..$sql1."\n".$sql_2;<br>> $sth = $dbh->prepare($sql_insert) || die $DBI::errstr;<br>> $sth->execute || die $DBI::errstr;<br><br><br> Você deveria implementar isso assim:<br><br> #!/usr/bin/perl<br> use warnings;<br> use strict;<br> use DBI;<br><br> my $dbh = DBI->connect( $dsn, $user, $passwd, { PrintError => 0, <br>RaiseError => 1, AutoCommit => 0 } )<br> or die "Pau na base de dados: [$DBI::errstr]\n";<br><br> ### enquanto isso, noutra parte do seu
programa...<br><br> my $sql = <<'SQL' ;<br>INSERT INTO table1( Nome, DataHora )<br> VALUES( ?, ? )<br> ON DUPLICATE KEY UPDATE ?=?<br>SQL<br><br> eval{<br> my $sth = $dbi->prepare( $sql );<br> foreach my $data ( @data_hash_references ){<br> $sth->execute( $data->{nome}, $data->{datahora}, $data-> <br>{variavels}, $data->{result_flags} );<br> }<br> $sth->commit;<br> };<br> if( $@ ){<br> $dbh->rollback;<br> die "Pau de base de dados: $@";<br> }<br><br>> OBS: se eu colocar somente o $sql funciona.. entao nao eh problema <br>> de sintaxe.. :)<br><br> Isso acontece por que você não pode usar ';' ou qualquer outro <br>limitador de instruções no
SQL.<br> Você tem de passar uma instrução de cada vez, ou o DBI não vai <br>conseguir retornar os erros e estados da base de dados para você.<br><br> Espero que meu exemplo seja claro o bastante.<br> Eu não conheço algumas das instruções SQL que você está usando, <br>mas presumi que elas funcionem desta forma...<br> Putamplexos.<br>--<br>Luis Motta Campos is software engineer,<br>perl fanatic evangelist, and amateur {cook, photographer}<br><br><br>_______________________________________________<br>Cascavel-pm mailing list<br>Cascavel-pm@pm.org<br><a target="_blank" href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></div></div><br></div></div><br>__________________________________________________<br>Fale com seus amigos de graça com o novo Yahoo! Messenger <br>http://br.messenger.yahoo.com/ </body></html>