我能否在表格中更改或添加某些行时设置钩子,并在发生此类事件时以某种方式得到通知?我查阅了网络,但只找到了管道的相关内容。但是,当管道消息被发送时,没有立即获取管道消息的方法,只能定期尝试接收。
我能否在表格中更改或添加某些行时设置钩子,并在发生此类事件时以某种方式得到通知?我查阅了网络,但只找到了管道的相关内容。但是,当管道消息被发送时,没有立即获取管道消息的方法,只能定期尝试接收。
从数据库实现观察者模式通常应该避免。
为什么?它依赖于供应商专有的(非标准)技术,促进了数据库供应商锁定和支持风险,并导致了一些膨胀。从企业角度来看,如果没有受到控制地实施,它可能看起来像“臭鼬工程”——以不寻常的方式实现通常由应用程序和集成模式和工具覆盖的行为。如果在细粒度级别上实现,它可能会导致与巨大量的不可预测的通信和处理紧密耦合的微小数据更改,影响性能。机器中的额外齿轮可能是一个额外的断点——它可能对操作系统、网络和安全配置敏感,或者供应商技术中可能存在安全漏洞。
如果您正在观察由您的应用程序管理的事务数据:
如果用户直接修改数据库中的主数据,则:
如果您正在观察由另一个应用程序管理的事务数据(共享数据库集成),或者使用数据级别的集成(例如ETL)为您的应用程序提供数据:
在数据库中,触发器是您需要的。您可以在插入、删除、更新或任意组合时运行任意PL/SQL。
如果您需要事件传播到数据库外部,您需要一种方法从您的PL/SQL触发器调用到外部应用程序。一些可能的选项包括:
看看DBMS_ALERT、DBMS_PIPE或者(最好的选择)AQ(高级队列),它是Oracle内部的消息系统。Oracle的AQ有自己的API,但也可以像Java JMS提供程序一样处理。
还有一些技术,如Stream或(XStream),但这些技术相当复杂。