Exécuter le fichier SQL, Perl
Nous avons un script Perl qui exécute SQL et met les données dans la table.
Maintenant, au lieu de fournir une instruction SQL unique, nous voulons passer des tas d'entre eux de les mettre ensemble dans une .fichier sql. Nous savons que notre programme va échouer, car il s'attend à une seule instruction SQL, pas s tas d'entre eux (que trop de un .fichier sql). Comment pouvons-nous le faire fonctionner avec un .fichier sql (le fait d'avoir plusieurs instructions INSERT?). Nous sommes à l'aide de l'DBI paquet.
Un petit extrait de code:
$sth = $dbh->prepare("/home/user1/tools/mytest.sql");
$sth->execute || warn "Couldn't execute statement";
$sth->finish();
Vous devez vous connecter pour publier un commentaire.
Pas exactement ce que vous voulez...
Une fois que vous créez un DBI objet, vous pouvez l'utiliser encore et encore. Ici, je suis en train de lire SQL instruction après instruction SQL à partir d'un fichier et le traitement de chacun et de tous dans l'ordre:
Avis que je suis en train de mettre l'instruction SQL dans la
prepare
et non le nom de fichier qui contient l'instruction SQL. Peut-être que votre problème?$sqlfile = "C:/BuildScript/YellowBox_Script/YellowBox_Core_Script/db.sql";open(SQL, "$sqlfile") or die("Can't open file $sqlFile for reading"); while ($sqlStatement = <SQL>) { $sth = $dbh->prepare($sqlStatement) or die ("Can't prepare $sqlStatement"); $sth->execute() or die ("Can't execute $sqlStatement"); }
Vous n'avez pas besoin de perl pour ce tout. Suffit d'utiliser la ligne de commande de mysql client:
mysql -h [hostname] -u[username] -p[password] [database name] < /home/user1/tools/mytest.sql
remplacer le [variables] avec votre information.
Note pas d'espace après -u ou -p. Si votre serveur mysql est en cours d'exécution sur la même machine, vous pouvez omettre-h[nom d'hôte] (la valeur par défaut est localhost)
Il y a une sorte de solution de contournement pour DDL. Vous devez slurp fichier SQL d'abord et puis placez-le contenu en
BEGIN ... END;
mots-clés. Comme:Ce sous-programme permet d'exécuter DDL (SQL) les scripts avec plusieurs instructions à l'intérieur (p. ex. base de données vide).
Voici comment je l'ai fait. Dans mon cas, je n'ai pas supposer un SQL à la ligne, je suppose, mon exemple est un peu mieux 🙂
get_sql_from_file
retour le SQL, plutôt que de définir une variable globale? Les variables globales sont mauvais.