如何立即执行活动

时间:2016-11-18 15:08:42

标签: events stored-procedures transactions firebird firebird2.5

我的数据库中有一个存储过程,它执行查询并使用结果填充表。

由于查询结果的循环需要花费大量时间,因此我尝试通过post_event声明发布事件

Firebird事件的一个(合理的)缺点是它们在事务提交之前不会被执行(see this PDF):

  

发布事件后,订阅它的每个客户都将收到通知。为了实现这一点,一个名为Event Manager的单独Firebird组件在后台运行,并维护他们注册接收的应用程序和事件列表。只有在运行触发器或存储过程的事务被提交时,才会将事件发送到事件管理器。

但我正在执行一个耗时的存储过程。所以,我需要立即执行事件。

因此,我尝试使用in autonomous transaction do 发布事件。不幸的是,这没有用,因为

  

自治事务与父事务具有相同的隔离级别。

我的下一个方法是使用execute statement选项with autonomous transactionon external 使更加自主。为此,我写了一个存储过程:

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

不幸的是,这也行不通。此外,它会显着减慢调用存储过程。

所以,在我尝试过的所有内容之后,是否有任何东西可以让事件立即执行?

0 个答案:

没有答案