Sec*_*ear 6 mysql perl dbi delimiter
我需要能够在DBI上发出"创建触发器".我似乎无法让delimiter命令工作.任何人都可以找到一种方法来使这项工作?
码:
use strict;
use DBI;
my $dbargs = {mysql_auto_reconnect => 1,
AutoCommit => 0,
RaiseError => 1,
ShowErrorStatement => 1};
my $dsn = "DBI:mysql:database=xdisp;host=cycldev06";
my $dbh = DBI->connect( $dsn, 'sqluser', '', $dbargs);
my $sql = qq{
DELIMITER //
CREATE TRIGGER `hardware_last_status` BEFORE UPDATE
ON `hardware` FOR EACH ROW BEGIN
IF NEW.status != OLD.status AND NEW.last_status = OLD.last_status THEN
SET NEW.last_status = OLD.status;
END IF;
END
//
};
$dbh->do($sql);
Run Code Online (Sandbox Code Playgroud)
结果:
DBD::mysql::db do 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 'DELIMITER //
CREATE TRIGGER `hardware_last_status` BEFORE UPDATE
' at line 1 at test.pl line 24.
Run Code Online (Sandbox Code Playgroud)
并且SQL在MySQL命令行中运行良好.
delimiter
客户端程序使用该命令来确定SQL语句的限制.它(几乎可以肯定)没有被服务器本身看到.因此,在Perl + DBI中,您应该省略分隔符.因此,您应该执行的命令是:
my $sql = qq{
CREATE TRIGGER `hardware_last_status` BEFORE UPDATE
ON `hardware` FOR EACH ROW BEGIN
IF NEW.status != OLD.status AND NEW.last_status = OLD.last_status THEN
SET NEW.last_status = OLD.status;
END IF;
END
};
Run Code Online (Sandbox Code Playgroud)