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

How to load the .sql file from perl script and execute the sql commands in the perl script

我必须在 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 脚本中显示输出,例如 table created

如果我没看错你的问题,你最大的挑战是将文件分解成单独的 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;
}

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

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,
);

根据需要更改 DBI dsn(同时添加 userpassword 参数)