如何从perl脚本加载.sql文件并在perl脚本中执行sql命令

时间:2015-05-13 05:56:49

标签: sql perl oop dbi

我必须在perl脚本中加载SQL文件并执行SQL命令并仅在perl文件中显示输出。

方案: test1.sql文件包含此格式的SQL命令

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);

现在我想在不使用文件的情况下加载test1.sql并执行此SQL 并且还显示Perl脚本中的输出,如表创建的

2 个答案:

答案 0 :(得分:3)

如果我正确地阅读了您的问题,那么您面临的最大挑战是将文件拆分为单独的sql语句,SQL::SplitStatement是有用的,但要注意它不是防弹。

这是一个如何实现这一目标的例子;

#!/usr/bin/env perl
use strict;
use warnings;
use diagnostics;

use DBI;
use File::Slurp;
use SQL::SplitStatement;

my $sql_blob = read_file( 'test1.sql' ) ;
my @sql_list = SQL::SplitStatement->new()->split($sql_blob);

my $dbh = DBI->connect( "dbi:mysql:my_database:localhost:3306", "username", "password" );
foreach my $sql (@sql_list) {
  print 'Executing ', $sql;
  $dbh->do($sql) or print "Can't do ", $dbh->errstr;
}

答案 1 :(得分:1)

CPAN模块DBIx::RunSQL可能有帮助:

FileStream.seekp (std::ios::end);

根据需要更改DBI dsn(同时添加use strict; use warnings; use DBIx::RunSQL; my $test_dbh = DBIx::RunSQL->create( dsn => 'dbi:SQLite:dbname=:memory:', sql => 'test1.sql', force => 1, verbose => 1, ); user参数)