我必须在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脚本中的输出,如表创建的
答案 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
参数)