具有LIKE条件的基于查询的数据库更改通知

时间:2018-06-12 11:10:50

标签: java oracle ojdbc

我正在尝试使用Java创建数据库更改侦听器,我想过滤掉对我来说不感兴趣的更改。我在https://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgnf.htm#JJDBC28815处遵循了Oracle文档和示例。我只对符合特定条件的插入和更新感兴趣,因此,为了注册监听器,我设置了监听器属性:

prop.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS, "true"); // Get row details
prop.setProperty(OracleConnection.DCN_QUERY_CHANGE_NOTIFICATION, "true"); // Register for query instead of object
prop.setProperty(OracleConnection.DCN_IGNORE_DELETEOP, "true");

我试图使用以下查询来注册侦听器,但由于某种原因它失败了:

SELECT
    WORKORDER_ID
FROM WO_HISTORY 
WHERE
    STATUS_NAME IN ('Planned', 'Confirmed', 'Started', 'Stopped', 'Finished', 'Validated')
    AND ACTION_NAME LIKE '% to %'

ORA-29970: Specified registration id does not exist失败。如果我用LIKE删除了第二个条件,它注册就好了,但我也收到了我对此不感兴趣的通知。

为什么我不能使用LIKE条件来进一步限制我收到的通知,是否有解决方法来限制结果?

或者,如果有办法根据收到的DatabaseChangeEvent获取更改的行的值,我可以在应用程序级别而不是数据库级别进行过滤,但到目前为止,我只找到了有关的信息。事件,连接和注册不允许我直接执行其他查询而无需重新连接到数据库,我试图避免这种情况,因为担心会对性能产生不利影响。

0 个答案:

没有答案