10g下解包存储过程
原理见Unwrapping 10G wrapped PL/SQL by Anton Scheffer
比如,'create package a'打包后变为:
create package a wrapped --打包后加上了标记"wrapped" a000000 --固定值, 总是a000000 369 --数据库版本相关. 系统自带的.plb文件中好像都是1 abcd --填充符,共15行 abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd abcd 9 --7:procedure 8:function 9:package b:package body d:type e:type body 16:library a 34 --第1个数:打包前原文'\0'的长度(不包括"create "或"create or replace ") 第2个数:打包后的长度 g0a2d/TfdrHiIe3evJs3xeAzTzYwg5m49TOf9b9cWpGmpsvE4Ug= --BASE64编码
WRAP打包过程首先是ZLIB压缩, 然后简单的替换加密, 最后BASE64编码
第2步替换加密中的替换表是ORACLE内部制定的
解包过程则相反
with
src as
(select 'package a' txt from dual)
, wrap as
(select src.txt
, dbms_ddl.wrap('create '||src.txt) wrap
from src)
, base64_dcd as
(select substr(
utl_encode.base64_decode(
utl_raw.cast_to_raw(
rtrim(
substr(
wrap.wrap
,instr(wrap.wrap,chr(10),1,20)+1) --跳过前20行
,chr(10)) --去掉行尾回车, 也可以不去, UTL_ENCODE.BASE64_DECODE能处理回车
)
) --BASE64解码
, 41) x --前40个字符是SHA-1的散列值
from wrap)
, subst as
(select utl_raw.translate( --码表转换 (这里的替换表是假的)
utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(x)),
utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(
'000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F'||
'202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F'||
'404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F'||
'606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F'||
'808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F'||
'A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'||
'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'||
'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF'))
,utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(
'000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F'||
'202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F'||
'404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F'||
'606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F'||
'808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F'||
'A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'||
'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'||
'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF'))
) s
from base64_dcd)
select mycompress.inflate(s) --zlib解压
from subst;
MYCOMPRESS.INFLATE(S)--ZLIB解压 ---------------------------------------------------------------------------------------------------------------------------------- PACKAGE a
解一个系统的, rdbms/admin/dbmsrmge.plb中的一部分
with wrap as (select 'xQaGj1mCrsgW3+RaZh0GMWKlijswgw33f64df3QCkxMP7i1akFTarfShhBKhXRRbWfcvTV49'||chr(10)|| '/KYmJJ2/sYRpdytaSTQi+BByn2cNooSlksJCltfJVYkyA3NojcRzSAXPpougS6vDyRuc8krb'||chr(10)|| 'qcznL7hPkPI82mlZdU1QXnUjOlCfulvR6vEwG3BlN+InBrSBYQnw2G+Fv4J/EUocbXFCDTZP'||chr(10)|| 'tkZcVjxsZdvE4XUJi7tYvlfp/dTfPZObsxIW/Q3b3HPu+ZW7AHr+pZox4tsc96sDYZwJte8r'||chr(10)|| 'AyjqTZxrjCyOTwtwusZBP0HrzZ+bwsy07tuqj0rg8esOAZSZ6kBtOE/4HRLcThMdCFDr3g=='||chr(10)|| ''||chr(10) wrap from dual) , base64_dcd as (select substr( utl_encode.base64_decode( utl_raw.cast_to_raw( wrap.wrap ) ) --BASE64解码 , 41) x --前40个字符是SHA-1的散列值 from wrap) , subst as (select utl_raw.translate( --码表转换 (这里的替换表是假的) utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(x)), utl_raw.cast_to_raw(utl_raw.cast_to_varchar2( '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F'|| '202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F'|| '404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F'|| '606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F'|| '808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F'|| 'A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'|| 'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'|| 'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF')) ,utl_raw.cast_to_raw(utl_raw.cast_to_varchar2( '000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F'|| '202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F'|| '404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F'|| '606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F'|| '808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F'|| 'A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'|| 'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'|| 'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF')) ) s from base64_dcd) select mycompress.inflate(s) --zlib解压 from subst;
PACKAGE dbms_rmgr_group_export AUTHID CURRENT_USER AS FUNCTION CREATE_EXP(OBJID IN NUMBER, VERSION IN VARCHAR2, NEW_BLOCK OUT PLS_INTEGER) RETURN VARCHAR2; FUNCTION GRANT_EXP(OBJID IN NUMBER, ISDBA IN PLS_INTEGER, GRANTOR OUT VARCHAR2, VERSION IN VARCHAR2, NEW_BLOCK OUT PLS_INTEGER) RETURN VARCHAR2; FUNCTION AUDIT_EXP(OBJID IN NUMBER, VERSION IN VARCHAR2, NEW_BLOCK OUT PLS_INTEGER) RETURN VARCHAR2; FUNCTION DROP_EXP(OBJID IN NUMBER, VERSION IN VARCHAR2, NEW_BLOCK OUT PLS_INTEGER) RETURN VARCHAR2; FUNCTION GRANT_SYSPRIVS_EXP(VERSION IN VARCHAR2, NEW_BLOCK OUT PLS_INTEGER) RETURN VARCHAR2; FUNCTION AUDIT_SYSPRIVS_EXP(VERSION IN VARCHAR2, NEW_BLOCK OUT PLS_INTEGER) RETURN VARCHAR2; END DBMS_RMGR_GROUP_EXPORT;
如果语句太大了就会报错
utl_raw.cast_to_raw( * ERROR at line 67: ORA-06502: PL/SQL: numeric or value error: raw variable length too long ORA-06512: at "SYS.UTL_RAW", line 224
编写存储过程解包
create or replace java source named MY_COMPRESS
as
import java.io.*;
import java.util.zip.*;
public class MY_COMPRESS
{
public static String Inflate( byte[] src )
{
try
{
ByteArrayInputStream bis = new ByteArrayInputStream( src );
InflaterInputStream iis = new InflaterInputStream( bis );
StringBuffer sb = new StringBuffer();
for( int c = iis.read(); c != -1; c = iis.read() )
{
sb.append( (char) c );
}
return sb.toString();
} catch ( Exception e )
{
}
return null;
}
public static byte[] Deflate( String src, int quality )
{
try
{
byte[] tmp = new byte[ src.length() + 100 ];
Deflater defl = new Deflater( quality );
defl.setInput( src.getBytes( "UTF-8" ) );
defl.finish();
int cnt = defl.deflate( tmp );
byte[] res = new byte[ cnt ];
for( int i = 0; i < cnt; i++ )
res[i] = tmp[i];
return res;
} catch ( Exception e )
{
}
return null;
}
}
/
alter java source MY_COMPRESS compile
/
create or replace package mycompress
is
function deflate(src in varchar2) return raw;
function deflate(src in varchar2, quality in number) return raw;
function inflate(src in raw) return varchar2;
end;
/
create or replace package body mycompress
is
function deflate(src in varchar2) return raw
is
begin
return deflate(src, 6);
end;
function deflate(src in varchar2, quality in number) return raw
as language java
name 'MY_COMPRESS.Deflate(java.lang.String, int) return byte[]';
function inflate(src in raw) return varchar2
as language java
name 'MY_COMPRESS.Inflate(byte[]) return java.lang.String';
end;
/
create or replace package mypkg
is
function unwrap(s in varchar2) return varchar2;
function unwrap_obj(p_name in varchar2, p_type in varchar2, p_owner in varchar2 default user) return varchar2;
procedure unwrap_obj_a(p_name in varchar2, p_type in varchar2, p_owner in varchar2 default user);
end;
/
create or replace package body mypkg
is
S_SUB_FROM constant varchar2(1000) := --假的
'000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F'||
'202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F'||
'404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F'||
'606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F'||
'808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F'||
'A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'||
'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'||
'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF';
S_SUB_TO constant varchar2(1000) :=
'000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F'||
'202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F'||
'404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F'||
'606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F'||
'808182838485868788898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F'||
'A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'||
'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'||
'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF';
S_SUB_FROM_RAW constant raw(1000) := utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(s_sub_from));
S_SUB_TO_RAW constant raw(1000) := utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(s_sub_to));
S_SHA1_DIGEST_LENGTH constant pls_integer := 41;
function unitesql(s in dbms_sql.varchar2a, nl in varchar2 default chr(10)) return varchar2
is
lb pls_integer := 1;
ub pls_integer := s.count;
t varchar2(32767);
begin
for i in lb..ub loop
t := t || s(i);
--dbms_output.put_line('['||t||']');
if i != ub then
t := t || nl;
end if;
end loop;
return t;
end;
function dividesql(s in varchar2) return dbms_sql.varchar2a
is
nl varchar2(100) := chr(10);
len pls_integer := length(s);
t dbms_sql.varchar2a;
i pls_integer := 1;
p pls_integer := 1;
np pls_integer := 0;
begin
loop
exit when p > len;
np := instr(s,nl,p);
--dbms_output.put_line('p='||p||':'||'np='||np);
if np = 0 then
t(i) := substr(s,p);
--dbms_output.put_line('t('||i||')='||t(i)||']');
exit;
end if;
t(i) := substr(s,p,np-p);
--dbms_output.put_line('s="'||s||'"');
--dbms_output.put_line('p='||p||':'||'np='||np);
--dbms_output.put_line('t('||i||')='||t(i)||'}');
p := np + 1;
i := i + 1;
end loop;
return t;
end;
--将BASE64前的转换成ZLIB后的
function translate_r_raw(x in raw) return raw
is
begin
return utl_raw.translate(x,S_SUB_TO_RAW,S_SUB_FROM_RAW);
end;
function translate_r(x in varchar2) return raw
is
begin
return translate_r_raw(utl_raw.cast_to_raw(utl_raw.cast_to_varchar2(x)));
end;
function base64_decode(s in varchar2) return varchar2
is
x dbms_sql.varchar2a;
y dbms_sql.varchar2a;
begin
x := dividesql(s);
for i in 1..x.count loop
--dbms_output.put_line('x'||i||':'||x(i)||':');
if rtrim(x(i),chr(10)) is not null then
y(i) := utl_encode.base64_decode(utl_raw.cast_to_raw(x(i)));
end if;
--dbms_output.put_line('y'||i||':'||y(i)||':');
end loop;
return unitesql(y,'');
end;
--解包WRAPPED后的代码
function unwrap_s(s in varchar2) return varchar2
is
begin
return
mycompress.inflate(
translate_r(
substr(
base64_decode(s)
, S_SHA1_DIGEST_LENGTH
)
)
);
end;
function unwrap(s in varchar2) return varchar2
is
begin
return unwrap_s(substr(s,instr(s,chr(10),1,20)+1));
end;
function unwrap(s in dbms_sql.varchar2a) return varchar2
is
begin
return unwrap(unitesql(s,''));
end;
function unwrap_obj(p_name in varchar2, p_type in varchar2, p_owner in varchar2 default user) return varchar2
is
v_text all_source.text%type;
s dbms_sql.varchar2a;
begin
begin
select text
into v_text
from all_source
where owner = p_owner
and name = p_name
and type = p_type
and line = 1
and rtrim(substr(text,1,instr(text,chr(10))-1)) like '%wrapped';
exception
when no_data_found then
dbms_output.put_line('not found, or not wrapped');
raise;
end;
for x in (select rownum,text
from all_source
where owner=p_owner
and name=p_name
and type=p_type
order by line)
loop
s(x.rownum) := x.text;
end loop;
return unwrap(s);
end;
procedure unwrap_obj_a(p_name in varchar2, p_type in varchar2, p_owner in varchar2 default user)
is
x dbms_sql.varchar2a;
begin
x := dividesql(unwrap_obj(p_name,p_type,p_owner));
for i in 1..x.count loop
dbms_output.put_line(x(i));
end loop;
end;
end;
/
运行解包过程可以得到源码
set pages 50000 line 130
set serveroutput on size unlimited
drop procedure prc1;
exec dbms_ddl.create_wrapped('create or replace procedure prc1 is begin dbms_output.put_line(''Hello World!''); end;')
select mypkg.unwrap(dbms_ddl.wrap('create or replace procedure prc1 is begin dbms_output.put_line(''Hello World!''); end;')) from dual;
select mypkg.unwrap_obj('PRC1','PROCEDURE') from dual;
exec mypkg.unwrap_obj_a(upper('dbms_aq'),'PACKAGE','SYS')
exec mypkg.unwrap_obj_a(upper('dbms_aq'),'PACKAGE BODY','SYS')
SQL> select mypkg.unwrap(dbms_ddl.wrap('create or replace procedure prc1 is begin dbms_output.put_line(''Hello World!''); end;')) from dual;
MYPKG.UNWRAP(DBMS_DDL.WRAP('CREATEORREPLACEPROCEDUREPRC1ISBEGINDBMS_OUTPUT.PUT_LINE(''HELLOWORLD!'');END;'))
----------------------------------------------------------------------------------------------------------------------------------
PROCEDURE prc1 IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END;
SQL> select mypkg.unwrap_obj('PRC1','PROCEDURE') from dual;
MYPKG.UNWRAP_OBJ('PRC1','PROCEDURE')
----------------------------------------------------------------------------------------------------------------------------------
PROCEDURE prc1 IS BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END;
SQL> exec mypkg.unwrap_obj_a(upper('dbms_aq'),'PACKAGE','SYS')
PACKAGE dbms_aq AUTHID CURRENT_USER AS
NAMESPACE_ANONYMOUS CONSTANT BINARY_INTEGER := 0;
NAMESPACE_AQ CONSTANT BINARY_INTEGER := 1;
NAMESPACE_DBCHANGE CONSTANT BINARY_INTEGER := 2;
NTFN_QOS_RELIABLE CONSTANT BINARY_INTEGER := 1;
NTFN_QOS_PAYLOAD CONSTANT BINARY_INTEGER := 2;
NTFN_QOS_REPLICATE CONSTANT BINARY_INTEGER := 4;
NTFN_QOS_SECURE CONSTANT BINARY_INTEGER := 8;
NTFN_QOS_PURGE_ON_NTFN CONSTANT BINARY_INTEGER := 16;
NTFN_QOS_MULTICBK CONSTANT BINARY_INTEGER := 32;
NOTIFICATION_SUBSCRIBER CONSTANT BINARY_INTEGER := 16;
PUBLIC_SUBSCRIBER CONSTANT BINARY_INTEGER := 32;
IMMEDIATE CONSTANT BINARY_INTEGER := 1;
ON_COMMIT CONSTANT BINARY_INTEGER := 2;
BROWSE CONSTANT BINARY_INTEGER := 1;
LOCKED CONSTANT BINARY_INTEGER := 2;
REMOVE CONSTANT BINARY_INTEGER := 3;
REMOVE_NODATA CONSTANT BINARY_INTEGER := 4;
GET_SIGNATURE CONSTANT BINARY_INTEGER := 5;
FIRST_MESSAGE CONSTANT BINARY_INTEGER := 1;
FIRST CONSTANT BINARY_INTEGER := 1;
FIRST_MESSAGE_ONE_GROUP CONSTANT BINARY_INTEGER := 1;
FIRST_MESSAGE_MULTI_GROUP CONSTANT BINARY_INTEGER := 4;
NEXT_MESSAGE CONSTANT BINARY_INTEGER := 3;
NEXT CONSTANT BINARY_INTEGER := 3;
NEXT_MESSAGE_ONE_GROUP CONSTANT BINARY_INTEGER := 3;
NEXT_MESSAGE_MULTI_GROUP CONSTANT BINARY_INTEGER := 5;
NEXT_TRANSACTION CONSTANT BINARY_INTEGER := 2;
WAITING CONSTANT BINARY_INTEGER := 1;
READY CONSTANT BINARY_INTEGER := 0;
PROCESSED CONSTANT BINARY_INTEGER := 2;
EXPIRED CONSTANT BINARY_INTEGER := 3;
SPILLED CONSTANT BINARY_INTEGER := 7;
DEFERRED CONSTANT BINARY_INTEGER := 8;
DEFRSPIL CONSTANT BINARY_INTEGER := 9;
BUFFERED_EXPIRED CONSTANT BINARY_INTEGER := 10;
BEFORE CONSTANT BINARY_INTEGER := 2;
TOP CONSTANT BINARY_INTEGER := 3;
FOREVER CONSTANT BINARY_INTEGER := -1;
NO_WAIT CONSTANT BINARY_INTEGER := 0;
NO_DELAY CONSTANT BINARY_INTEGER := 0;
NEVER CONSTANT BINARY_INTEGER := -1;
OBJECT_TYPE CONSTANT BINARY_INTEGER := 1;
RAW_TYPE CONSTANT BINARY_INTEGER := 2;
BUFFERED_MESSAGE CONSTANT BINARY_INTEGER := 1;
PERSISTENT CONSTANT BINARY_INTEGER := 1;
BUFFERED CONSTANT BINARY_INTEGER := 2;
PERSISTENT_OR_BUFFERED CONSTANT BINARY_INTEGER := 3;
JMS_TEXT_MESSAGE CONSTANT BINARY_INTEGER := 0;
JMS_BYTES_MESSAGE CONSTANT BINARY_INTEGER := 1;
JMS_STREAM_MESSAGE CONSTANT BINARY_INTEGER := 2;
JMS_MAP_MESSAGE CONSTANT BINARY_INTEGER := 3;
JMS_OBJECT_MESSAGE CONSTANT BINARY_INTEGER := 4;
TYPE AQ$_RECIPIENT_LIST_T IS TABLE OF SYS.AQ$_AGENT
INDEX BY BINARY_INTEGER;
TYPE AQ$_AGENT_LIST_T IS TABLE OF SYS.AQ$_AGENT INDEX BY BINARY_INTEGER;
TYPE MESSAGE_PROPERTIES_T IS
RECORD(
PRIORITY BINARY_INTEGER NOT NULL DEFAULT 1,
DELAY BINARY_INTEGER NOT NULL DEFAULT NO_DELAY,
EXPIRATION BINARY_INTEGER NOT NULL DEFAULT NEVER,
CORRELATION VARCHAR2(128) DEFAULT NULL,
ATTEMPTS BINARY_INTEGER,
RECIPIENT_LIST AQ$_RECIPIENT_LIST_T,
EXCEPTION_QUEUE VARCHAR2(61) DEFAULT NULL,
ENQUEUE_TIME DATE,
STATE BINARY_INTEGER,
SENDER_ID SYS.AQ$_AGENT DEFAULT NULL,
ORIGINAL_MSGID RAW(16) DEFAULT NULL,
SIGNATURE AQ$_SIG_PROP DEFAULT NULL,
TRANSACTION_GROUP VARCHAR2(30) DEFAULT NULL,
USER_PROPERTY SYS.ANYDATA DEFAULT NULL,
DELIVERY_MODE PLS_INTEGER NOT NULL DEFAULT PERSISTENT);
TYPE MESSAGE_PROPERTIES_ARRAY_T IS VARRAY(2147483647)
OF MESSAGE_PROPERTIES_T;
TYPE ERROR_INFO_T IS RECORD (
ERROR_POSITION NUMBER,
ERROR_NO NUMBER,
ERROR_MSG VARCHAR2(4000));
TYPE ERROR_ARRAY_T IS VARRAY(2147483647) OF ERROR_INFO_T;
TYPE MSGID_ARRAY_T IS VARRAY(2147483647) OF RAW(16);
TYPE ENQUEUE_OPTIONS_T IS
RECORD(
VISIBILITY BINARY_INTEGER NOT NULL DEFAULT ON_COMMIT,
RELATIVE_MSGID RAW(16) DEFAULT NULL,
SEQUENCE_DEVIATION BINARY_INTEGER DEFAULT NULL,
TRANSFORMATION VARCHAR2(61) DEFAULT NULL,
BUFMESG_PROP BINARY_INTEGER DEFAULT NULL,
DELIVERY_MODE PLS_INTEGER NOT NULL DEFAULT PERSISTENT);
TYPE DEQUEUE_OPTIONS_T IS
RECORD(
CONSUMER_NAME VARCHAR2(30) DEFAULT NULL,
DEQUEUE_MODE BINARY_INTEGER NOT NULL DEFAULT REMOVE,
NAVIGATION BINARY_INTEGER NOT NULL DEFAULT NEXT_MESSAGE,
VISIBILITY BINARY_INTEGER NOT NULL DEFAULT ON_COMMIT,
WAIT BINARY_INTEGER NOT NULL DEFAULT FOREVER,
MSGID RAW(16) DEFAULT NULL,
CORRELATION VARCHAR2(128) DEFAULT NULL,
DEQ_CONDITION VARCHAR2(4000) DEFAULT NULL,
SIGNATURE AQ$_SIG_PROP DEFAULT NULL,
TRANSFORMATION VARCHAR2(61) DEFAULT NULL,
BUFMESG_PROP BINARY_INTEGER DEFAULT NULL,
DELIVERY_MODE PLS_INTEGER NOT NULL DEFAULT PERSISTENT);
PROCEDURE ENQUEUE(
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES IN MESSAGE_PROPERTIES_T,
PAYLOAD IN "<OPAQUE_1>",
MSGID OUT RAW);
PROCEDURE ENQUEUE(
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES IN MESSAGE_PROPERTIES_T,
PAYLOAD IN "<ADT_1>",
MSGID OUT RAW);
PROCEDURE ENQUEUE(
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES IN MESSAGE_PROPERTIES_T,
PAYLOAD IN RAW,
MSGID OUT RAW);
FUNCTION ENQUEUE_ARRAY (
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
ARRAY_SIZE IN PLS_INTEGER,
MESSAGE_PROPERTIES_ARRAY IN MESSAGE_PROPERTIES_ARRAY_T,
PAYLOAD_ARRAY IN "<COLLECTION_1>",
MSGID_ARRAY OUT MSGID_ARRAY_T)
RETURN PLS_INTEGER;
FUNCTION ENQUEUE_ARRAY (
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
ARRAY_SIZE IN PLS_INTEGER,
MESSAGE_PROPERTIES_ARRAY IN MESSAGE_PROPERTIES_ARRAY_T,
PAYLOAD_ARRAY IN "<COLLECTION_1>",
MSGID_ARRAY OUT MSGID_ARRAY_T,
ERROR_ARRAY OUT ERROR_ARRAY_T)
RETURN PLS_INTEGER;
PROCEDURE DEQUEUE(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES OUT MESSAGE_PROPERTIES_T,
PAYLOAD OUT "<OPAQUE_1>",
MSGID OUT RAW);
PROCEDURE DEQUEUE(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES OUT MESSAGE_PROPERTIES_T,
PAYLOAD OUT "<ADT_1>",
MSGID OUT RAW);
PROCEDURE DEQUEUE(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES OUT MESSAGE_PROPERTIES_T,
PAYLOAD OUT RAW,
MSGID OUT RAW);
FUNCTION DEQUEUE_ARRAY(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
ARRAY_SIZE IN PLS_INTEGER,
MESSAGE_PROPERTIES_ARRAY OUT MESSAGE_PROPERTIES_ARRAY_T,
PAYLOAD_ARRAY OUT "<COLLECTION_1>",
MSGID_ARRAY OUT MSGID_ARRAY_T)
RETURN PLS_INTEGER;
FUNCTION DEQUEUE_ARRAY(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
ARRAY_SIZE IN PLS_INTEGER,
MESSAGE_PROPERTIES_ARRAY OUT MESSAGE_PROPERTIES_ARRAY_T,
PAYLOAD_ARRAY OUT "<COLLECTION_1>",
MSGID_ARRAY OUT MSGID_ARRAY_T,
ERROR_ARRAY OUT ERROR_ARRAY_T)
RETURN PLS_INTEGER;
PROCEDURE LISTEN(
AGENT_LIST IN AQ$_AGENT_LIST_T,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
AGENT OUT SYS.AQ$_AGENT);
PROCEDURE LISTEN(
AGENT_LIST IN AQ$_AGENT_LIST_T,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
LISTEN_DELIVERY_MODE IN PLS_INTEGER DEFAULT PERSISTENT,
AGENT OUT SYS.AQ$_AGENT,
MESSAGE_DELIVERY_MODE OUT PLS_INTEGER);
PROCEDURE BIND_AGENT(
AGENT IN AQ$_AGENT,
CERTIFICATE_LOCATION IN VARCHAR2 DEFAULT NULL);
PROCEDURE UNBIND_AGENT(
AGENT IN AQ$_AGENT);
PROCEDURE REGISTER(
REG_LIST IN SYS.AQ$_REG_INFO_LIST,
REG_COUNT IN NUMBER);
PROCEDURE UNREGISTER(
REG_LIST IN SYS.AQ$_REG_INFO_LIST,
REG_COUNT IN NUMBER);
PROCEDURE POST(
POST_LIST IN SYS.AQ$_POST_INFO_LIST,
POST_COUNT IN NUMBER);
PROCEDURE AQ$_ENQUEUE(
QUEUE_NAME IN VARCHAR2,
SENDER_NAME IN VARCHAR2 DEFAULT NULL,
SENDER_ADDR IN VARCHAR2 DEFAULT NULL,
SENDER_PROTOCOL IN BINARY_INTEGER DEFAULT NULL,
ORIGINAL_MSGID IN RAW DEFAULT NULL,
CORRELATION IN VARCHAR2 DEFAULT NULL,
VISIBILITY IN BINARY_INTEGER DEFAULT ON_COMMIT,
PRIORITY IN BINARY_INTEGER DEFAULT 1,
DELAY IN BINARY_INTEGER DEFAULT 0,
EXPIRATION IN BINARY_INTEGER DEFAULT NEVER,
RELATIVE_MSGID IN RAW DEFAULT NULL,
SEQUENCE_DEVIATION IN BINARY_INTEGER DEFAULT NULL,
EXCEPTION_QUEUE IN VARCHAR2 DEFAULT NULL,
RECIPIENTS IN AQ$_RECIPIENT_LIST_T,
PAYLOAD_TYPE IN BINARY_INTEGER DEFAULT OBJECT_TYPE,
RAW_USER_DATA IN RAW DEFAULT NULL,
OBJECT_USER_DATA IN "<ADT_1>",
MSGID OUT RAW,
SIGNATURE IN AQ$_SIG_PROP DEFAULT NULL,
TRANSFORMATION IN VARCHAR2 DEFAULT NULL,
BUFMESG_PROP IN BINARY_INTEGER DEFAULT NULL,
ANYDATA_CONVERT IN BOOLEAN DEFAULT FALSE,
LCR2XML_CONVERT IN BOOLEAN DEFAULT FALSE,
USER_PROPERTY IN SYS.ANYDATA DEFAULT NULL,
DELIVERY_MODE IN PLS_INTEGER DEFAULT PERSISTENT);
PROCEDURE AQ$_DEQUEUE(
QUEUE_NAME IN VARCHAR2,
SUBSCRIBER IN VARCHAR2 DEFAULT NULL,
MSGID IN RAW DEFAULT NULL,
CORRELATION IN VARCHAR2 DEFAULT NULL,
DEQUEUE_MODE IN BINARY_INTEGER DEFAULT REMOVE,
NAVIGATION IN BINARY_INTEGER DEFAULT FIRST,
VISIBILITY IN BINARY_INTEGER DEFAULT ON_COMMIT,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
ENQUEUE_TIME OUT DATE,
STATE OUT BINARY_INTEGER,
OUT_MSGID OUT RAW,
OUT_CORRELATION OUT VARCHAR2,
PRIORITY OUT BINARY_INTEGER,
DELAY OUT BINARY_INTEGER,
EXPIRATION OUT BINARY_INTEGER,
ATTEMPTS OUT BINARY_INTEGER,
EXCEPTION_QUEUE OUT VARCHAR2,
REMOTE_RECIPIENTS OUT AQ$_RECIPIENT_LIST_T,
SENDER_NAME OUT VARCHAR2,
SENDER_ADDR OUT VARCHAR2,
SENDER_PROTOCOL OUT BINARY_INTEGER,
ORIGINAL_MSGID OUT RAW,
PAYLOAD_TYPE IN BINARY_INTEGER DEFAULT OBJECT_TYPE,
RAW_USER_DATA OUT RAW,
OBJECT_USER_DATA OUT "<ADT_1>",
DEQ_CONDITION IN VARCHAR2 DEFAULT NULL,
SIGNATURE IN SYS.AQ$_SIG_PROP DEFAULT NULL,
OUT_SIGN OUT SYS.AQ$_SIG_PROP,
TRANSFORMATION IN VARCHAR2 DEFAULT NULL,
BUFMESG_PROP IN BINARY_INTEGER DEFAULT NULL,
LCR2XML_CONVERT IN BOOLEAN DEFAULT FALSE);
PROCEDURE AQ$_DEQUEUE(
QUEUE_NAME IN VARCHAR2,
SUBSCRIBER IN VARCHAR2 DEFAULT NULL,
MSGID IN RAW DEFAULT NULL,
CORRELATION IN VARCHAR2 DEFAULT NULL,
DEQUEUE_MODE IN BINARY_INTEGER DEFAULT REMOVE,
NAVIGATION IN BINARY_INTEGER DEFAULT FIRST,
VISIBILITY IN BINARY_INTEGER DEFAULT ON_COMMIT,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
ENQUEUE_TIME OUT DATE,
STATE OUT BINARY_INTEGER,
OUT_MSGID OUT RAW,
OUT_CORRELATION OUT VARCHAR2,
PRIORITY OUT BINARY_INTEGER,
DELAY OUT BINARY_INTEGER,
EXPIRATION OUT BINARY_INTEGER,
ATTEMPTS OUT BINARY_INTEGER,
EXCEPTION_QUEUE OUT VARCHAR2,
REMOTE_RECIPIENTS OUT AQ$_RECIPIENT_LIST_T,
SENDER_NAME OUT VARCHAR2,
SENDER_ADDR OUT VARCHAR2,
SENDER_PROTOCOL OUT BINARY_INTEGER,
ORIGINAL_MSGID OUT RAW,
PAYLOAD_TYPE IN BINARY_INTEGER DEFAULT OBJECT_TYPE,
RAW_USER_DATA OUT RAW,
OBJECT_USER_DATA OUT "<ADT_1>",
DEQ_CONDITION IN VARCHAR2 DEFAULT NULL,
SIGNATURE IN SYS.AQ$_SIG_PROP DEFAULT NULL,
OUT_SIGN OUT SYS.AQ$_SIG_PROP,
TRANSFORMATION IN VARCHAR2 DEFAULT NULL,
BUFMESG_PROP IN BINARY_INTEGER DEFAULT NULL,
LCR2XML_CONVERT IN BOOLEAN DEFAULT FALSE,
USER_PROPERTY OUT SYS.ANYDATA
);
PROCEDURE AQ$_DEQUEUE(
QUEUE_NAME IN VARCHAR2,
SUBSCRIBER IN VARCHAR2 DEFAULT NULL,
MSGID IN RAW DEFAULT NULL,
CORRELATION IN VARCHAR2 DEFAULT NULL,
DEQUEUE_MODE IN BINARY_INTEGER DEFAULT REMOVE,
NAVIGATION IN BINARY_INTEGER DEFAULT FIRST,
VISIBILITY IN BINARY_INTEGER DEFAULT ON_COMMIT,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
ENQUEUE_TIME OUT DATE,
STATE OUT BINARY_INTEGER,
OUT_MSGID OUT RAW,
OUT_CORRELATION OUT VARCHAR2,
PRIORITY OUT BINARY_INTEGER,
DELAY OUT BINARY_INTEGER,
EXPIRATION OUT BINARY_INTEGER,
ATTEMPTS OUT BINARY_INTEGER,
EXCEPTION_QUEUE OUT VARCHAR2,
REMOTE_RECIPIENTS OUT AQ$_RECIPIENT_LIST_T,
SENDER_NAME OUT VARCHAR2,
SENDER_ADDR OUT VARCHAR2,
SENDER_PROTOCOL OUT BINARY_INTEGER,
ORIGINAL_MSGID OUT RAW,
PAYLOAD_TYPE IN BINARY_INTEGER DEFAULT OBJECT_TYPE,
RAW_USER_DATA OUT RAW,
OBJECT_USER_DATA OUT "<ADT_1>",
DEQ_CONDITION IN VARCHAR2 DEFAULT NULL,
SIGNATURE IN SYS.AQ$_SIG_PROP DEFAULT NULL,
OUT_SIGN OUT SYS.AQ$_SIG_PROP,
TRANSFORMATION IN VARCHAR2 DEFAULT NULL,
BUFMESG_PROP IN BINARY_INTEGER DEFAULT NULL,
LCR2XML_CONVERT IN BOOLEAN DEFAULT FALSE,
USER_PROPERTY OUT SYS.ANYDATA,
DELIVERY_MODE IN PLS_INTEGER DEFAULT PERSISTENT,
OUT_DELIVERY_MODE OUT PLS_INTEGER
);
END DBMS_AQ;
PL/SQL procedure successfully completed.
SQL> exec mypkg.unwrap_obj_a(upper('dbms_aq'),'PACKAGE BODY','SYS')
PACKAGE BODY dbms_aq AS
PROCEDURE AQ$_ENQUEUE(
QUEUE_NAME IN VARCHAR2,
SENDER_NAME IN VARCHAR2 DEFAULT NULL,
SENDER_ADDR IN VARCHAR2 DEFAULT NULL,
SENDER_PROTOCOL IN BINARY_INTEGER DEFAULT NULL,
ORIGINAL_MSGID IN RAW DEFAULT NULL,
CORRELATION IN VARCHAR2 DEFAULT NULL,
VISIBILITY IN BINARY_INTEGER DEFAULT ON_COMMIT,
PRIORITY IN BINARY_INTEGER DEFAULT 1,
DELAY IN BINARY_INTEGER DEFAULT 0,
EXPIRATION IN BINARY_INTEGER DEFAULT NEVER,
RELATIVE_MSGID IN RAW DEFAULT NULL,
SEQUENCE_DEVIATION IN BINARY_INTEGER DEFAULT NULL,
EXCEPTION_QUEUE IN VARCHAR2 DEFAULT NULL,
RECIPIENTS IN AQ$_RECIPIENT_LIST_T,
PAYLOAD_TYPE IN BINARY_INTEGER DEFAULT OBJECT_TYPE,
RAW_USER_DATA IN RAW DEFAULT NULL,
OBJECT_USER_DATA IN "<ADT_1>",
MSGID OUT RAW,
SIGNATURE IN AQ$_SIG_PROP DEFAULT NULL,
TRANSFORMATION IN VARCHAR2 DEFAULT NULL,
BUFMESG_PROP IN BINARY_INTEGER DEFAULT NULL,
ANYDATA_CONVERT IN BOOLEAN DEFAULT FALSE,
LCR2XML_CONVERT IN BOOLEAN DEFAULT FALSE,
USER_PROPERTY IN SYS.ANYDATA DEFAULT NULL,
DELIVERY_MODE IN PLS_INTEGER DEFAULT PERSISTENT
) IS
EXTERNAL
NAME "kwqiexenqueue"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
SENDER_NAME OCISTRING, SENDER_NAME INDICATOR SB4,
SENDER_ADDR OCISTRING, SENDER_ADDR INDICATOR SB4,
SENDER_PROTOCOL SB4, SENDER_PROTOCOL INDICATOR SB4,
ORIGINAL_MSGID OCIRAW, ORIGINAL_MSGID INDICATOR SB4,
CORRELATION OCISTRING, CORRELATION INDICATOR SB4,
VISIBILITY SB4, VISIBILITY INDICATOR SB4,
PRIORITY SB4, PRIORITY INDICATOR SB4,
DELAY SB4, DELAY INDICATOR SB4,
EXPIRATION SB4, EXPIRATION INDICATOR SB4,
RELATIVE_MSGID OCIRAW, RELATIVE_MSGID INDICATOR SB4,
SEQUENCE_DEVIATION SB4,
SEQUENCE_DEVIATION INDICATOR SB4,
EXCEPTION_QUEUE OCISTRING,
EXCEPTION_QUEUE INDICATOR SB4,
PAYLOAD_TYPE SB4,
RAW_USER_DATA OCIRAW, RAW_USER_DATA INDICATOR SB4,
OBJECT_USER_DATA,
OBJECT_USER_DATA INDICATOR STRUCT,
OBJECT_USER_DATA TDO OCITYPE,
RECIPIENTS OCICOLL,
MSGID OCIRAW,
SIGNATURE,
SIGNATURE INDICATOR STRUCT,
SIGNATURE TDO OCITYPE,
TRANSFORMATION OCISTRING,
TRANSFORMATION INDICATOR SB4,
BUFMESG_PROP SB4,
BUFMESG_PROP INDICATOR SB4,
ANYDATA_CONVERT SB4,
ANYDATA_CONVERT INDICATOR SB4,
LCR2XML_CONVERT SB4,
LCR2XML_CONVERT INDICATOR SB4,
USER_PROPERTY,
USER_PROPERTY INDICATOR SB4,
DELIVERY_MODE SB4
)
LIBRARY DBMS_AQ_LIB;
PROCEDURE AQ$_DEQUEUE(
QUEUE_NAME IN VARCHAR2,
SUBSCRIBER IN VARCHAR2 DEFAULT NULL,
MSGID IN RAW DEFAULT NULL,
CORRELATION IN VARCHAR2 DEFAULT NULL,
DEQUEUE_MODE IN BINARY_INTEGER DEFAULT REMOVE,
NAVIGATION IN BINARY_INTEGER DEFAULT FIRST,
VISIBILITY IN BINARY_INTEGER DEFAULT ON_COMMIT,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
ENQUEUE_TIME OUT DATE,
STATE OUT BINARY_INTEGER,
OUT_MSGID OUT RAW,
OUT_CORRELATION OUT VARCHAR2,
PRIORITY OUT BINARY_INTEGER,
DELAY OUT BINARY_INTEGER,
EXPIRATION OUT BINARY_INTEGER,
ATTEMPTS OUT BINARY_INTEGER,
EXCEPTION_QUEUE OUT VARCHAR2,
REMOTE_RECIPIENTS OUT AQ$_RECIPIENT_LIST_T,
SENDER_NAME OUT VARCHAR2,
SENDER_ADDR OUT VARCHAR2,
SENDER_PROTOCOL OUT BINARY_INTEGER,
ORIGINAL_MSGID OUT RAW,
PAYLOAD_TYPE IN BINARY_INTEGER DEFAULT OBJECT_TYPE,
RAW_USER_DATA OUT RAW,
OBJECT_USER_DATA OUT "<ADT_1>",
DEQ_CONDITION IN VARCHAR2 DEFAULT NULL,
SIGNATURE IN SYS.AQ$_SIG_PROP DEFAULT NULL,
OUT_SIGN OUT SYS.AQ$_SIG_PROP,
TRANSFORMATION IN VARCHAR2 DEFAULT NULL,
BUFMESG_PROP IN BINARY_INTEGER DEFAULT NULL,
LCR2XML_CONVERT IN BOOLEAN DEFAULT FALSE,
USER_PROPERTY OUT SYS.ANYDATA
)
IS
EXTERNAL
NAME "kwqidxdequeue101"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
SUBSCRIBER OCISTRING, SUBSCRIBER INDICATOR SB4,
MSGID OCIRAW, MSGID INDICATOR SB4,
CORRELATION OCISTRING, CORRELATION INDICATOR SB4,
DEQUEUE_MODE SB4,
WAIT SB4, WAIT INDICATOR SB4,
VISIBILITY SB4, VISIBILITY INDICATOR SB4,
NAVIGATION SB4,
OUT_MSGID OCIRAW,
OUT_CORRELATION OCISTRING, OUT_CORRELATION INDICATOR SB4,
PRIORITY SB4, PRIORITY INDICATOR SB4,
DELAY SB4, DELAY INDICATOR SB4,
EXPIRATION SB4, EXPIRATION INDICATOR SB4,
STATE SB4, STATE INDICATOR SB4,
ENQUEUE_TIME OCIDATE, ENQUEUE_TIME INDICATOR SB4,
ATTEMPTS SB4, ATTEMPTS INDICATOR SB4,
EXCEPTION_QUEUE OCISTRING, EXCEPTION_QUEUE INDICATOR SB4,
REMOTE_RECIPIENTS OCICOLL,
REMOTE_RECIPIENTS INDICATOR SB2,
SENDER_NAME OCISTRING, SENDER_NAME INDICATOR SB4,
SENDER_ADDR OCISTRING, SENDER_ADDR INDICATOR SB4,
SENDER_PROTOCOL SB4, SENDER_PROTOCOL INDICATOR SB4,
ORIGINAL_MSGID OCIRAW, ORIGINAL_MSGID INDICATOR SB4,
PAYLOAD_TYPE SB4,
RAW_USER_DATA OCIRAW, RAW_USER_DATA INDICATOR SB4,
RAW_USER_DATA MAXLEN SB4,
OBJECT_USER_DATA,
OBJECT_USER_DATA INDICATOR STRUCT,
OBJECT_USER_DATA TDO OCITYPE,
OBJECT_USER_DATA DURATION OCIDURATION,
DEQ_CONDITION OCISTRING, DEQ_CONDITION INDICATOR SB4,
SIGNATURE,
SIGNATURE INDICATOR STRUCT,
SIGNATURE TDO OCITYPE,
OUT_SIGN,
OUT_SIGN INDICATOR STRUCT,
OUT_SIGN TDO OCITYPE,
OUT_SIGN DURATION OCIDURATION,
TRANSFORMATION OCISTRING,
TRANSFORMATION INDICATOR SB4,
BUFMESG_PROP SB4,
BUFMESG_PROP INDICATOR SB4,
LCR2XML_CONVERT SB4,
LCR2XML_CONVERT INDICATOR SB4,
USER_PROPERTY,
USER_PROPERTY INDICATOR SB4
)
LIBRARY DBMS_AQ_LIB;
PROCEDURE ENQUEUE(
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES IN MESSAGE_PROPERTIES_T,
PAYLOAD IN "<ADT_1>",
MSGID OUT RAW) IS
EXTERNAL
NAME "kwqiadtenqueue"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
ENQUEUE_OPTIONS,
ENQUEUE_OPTIONS INDICATOR STRUCT,
MESSAGE_PROPERTIES,
MESSAGE_PROPERTIES INDICATOR STRUCT,
PAYLOAD, PAYLOAD INDICATOR STRUCT, PAYLOAD TDO OCITYPE,
MSGID OCIRAW)
LIBRARY DBMS_AQ_LIB;
PROCEDURE ENQUEUE(
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES IN MESSAGE_PROPERTIES_T,
PAYLOAD IN RAW,
MSGID OUT RAW) IS
SNAME VARCHAR2(30) := NULL;
SADDR VARCHAR2(1024) := NULL;
SPROTOCOL NUMBER := NULL;
ORIG_MID RAW(16) := NULL;
BEGIN
IF MESSAGE_PROPERTIES.SENDER_ID IS NOT NULL THEN
SNAME := MESSAGE_PROPERTIES.SENDER_ID.NAME;
SADDR := MESSAGE_PROPERTIES.SENDER_ID.ADDRESS;
SPROTOCOL := MESSAGE_PROPERTIES.SENDER_ID.PROTOCOL;
END IF;
IF MESSAGE_PROPERTIES.ORIGINAL_MSGID IS NOT NULL THEN
ORIG_MID := MESSAGE_PROPERTIES.ORIGINAL_MSGID;
END IF;
AQ$_ENQUEUE(
QUEUE_NAME => QUEUE_NAME,
SENDER_NAME => SNAME,
SENDER_ADDR => SADDR,
SENDER_PROTOCOL => SPROTOCOL,
ORIGINAL_MSGID => ORIG_MID,
VISIBILITY => ENQUEUE_OPTIONS.VISIBILITY,
RELATIVE_MSGID => ENQUEUE_OPTIONS.RELATIVE_MSGID,
SEQUENCE_DEVIATION => ENQUEUE_OPTIONS.SEQUENCE_DEVIATION,
CORRELATION => MESSAGE_PROPERTIES.CORRELATION,
PRIORITY => MESSAGE_PROPERTIES.PRIORITY,
DELAY => MESSAGE_PROPERTIES.DELAY,
EXPIRATION => MESSAGE_PROPERTIES.EXPIRATION,
EXCEPTION_QUEUE => MESSAGE_PROPERTIES.EXCEPTION_QUEUE,
TRANSFORMATION => ENQUEUE_OPTIONS.TRANSFORMATION,
RECIPIENTS => MESSAGE_PROPERTIES.RECIPIENT_LIST,
MSGID => MSGID,
PAYLOAD_TYPE => RAW_TYPE,
RAW_USER_DATA => PAYLOAD,
OBJECT_USER_DATA => NULL,
SIGNATURE => MESSAGE_PROPERTIES.SIGNATURE,
BUFMESG_PROP => ENQUEUE_OPTIONS.BUFMESG_PROP,
USER_PROPERTY => MESSAGE_PROPERTIES.USER_PROPERTY,
DELIVERY_MODE => ENQUEUE_OPTIONS.DELIVERY_MODE);
END;
PROCEDURE ENQUEUE(
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES IN MESSAGE_PROPERTIES_T,
PAYLOAD IN "<OPAQUE_1>",
MSGID OUT RAW) IS
EXTERNAL
NAME "kwqiopqenqueue"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
ENQUEUE_OPTIONS,
ENQUEUE_OPTIONS INDICATOR STRUCT,
MESSAGE_PROPERTIES,
MESSAGE_PROPERTIES INDICATOR STRUCT,
PAYLOAD, PAYLOAD INDICATOR SB2, PAYLOAD TDO OCITYPE,
MSGID OCIRAW)
LIBRARY DBMS_AQ_LIB;
FUNCTION ENQUEUE_ARRAY (
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
ARRAY_SIZE IN PLS_INTEGER,
MESSAGE_PROPERTIES_ARRAY IN MESSAGE_PROPERTIES_ARRAY_T,
PAYLOAD_ARRAY IN "<COLLECTION_1>",
MSGID_ARRAY OUT MSGID_ARRAY_T) RETURN PLS_INTEGER IS
EXTERNAL
NAME "kwqienqarray0"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
ENQUEUE_OPTIONS,
ENQUEUE_OPTIONS INDICATOR STRUCT,
ARRAY_SIZE UB4,
MESSAGE_PROPERTIES_ARRAY,
MESSAGE_PROPERTIES_ARRAY INDICATOR,
PAYLOAD_ARRAY, PAYLOAD_ARRAY INDICATOR, PAYLOAD_ARRAY TDO OCITYPE,
MSGID_ARRAY,
RETURN UB4)
LIBRARY DBMS_AQ_LIB;
FUNCTION ENQUEUE_ARRAY (
QUEUE_NAME IN VARCHAR2,
ENQUEUE_OPTIONS IN ENQUEUE_OPTIONS_T,
ARRAY_SIZE IN PLS_INTEGER,
MESSAGE_PROPERTIES_ARRAY IN MESSAGE_PROPERTIES_ARRAY_T,
PAYLOAD_ARRAY IN "<COLLECTION_1>",
MSGID_ARRAY OUT MSGID_ARRAY_T,
ERROR_ARRAY OUT ERROR_ARRAY_T) RETURN PLS_INTEGER IS
EXTERNAL
NAME "kwqienqarray"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
ENQUEUE_OPTIONS,
ENQUEUE_OPTIONS INDICATOR STRUCT,
ARRAY_SIZE UB4,
MESSAGE_PROPERTIES_ARRAY,
MESSAGE_PROPERTIES_ARRAY INDICATOR,
PAYLOAD_ARRAY, PAYLOAD_ARRAY INDICATOR, PAYLOAD_ARRAY TDO OCITYPE,
MSGID_ARRAY,
ERROR_ARRAY,ERROR_ARRAY INDICATOR SB2,
ERROR_ARRAY DURATION OCIDURATION,
RETURN UB4)
LIBRARY DBMS_AQ_LIB;
PROCEDURE DEQUEUE(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES OUT MESSAGE_PROPERTIES_T,
PAYLOAD OUT "<OPAQUE_1>",
MSGID OUT RAW) IS
EXTERNAL
NAME "kwqiopqdequeue"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
DEQUEUE_OPTIONS,
DEQUEUE_OPTIONS INDICATOR STRUCT,
MESSAGE_PROPERTIES,
MESSAGE_PROPERTIES INDICATOR STRUCT,
MESSAGE_PROPERTIES DURATION OCIDURATION,
PAYLOAD, PAYLOAD INDICATOR SB2,
PAYLOAD TDO OCITYPE, PAYLOAD DURATION OCIDURATION,
MSGID OCIRAW)
LIBRARY DBMS_AQ_LIB;
PROCEDURE DEQUEUE(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES OUT MESSAGE_PROPERTIES_T,
PAYLOAD OUT "<ADT_1>",
MSGID OUT RAW) IS
EXTERNAL
NAME "kwqiadtdequeue"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
DEQUEUE_OPTIONS,
DEQUEUE_OPTIONS INDICATOR STRUCT,
MESSAGE_PROPERTIES,
MESSAGE_PROPERTIES INDICATOR STRUCT,
MESSAGE_PROPERTIES DURATION OCIDURATION,
PAYLOAD, PAYLOAD INDICATOR STRUCT,
PAYLOAD TDO OCITYPE, PAYLOAD DURATION OCIDURATION,
MSGID OCIRAW)
LIBRARY DBMS_AQ_LIB;
PROCEDURE AQ$_DEQUEUE(
QUEUE_NAME IN VARCHAR2,
SUBSCRIBER IN VARCHAR2 DEFAULT NULL,
MSGID IN RAW DEFAULT NULL,
CORRELATION IN VARCHAR2 DEFAULT NULL,
DEQUEUE_MODE IN BINARY_INTEGER DEFAULT REMOVE,
NAVIGATION IN BINARY_INTEGER DEFAULT FIRST,
VISIBILITY IN BINARY_INTEGER DEFAULT ON_COMMIT,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
ENQUEUE_TIME OUT DATE,
STATE OUT BINARY_INTEGER,
OUT_MSGID OUT RAW,
OUT_CORRELATION OUT VARCHAR2,
PRIORITY OUT BINARY_INTEGER,
DELAY OUT BINARY_INTEGER,
EXPIRATION OUT BINARY_INTEGER,
ATTEMPTS OUT BINARY_INTEGER,
EXCEPTION_QUEUE OUT VARCHAR2,
REMOTE_RECIPIENTS OUT AQ$_RECIPIENT_LIST_T,
SENDER_NAME OUT VARCHAR2,
SENDER_ADDR OUT VARCHAR2,
SENDER_PROTOCOL OUT BINARY_INTEGER,
ORIGINAL_MSGID OUT RAW,
PAYLOAD_TYPE IN BINARY_INTEGER DEFAULT OBJECT_TYPE,
RAW_USER_DATA OUT RAW,
OBJECT_USER_DATA OUT "<ADT_1>",
DEQ_CONDITION IN VARCHAR2 DEFAULT NULL,
SIGNATURE IN SYS.AQ$_SIG_PROP DEFAULT NULL,
OUT_SIGN OUT SYS.AQ$_SIG_PROP,
TRANSFORMATION IN VARCHAR2 DEFAULT NULL,
BUFMESG_PROP IN BINARY_INTEGER DEFAULT NULL,
LCR2XML_CONVERT IN BOOLEAN DEFAULT FALSE,
USER_PROPERTY OUT SYS.ANYDATA,
DELIVERY_MODE IN PLS_INTEGER DEFAULT PERSISTENT,
OUT_DELIVERY_MODE OUT PLS_INTEGER
)
IS
EXTERNAL
NAME "kwqidxdequeue102"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
SUBSCRIBER OCISTRING, SUBSCRIBER INDICATOR SB4,
MSGID OCIRAW, MSGID INDICATOR SB4,
CORRELATION OCISTRING, CORRELATION INDICATOR SB4,
DEQUEUE_MODE SB4,
WAIT SB4, WAIT INDICATOR SB4,
VISIBILITY SB4, VISIBILITY INDICATOR SB4,
NAVIGATION SB4,
OUT_MSGID OCIRAW,
OUT_CORRELATION OCISTRING, OUT_CORRELATION INDICATOR SB4,
PRIORITY SB4, PRIORITY INDICATOR SB4,
DELAY SB4, DELAY INDICATOR SB4,
EXPIRATION SB4, EXPIRATION INDICATOR SB4,
STATE SB4, STATE INDICATOR SB4,
ENQUEUE_TIME OCIDATE, ENQUEUE_TIME INDICATOR SB4,
ATTEMPTS SB4, ATTEMPTS INDICATOR SB4,
EXCEPTION_QUEUE OCISTRING, EXCEPTION_QUEUE INDICATOR SB4,
REMOTE_RECIPIENTS OCICOLL,
REMOTE_RECIPIENTS INDICATOR SB2,
SENDER_NAME OCISTRING, SENDER_NAME INDICATOR SB4,
SENDER_ADDR OCISTRING, SENDER_ADDR INDICATOR SB4,
SENDER_PROTOCOL SB4, SENDER_PROTOCOL INDICATOR SB4,
ORIGINAL_MSGID OCIRAW, ORIGINAL_MSGID INDICATOR SB4,
PAYLOAD_TYPE SB4,
RAW_USER_DATA OCIRAW, RAW_USER_DATA INDICATOR SB4,
RAW_USER_DATA MAXLEN SB4,
OBJECT_USER_DATA,
OBJECT_USER_DATA INDICATOR STRUCT,
OBJECT_USER_DATA TDO OCITYPE,
OBJECT_USER_DATA DURATION OCIDURATION,
DEQ_CONDITION OCISTRING, DEQ_CONDITION INDICATOR SB4,
SIGNATURE,
SIGNATURE INDICATOR STRUCT,
SIGNATURE TDO OCITYPE,
OUT_SIGN,
OUT_SIGN INDICATOR STRUCT,
OUT_SIGN TDO OCITYPE,
OUT_SIGN DURATION OCIDURATION,
TRANSFORMATION OCISTRING,
TRANSFORMATION INDICATOR SB4,
BUFMESG_PROP SB4,
BUFMESG_PROP INDICATOR SB4,
LCR2XML_CONVERT SB4,
LCR2XML_CONVERT INDICATOR SB4,
USER_PROPERTY,
USER_PROPERTY INDICATOR SB4,
USER_PROPERTY DURATION OCIDURATION,
DELIVERY_MODE SB4,
OUT_DELIVERY_MODE SB4
)
LIBRARY DBMS_AQ_LIB;
PROCEDURE AQ$_DEQUEUE(
QUEUE_NAME IN VARCHAR2,
SUBSCRIBER IN VARCHAR2 DEFAULT NULL,
MSGID IN RAW DEFAULT NULL,
CORRELATION IN VARCHAR2 DEFAULT NULL,
DEQUEUE_MODE IN BINARY_INTEGER DEFAULT REMOVE,
NAVIGATION IN BINARY_INTEGER DEFAULT FIRST,
VISIBILITY IN BINARY_INTEGER DEFAULT ON_COMMIT,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
ENQUEUE_TIME OUT DATE,
STATE OUT BINARY_INTEGER,
OUT_MSGID OUT RAW,
OUT_CORRELATION OUT VARCHAR2,
PRIORITY OUT BINARY_INTEGER,
DELAY OUT BINARY_INTEGER,
EXPIRATION OUT BINARY_INTEGER,
ATTEMPTS OUT BINARY_INTEGER,
EXCEPTION_QUEUE OUT VARCHAR2,
REMOTE_RECIPIENTS OUT AQ$_RECIPIENT_LIST_T,
SENDER_NAME OUT VARCHAR2,
SENDER_ADDR OUT VARCHAR2,
SENDER_PROTOCOL OUT BINARY_INTEGER,
ORIGINAL_MSGID OUT RAW,
PAYLOAD_TYPE IN BINARY_INTEGER DEFAULT OBJECT_TYPE,
RAW_USER_DATA OUT RAW,
OBJECT_USER_DATA OUT "<ADT_1>",
DEQ_CONDITION IN VARCHAR2 DEFAULT NULL,
SIGNATURE IN SYS.AQ$_SIG_PROP DEFAULT NULL,
OUT_SIGN OUT SYS.AQ$_SIG_PROP,
TRANSFORMATION IN VARCHAR2 DEFAULT NULL,
BUFMESG_PROP IN BINARY_INTEGER DEFAULT NULL,
LCR2XML_CONVERT IN BOOLEAN DEFAULT FALSE)
IS
EXTERNAL
NAME "kwqidxdequeue92"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
SUBSCRIBER OCISTRING, SUBSCRIBER INDICATOR SB4,
MSGID OCIRAW, MSGID INDICATOR SB4,
CORRELATION OCISTRING, CORRELATION INDICATOR SB4,
DEQUEUE_MODE SB4,
WAIT SB4, WAIT INDICATOR SB4,
VISIBILITY SB4, VISIBILITY INDICATOR SB4,
NAVIGATION SB4,
OUT_MSGID OCIRAW,
OUT_CORRELATION OCISTRING, OUT_CORRELATION INDICATOR SB4,
PRIORITY SB4, PRIORITY INDICATOR SB4,
DELAY SB4, DELAY INDICATOR SB4,
EXPIRATION SB4, EXPIRATION INDICATOR SB4,
STATE SB4, STATE INDICATOR SB4,
ENQUEUE_TIME OCIDATE, ENQUEUE_TIME INDICATOR SB4,
ATTEMPTS SB4, ATTEMPTS INDICATOR SB4,
EXCEPTION_QUEUE OCISTRING, EXCEPTION_QUEUE INDICATOR SB4,
REMOTE_RECIPIENTS OCICOLL,
REMOTE_RECIPIENTS INDICATOR SB2,
SENDER_NAME OCISTRING, SENDER_NAME INDICATOR SB4,
SENDER_ADDR OCISTRING, SENDER_ADDR INDICATOR SB4,
SENDER_PROTOCOL SB4, SENDER_PROTOCOL INDICATOR SB4,
ORIGINAL_MSGID OCIRAW, ORIGINAL_MSGID INDICATOR SB4,
PAYLOAD_TYPE SB4,
RAW_USER_DATA OCIRAW, RAW_USER_DATA INDICATOR SB4,
RAW_USER_DATA MAXLEN SB4,
OBJECT_USER_DATA,
OBJECT_USER_DATA INDICATOR STRUCT,
OBJECT_USER_DATA TDO OCITYPE,
OBJECT_USER_DATA DURATION OCIDURATION,
DEQ_CONDITION OCISTRING, DEQ_CONDITION INDICATOR SB4,
SIGNATURE,
SIGNATURE INDICATOR STRUCT,
SIGNATURE TDO OCITYPE,
OUT_SIGN,
OUT_SIGN INDICATOR STRUCT,
OUT_SIGN TDO OCITYPE,
OUT_SIGN DURATION OCIDURATION,
TRANSFORMATION OCISTRING,
TRANSFORMATION INDICATOR SB4,
BUFMESG_PROP SB4,
BUFMESG_PROP INDICATOR SB4,
LCR2XML_CONVERT SB4,
LCR2XML_CONVERT INDICATOR SB4
)
LIBRARY DBMS_AQ_LIB;
PROCEDURE DEQUEUE(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
MESSAGE_PROPERTIES OUT MESSAGE_PROPERTIES_T,
PAYLOAD OUT RAW,
MSGID OUT RAW) IS
DUMMY_BUFFER SYS.AQ$_DUMMY_T;
SENDER_NAME VARCHAR2(30);
SENDER_ADDRESS VARCHAR2(1024);
SENDER_PROTOCOL NUMBER;
SENDER_ID SYS.AQ$_AGENT;
BEGIN
SENDER_ID := SYS.AQ$_AGENT('name', 'address', 0);
AQ$_DEQUEUE(
QUEUE_NAME => QUEUE_NAME,
SUBSCRIBER => DEQUEUE_OPTIONS.CONSUMER_NAME,
MSGID => DEQUEUE_OPTIONS.MSGID,
CORRELATION => DEQUEUE_OPTIONS.CORRELATION,
DEQ_CONDITION => DEQUEUE_OPTIONS.DEQ_CONDITION,
DEQUEUE_MODE => DEQUEUE_OPTIONS.DEQUEUE_MODE,
NAVIGATION => DEQUEUE_OPTIONS.NAVIGATION,
WAIT => DEQUEUE_OPTIONS.WAIT,
VISIBILITY => DEQUEUE_OPTIONS.VISIBILITY,
OUT_MSGID => MSGID,
OUT_CORRELATION => MESSAGE_PROPERTIES.CORRELATION,
ENQUEUE_TIME => MESSAGE_PROPERTIES.ENQUEUE_TIME,
STATE => MESSAGE_PROPERTIES.STATE,
PRIORITY => MESSAGE_PROPERTIES.PRIORITY,
DELAY => MESSAGE_PROPERTIES.DELAY,
EXPIRATION => MESSAGE_PROPERTIES.EXPIRATION,
ATTEMPTS => MESSAGE_PROPERTIES.ATTEMPTS,
EXCEPTION_QUEUE => MESSAGE_PROPERTIES.EXCEPTION_QUEUE,
TRANSFORMATION => DEQUEUE_OPTIONS.TRANSFORMATION,
REMOTE_RECIPIENTS => MESSAGE_PROPERTIES.RECIPIENT_LIST,
SENDER_NAME => SENDER_NAME,
SENDER_ADDR => SENDER_ADDRESS,
SENDER_PROTOCOL => SENDER_PROTOCOL,
ORIGINAL_MSGID => MESSAGE_PROPERTIES.ORIGINAL_MSGID,
PAYLOAD_TYPE => RAW_TYPE,
RAW_USER_DATA => PAYLOAD,
OBJECT_USER_DATA => DUMMY_BUFFER,
SIGNATURE => DEQUEUE_OPTIONS.SIGNATURE,
OUT_SIGN => MESSAGE_PROPERTIES.SIGNATURE,
BUFMESG_PROP => DEQUEUE_OPTIONS.BUFMESG_PROP,
USER_PROPERTY => MESSAGE_PROPERTIES.USER_PROPERTY,
DELIVERY_MODE => DEQUEUE_OPTIONS.DELIVERY_MODE,
OUT_DELIVERY_MODE => MESSAGE_PROPERTIES.DELIVERY_MODE);
IF (SENDER_NAME IS NULL AND SENDER_ADDRESS IS NULL AND
SENDER_PROTOCOL IS NULL) THEN
MESSAGE_PROPERTIES.SENDER_ID := NULL;
ELSE
IF SENDER_NAME IS NOT NULL THEN
SENDER_ID.NAME := SENDER_NAME;
ELSE
SENDER_ID.NAME := NULL;
END IF;
IF SENDER_ADDRESS IS NOT NULL THEN
SENDER_ID.ADDRESS := SENDER_ADDRESS;
ELSE
SENDER_ID.ADDRESS := NULL;
END IF;
IF SENDER_PROTOCOL IS NOT NULL THEN
SENDER_ID.PROTOCOL := SENDER_PROTOCOL;
ELSE
SENDER_ID.PROTOCOL := NULL;
END IF;
MESSAGE_PROPERTIES.SENDER_ID := SENDER_ID;
END IF;
END;
FUNCTION DEQUEUE_ARRAY(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
ARRAY_SIZE IN PLS_INTEGER,
MESSAGE_PROPERTIES_ARRAY OUT MESSAGE_PROPERTIES_ARRAY_T,
PAYLOAD_ARRAY OUT "<COLLECTION_1>",
MSGID_ARRAY OUT MSGID_ARRAY_T) RETURN PLS_INTEGER IS
EXTERNAL
NAME "kwqideqarray0"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
DEQUEUE_OPTIONS,
DEQUEUE_OPTIONS INDICATOR STRUCT,
ARRAY_SIZE UB4,
MESSAGE_PROPERTIES_ARRAY,
MESSAGE_PROPERTIES_ARRAY INDICATOR,
MESSAGE_PROPERTIES_ARRAY TDO OCITYPE,
MESSAGE_PROPERTIES_ARRAY DURATION OCIDURATION,
PAYLOAD_ARRAY, PAYLOAD_ARRAY INDICATOR SB2,
PAYLOAD_ARRAY TDO OCITYPE, PAYLOAD_ARRAY DURATION OCIDURATION,
MSGID_ARRAY,MSGID_ARRAY INDICATOR, MSGID_ARRAY DURATION OCIDURATION,
RETURN UB4)
LIBRARY DBMS_AQ_LIB;
FUNCTION DEQUEUE_ARRAY(
QUEUE_NAME IN VARCHAR2,
DEQUEUE_OPTIONS IN DEQUEUE_OPTIONS_T,
ARRAY_SIZE IN PLS_INTEGER,
MESSAGE_PROPERTIES_ARRAY OUT MESSAGE_PROPERTIES_ARRAY_T,
PAYLOAD_ARRAY OUT "<COLLECTION_1>",
MSGID_ARRAY OUT MSGID_ARRAY_T,
ERROR_ARRAY OUT ERROR_ARRAY_T) RETURN PLS_INTEGER IS
EXTERNAL
NAME "kwqideqarray"
WITH CONTEXT
PARAMETERS(CONTEXT,
QUEUE_NAME OCISTRING, QUEUE_NAME INDICATOR SB4,
DEQUEUE_OPTIONS,
DEQUEUE_OPTIONS INDICATOR STRUCT,
ARRAY_SIZE UB4,
MESSAGE_PROPERTIES_ARRAY,
MESSAGE_PROPERTIES_ARRAY INDICATOR,
MESSAGE_PROPERTIES_ARRAY TDO OCITYPE,
MESSAGE_PROPERTIES_ARRAY DURATION OCIDURATION,
PAYLOAD_ARRAY, PAYLOAD_ARRAY INDICATOR SB2,
PAYLOAD_ARRAY TDO OCITYPE, PAYLOAD_ARRAY DURATION OCIDURATION,
MSGID_ARRAY,MSGID_ARRAY INDICATOR, MSGID_ARRAY DURATION OCIDURATION,
ERROR_ARRAY,ERROR_ARRAY INDICATOR SB2,
ERROR_ARRAY DURATION OCIDURATION,
RETURN UB4)
LIBRARY DBMS_AQ_LIB;
PROCEDURE LISTEN(
AGENT_LIST IN AQ$_AGENT_LIST_T,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
LISTEN_DELIVERY_MODE IN PLS_INTEGER DEFAULT PERSISTENT,
AGENT OUT SYS.AQ$_AGENT,
MESSAGE_DELIVERY_MODE OUT PLS_INTEGER) IS
EXTERNAL
NAME "kwqilisten"
WITH CONTEXT
PARAMETERS(CONTEXT,
AGENT_LIST OCICOLL,
WAIT SB4, WAIT INDICATOR SB4,
LISTEN_DELIVERY_MODE SB4,
AGENT, AGENT INDICATOR STRUCT,
MESSAGE_DELIVERY_MODE SB4)
LIBRARY DBMS_AQ_LIB;
PROCEDURE LISTEN(
AGENT_LIST IN AQ$_AGENT_LIST_T,
WAIT IN BINARY_INTEGER DEFAULT FOREVER,
AGENT OUT SYS.AQ$_AGENT) IS
DELIV_MODE PLS_INTEGER;
BEGIN
LISTEN(AGENT_LIST => AGENT_LIST,
WAIT => WAIT,
LISTEN_DELIVERY_MODE => PERSISTENT,
AGENT => AGENT,
MESSAGE_DELIVERY_MODE => DELIV_MODE);
END LISTEN;
PROCEDURE BIND_AGENT(
AGENT IN AQ$_AGENT,
CERTIFICATE_LOCATION IN VARCHAR2 DEFAULT NULL) IS
BEGIN
DBMS_AQADM_SYS.I_BIND_AGENT(AGENT => AGENT,
CERTIFICATE_LOCATION => CERTIFICATE_LOCATION);
END BIND_AGENT;
PROCEDURE UNBIND_AGENT(
AGENT IN AQ$_AGENT) IS
BEGIN
DBMS_AQADM_SYS.I_UNBIND_AGENT(AGENT => AGENT);
END UNBIND_AGENT;
PROCEDURE REGISTER(
REG_LIST IN SYS.AQ$_REG_INFO_LIST,
REG_COUNT IN NUMBER) IS
EXTERNAL
NAME "kwqiplsregister"
WITH CONTEXT
PARAMETERS(CONTEXT,
REG_LIST OCICOLL,
REG_COUNT OCINUMBER)
LIBRARY DBMS_AQ_LIB;
PROCEDURE UNREGISTER(
REG_LIST IN SYS.AQ$_REG_INFO_LIST,
REG_COUNT IN NUMBER) IS
EXTERNAL
NAME "kwqiplsunregister"
WITH CONTEXT
PARAMETERS(CONTEXT,
REG_LIST OCICOLL,
REG_COUNT OCINUMBER)
LIBRARY DBMS_AQ_LIB;
PROCEDURE POST(
POST_LIST IN SYS.AQ$_POST_INFO_LIST,
POST_COUNT IN NUMBER) IS
EXTERNAL
NAME "kwqiplspost"
WITH CONTEXT
PARAMETERS(CONTEXT,
POST_LIST OCICOLL,
POST_COUNT OCINUMBER)
LIBRARY DBMS_AQ_LIB;
END;
PL/SQL procedure successfully completed.
SQL>
这真不错,一定要改成java的
外部链接:
ZLIB Compressed Data Format Specification version 3.3
GZIP file format specification version 4.3
Multipurpose Internet Mail Extensions - (MIME) Part One: - Format of Internet Message Bodies
Adler-32
Cyclic redundancy check
加密方法见:how to protect your plsql code
-fin-

No comments:
Post a Comment