À (at) 21 Oct 2004 20:52:25 GMT, (Pierre Génieys) écrivait (wrote):
je suis étonné du comportement de la fonction execute du module DBI
j'ai une requête SQL sur plusieurs lignes
$sql = "CREATE TABLES machin INSERT INTO table machin values ...; INSERT INTO table machin values ...; INSERT INTO table machin values ...;";
Ce n'est pas *une* requête SQL sur plusieurs lignes. C'est *plusieurs* requêtes SQL (une par ligne) !
lorsque j'execute cette requête avec DBI
$sth = $dbh->prepare($query) or die "..."; $sth->execute or die "...";
une seule ligne est exécutée !! est ce normal ?
oui.
y a t il une solution ?
Exécutez vos requêtes SQL une par une.
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
NOSPAM_p_genieys
Paul Gaborit wrote:
Ce n'est pas *une* requête SQL sur plusieurs lignes. C'est *plusieurs* requêtes SQL (une par ligne) !
Je suis d'accord il s'agit de plusieurs requêtes SQL
Exécutez vos requêtes SQL une par une.
L'idée est d'exécuter plusieurs requêtes dans une transaction pour des raisons de performances Imaginons qu'on un fichier de requêtes SQL:
BEGIN TRANSACTION; une centaines de requêtes SQL (INSERT); COMMIT TRANSACTION;
Le comportement de la fonction execute n'est pas assez clair pour moi
Par exmple :si on essaye d'excuter le fichier SQL ligne par ligne comme suit
... while ($sql = <SQL> ) { $sth->execute($sql); }
Est ce que chaque requête est exécutée au moment où on appelle la fonction execute ou toutes les lignes seront exécutées (ensemble) lors du dernier appel à la fonction execute c.à.d avec $sql = "COMMIT TRANSACTION" ( dernière ligne) le flag AutoCommit du module DBI étant = 0 Merci de votre aide. Pierre.
----- posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le web. Pour signaler un abus:
Paul Gaborit wrote:
Ce n'est pas *une* requête SQL sur plusieurs lignes. C'est *plusieurs*
requêtes SQL (une par ligne) !
Je suis d'accord il s'agit de plusieurs requêtes SQL
Exécutez vos requêtes SQL une par une.
L'idée est d'exécuter plusieurs requêtes dans une transaction pour des
raisons
de performances
Imaginons qu'on un fichier de requêtes SQL:
BEGIN TRANSACTION;
une centaines de requêtes SQL (INSERT);
COMMIT TRANSACTION;
Le comportement de la fonction execute n'est pas assez clair pour moi
Par exmple :si on essaye d'excuter le fichier SQL ligne par ligne comme
suit
...
while ($sql = <SQL> ) {
$sth->execute($sql);
}
Est ce que chaque requête est exécutée au moment où on appelle la fonction
execute ou toutes les lignes seront exécutées (ensemble) lors du dernier
appel à la fonction execute c.à.d avec $sql = "COMMIT TRANSACTION"
( dernière ligne)
le flag AutoCommit du module DBI étant = 0
Merci de votre aide.
Pierre.
-----
posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le
web. Pour signaler un abus: abuse@usenetgratuit.com
Ce n'est pas *une* requête SQL sur plusieurs lignes. C'est *plusieurs* requêtes SQL (une par ligne) !
Je suis d'accord il s'agit de plusieurs requêtes SQL
Exécutez vos requêtes SQL une par une.
L'idée est d'exécuter plusieurs requêtes dans une transaction pour des raisons de performances Imaginons qu'on un fichier de requêtes SQL:
BEGIN TRANSACTION; une centaines de requêtes SQL (INSERT); COMMIT TRANSACTION;
Le comportement de la fonction execute n'est pas assez clair pour moi
Par exmple :si on essaye d'excuter le fichier SQL ligne par ligne comme suit
... while ($sql = <SQL> ) { $sth->execute($sql); }
Est ce que chaque requête est exécutée au moment où on appelle la fonction execute ou toutes les lignes seront exécutées (ensemble) lors du dernier appel à la fonction execute c.à.d avec $sql = "COMMIT TRANSACTION" ( dernière ligne) le flag AutoCommit du module DBI étant = 0 Merci de votre aide. Pierre.
----- posté via http://www.usenetgratuit.com/ plus de 40 000 newsgroups sur le web. Pour signaler un abus:
Laurent Wacrenier
Pierre Génieys écrit:
Le comportement de la fonction execute n'est pas assez clair pour moi
execute envoie la commande au serveur et ne commitera pas si autocommit n'est pas vrai.
Pierre Génieys <NOSPAM_p_genieys@yahoo.fr> écrit:
Le comportement de la fonction execute n'est pas assez clair pour moi
execute envoie la commande au serveur et ne commitera pas si
autocommit n'est pas vrai.