我想在插入调用 Perl 脚本后编写触发器,如下代码:
create trigger example after insert on radacct
for each row begin
set @rs=sys_exec(CONCAT('/usr/bin/perl','/usr/bin/p2.pl'));
end
我的触发器成功运行,但我的 Perl 脚本没有运行,@rs
插入后的值为零。
这可能无法回答您的问题,但我将提供另一种方法,它不包括 UDF。
创建填充运行队列而不是调用 UDF 的触发器。让 perl 脚本轮询并清空该队列,而不是从触发器中调用。这使得系统更加健壮。
将 UDF 添加到触发器时,您会损害数据库并引入可能不会在与正常触发器相同的可预测时间内运行的外部部分。请注意,整个通话都在等待您的 sys_exec 完成。
首先,我同意安德烈亚斯上面的回答。
触发器通常在数据提交后触发。您可以通过在末尾添加 ("&") 来使其工作/运行,以便让触发器在后台运行它。就像是:
set @rs=sys_exec(CONCAT('/usr/bin/perl','/usr/bin/p2.pl',' &'));
尝试这样做。这个对我有用。
create trigger example after insert on radacct
for each row begin
set @rs=sys_exec(CONCAT('/usr/bin/perl /usr/bin/p2.pl &'));
end