-- This script is just an example, and is provided as-is with no guarantees. CREATE TYPE AQ_MESSAGE_TYPE AS OBJECT (ID VARCHAR2(30), INFO VARCHAR2(200)); / EXEC DBMS_AQADM.CREATE_QUEUE_TABLE(QUEUE_TABLE => 'INFO', QUEUE_PAYLOAD_TYPE => 'AQ_MESSAGE_TYPE'); EXEC DBMS_AQADM.CREATE_QUEUE(QUEUE_NAME => 'AQ_MESSAGE_QUEUE', QUEUE_TABLE => 'INFO'); EXEC DBMS_AQADM.START_QUEUE(QUEUE_NAME => 'AQ_MESSAGE_QUEUE'); CREATE OR REPLACE FUNCTION ENQUEUE_AQ_MESSAGE_QUEUE(PAYLOAD IN AQ_MESSAGE_TYPE) RETURN RAW AS PROPERTIES DBMS_AQ.MESSAGE_PROPERTIES_T; MSGID RAW(16); OPTIONS DBMS_AQ.ENQUEUE_OPTIONS_T; BEGIN DBMS_AQ.ENQUEUE('AQ_MESSAGE_QUEUE', OPTIONS, PROPERTIES, PAYLOAD, MSGID); RETURN MSGID; END; / CREATE OR REPLACE FUNCTION DEQUEUE_AQ_MESSAGE_QUEUE(PAYLOAD OUT AQ_MESSAGE_TYPE) RETURN RAW AS PROPERTIES DBMS_AQ.MESSAGE_PROPERTIES_T; OPTIONS DBMS_AQ.DEQUEUE_OPTIONS_T; MSGID RAW(16); NOTHING_TO_DEQUEUE EXCEPTION; PRAGMA EXCEPTION_INIT (NOTHING_TO_DEQUEUE, -25228); BEGIN OPTIONS.WAIT := DBMS_AQ.NO_WAIT; DBMS_AQ.DEQUEUE('AQ_MESSAGE_QUEUE', OPTIONS, PROPERTIES, PAYLOAD, MSGID); RETURN MSGID; EXCEPTION WHEN NOTHING_TO_DEQUEUE THEN RETURN NULL; END; /