SET VERIFY OFF
WHENEVER SQLERROR EXIT FAILURE ROLLBACK;
CREATE OR REPLACE PACKAGE BODY OTNCMS_ADMIN IS
unexpected_error EXCEPTION;
FUNCTION enqueue_privilege_request ( xmlRequest IN SYS.XMLType ) RETURN RAW AS
eopt DBMS_AQ.ENQUEUE_OPTIONS_T;
mprop DBMS_AQ.MESSAGE_PROPERTIES_T;
messageId RAW(16);
BEGIN
DBMS_AQ.ENQUEUE( queue_name => 'privilege_queue',
enqueue_options => eopt,
message_properties => mprop,
payload => xmlRequest ,
msgid => messageId );
COMMIT;
RETURN messageId;
END enqueue_privilege_request;
FUNCTION process_message( messageId RAW, acceptRequest VARCHAR2 ) RETURN BINARY_INTEGER AS
dopt DBMS_AQ.DEQUEUE_OPTIONS_T;
mprop DBMS_AQ.MESSAGE_PROPERTIES_T;
resourceloc VARCHAR2(1000);
ace VARCHAR2(4000);
privXML XMLType;
requestXML XMLType;
deq_msgid RAW(16);
status BINARY_INTEGER;
BEGIN
dopt.msgid := messageId;
dopt.wait := DBMS_AQ.NO_WAIT;
deq_msgid := messageId;
DBMS_AQ.DEQUEUE( queue_name => 'privilege_queue',
dequeue_options => dopt,
message_properties => mprop,
payload => requestXML,
msgid => deq_msgid );
IF acceptRequest = 'Y' THEN
ace := '<ace xmlns="http://xmlns.oracle.com/xdb/acl.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dav="DAV:"
xsi:schemaLocation="http://xmlns.oracle.com/xdb/acl.xsd
http://xmlns.oracle.com/xdb/acl.xsd
DAV:http://xmlns.oracle.com/xdb/dav.xsd">';
ace := ace || requestXML.extract('//Request/Ace/*').getStringval() || '</ace>';
resourceloc := requestXML.extract('//Request/ResourceLoc/text()').getstringval();
privXML := SYS.XMLType.createXML( ace );
status := DBMS_XDB.changePrivileges( resourceloc, privXML );
END IF;
COMMIT;
RETURN STATUS;
END process_message;
END OTNCMS_ADMIN;
/
SHOW ERRORS
COMMIT
/