Sie können pl sql Callback-Mechanismus verwenden.
Zuerst erstellen Sie die Prozedur.
CREATE or replace PROCEDURE cbprocedure(
context RAW,
reginfo SYS.AQ$_REG_INFO,
descr SYS.AQ$_DESCRIPTOR,
payload varchar2,
payloadl NUMBER
) is
BEGIN
write_log('Resived message with id='||descr.msg_id);
/* 1).Dequge message using descr.msg_id with broser mode
2). Check attributes in xml
3). Do something
*/
END;
Für UDT (ADT) und XMLType Warteschlangen payload
varcahr2 ist.
payloadl
- Länge der Nutzlast.
payload
und payloadl
für beständige Warteschlange ist immer null
und 0
reginfo
- einige Informationen über die Registrierung
descr
- hier haben wir mehr Informationen über Nachrichten. descr.msg_id
ist PK in der Queue-Tabelle. Und wir können es verwenden, um eine Tabelle abzufragen oder eine Nachricht aus der Warteschlange zu entfernen.
Als nächstes müssen Sie das Verfahren registrieren. AQ$_REG_INFO Type
begin
DBMS_AQ.REGISTER (
SYS.AQ$_REG_INFO_LIST(
SYS.AQ$_REG_INFO(
'XML_QUEUE',
DBMS_AQ.NAMESPACE_AQ,
'plsql://CBPROCEDURE?PR=1',
HEXTORAW('FF')
)
),
1
);
END;
Hier select * from USER_SUBSCR_REGISTRATIONS;
Liste der abonnierten registriert.
select * from V$SUBSCR_REGISTRATION_STATS;
Diagnoseinformationen für Rückruf/Benachrichtigung.
Um die Registrierung aufzuheben, verwenden Sie DBMS_AQ.UNREGISTER mit den gleichen Parametern.
Jetzt, wenn neue Nachricht in die Warteschlange eingereiht wird. Oracla nennt die Prozedur "cbprocedure".
danke für alle Bemühungen, um dieses Beispiel für mich zu erstellen. Ich suche nach etwas, das der nächste Schritt ist. Wird nur über neue Nachrichten benachrichtigt, bei denen der XML-Teil der Payload mit einigen Kriterien übereinstimmt. Etwas wie: DECLARE Abonnent sys.aq $ _agent; begin Subskribent: = sys.aq $ _agent ('SUBSCRIBER_1', null, NULL); DBMS_AQADM.ADD_SUBSCRIBER (Warteschlangenname => 'MYUSER.MY_LOVELY_Q', Abonnent => Abonnent, Regel => 'tab.user_data.myXMLAttr'); Ende; Dieser Abonnent wird nur benachrichtigt, wenn der XML-Teil der Payload den Kriterien entspricht. –
shindigo
Verstehen Sie und Sie können dies tun. 'ADD_SUBSCRIBER (... rule => 'tab.user_data.myXMLAttr.extract (' '/ x_paTH TO ELEMENT' '). GetStringVal() =' 'SOMETHING' '') '' –