Events 如何立即执行事件
我的数据库中有一个存储过程,它执行一个查询并用结果填充一个表 由于查询结果的循环需要花费大量时间,因此我尝试通过语句发布事件 Firebird中事件的一个(合理)缺点是在事务提交()之前不会执行它们: 事件发布后,订阅该事件的每个客户端都将收到通知。为了实现这一点,Firebird的一个名为事件管理器的单独组件正在后台运行,并维护它们注册接收的应用程序和事件的列表。只有在提交运行触发器或存储过程的事务时,才会将事件发送到事件管理器 <>但是我正在执行一个耗时的存储过程。因此,我需要立即执行事件 因此,我尝试使用发布事件。不幸的是,这没有帮助,因为 自治事务与其父事务具有相同的隔离级别 我的下一个方法是使用with options和实现更大的自主性。为此,我编写了一个存储过程:Events 如何立即执行事件,events,stored-procedures,transactions,firebird,firebird2.5,Events,Stored Procedures,Transactions,Firebird,Firebird2.5,我的数据库中有一个存储过程,它执行一个查询并用结果填充一个表 由于查询结果的循环需要花费大量时间,因此我尝试通过语句发布事件 Firebird中事件的一个(合理)缺点是在事务提交()之前不会执行它们: 事件发布后,订阅该事件的每个客户端都将收到通知。为了实现这一点,Firebird的一个名为事件管理器的单独组件正在后台运行,并维护它们注册接收的应用程序和事件的列表。只有在提交运行触发器或存储过程的事务时,才会将事件发送到事件管理器 但是我正在执行一个耗时的存储过程。因此,我需要立即执行事件 因此
CREATE PROCEDURE EXECUTE_STATEMENT_EXTERNAL (
STATEMENTTEXT TYPE OF DMN_SQLSTATEMENTS)
AS
DECLARE VARIABLE ATTACHMENT_NAME TYPE OF DMN_RDB_ATTACHMENTNAME;
begin
select MON$ATTACHMENT_NAME
from mon$attachments
where MON$ATTACHMENT_ID = CURRENT_CONNECTION
into :attachment_name;
execute statement statementtext
with autonomous transaction
on external '127.0.0.1:' || :attachment_name
as user '<my user name>'
password '<my password>';
end
创建过程执行\u语句\u外部(
语句DMN的文本类型(SQL语句)
作为
声明DMN\u RDB\u ATTACHMENTNAME的变量ATTACHMENT\u NAME类型;
开始
选择MON$ATTACHMENT\u NAME
来自mon$附件
其中MON$ATTACHMENT\u ID=当前\u连接
分为:附件名称;
执行语句语句文本
具有自主事务
关于外部“127.0.0.1:”| |:附件|名称
作为用户“”
密码“”;
结束
不幸的是,这也不起作用。此外,它显著降低了调用存储过程的速度
那么,在我尝试了这么多之后,是否有任何东西可以让事件立即执行?有趣的是,我本以为这会奏效。您使用的是SuperServer、Classic还是SuperClassic?我通常使用ClassicServer模式。我建议您也可以咨询Firebird支持或Firebird-devel邮件列表。