在perl中运行多个sql脚本

时间:2013-11-08 05:28:38

标签: mysql perl dbi

我有5个.sql脚本,用于创建表并插入表中。 。我想将它们作为PERL中的事务一起运行。 我在Google和SO中搜索过它,但只有我能找到有关使用Batch脚本运行脚本的信息。 我不知道如何使用PERL DBI作为事务一起运行脚本。 谁能请帮忙。 我是perl和mysql的新手,我不知道该怎么做。

根据Barmar的建议,我正在努力做到这一点:

#!/usr/bin/perl
use strict;
use warnings;
use DBI;
use Data::Dumper;

my $user="root";
my $password="M3m01r!@#";
my $db="DBI:$driver:database=$database";

my $dbh = DBI->connect("DBI:mysql:database=testdb;mysql_socket=/tmp/mysql.sock",$user,$password) or die "could not connect $DBI::errstr\n";
my $st = $dbh->prepare("mysql -u root -p < rr.sql") or die "$DBI::errstr\n";
$st->execute();

但它会抛出此错误

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'mysql -u root -p < rr.sql' at line 1 at dbi.pl line 15.

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

 ############################################################################
 my $st = $dbh->prepare("mysql -u root -p < rr.sql") or die "$DBI::errstr\n";
 ############################################################################

第2行是你被打破的地方。

您要准备的字符串应该是实际的SQL。你已经为它提供了一个用于运行mysql的shell命令。因此,请将rr.sql的内容放入变量中(将程序读入或复制/粘贴),然后对变量调用prepare()。

 my $ferret_query = "select name, dob, type from ferret order by dob";
 my $sth = $dbh->prepare($ferret_query);
 $sth->execute()