<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Oracle Tales &#187; Scripts</title>
	<atom:link href="http://www.stijf.com/wordpress/category/oracle/scripts/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stijf.com/wordpress</link>
	<description>Just another Oracle weblog</description>
	<lastBuildDate>Mon, 28 Jun 2010 16:58:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Writing efficient SQL</title>
		<link>http://www.stijf.com/wordpress/2010/03/writing-efficient-sql/</link>
		<comments>http://www.stijf.com/wordpress/2010/03/writing-efficient-sql/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 15:30:04 +0000</pubDate>
		<dc:creator>Arian Stijf</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[eBS]]></category>
		<category><![CDATA[cardinality]]></category>
		<category><![CDATA[DBA]]></category>
		<category><![CDATA[efficient]]></category>
		<category><![CDATA[full table scan]]></category>
		<category><![CDATA[hash]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[join]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[nested loop]]></category>
		<category><![CDATA[optimizer]]></category>
		<category><![CDATA[rowid]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.stijf.com/wordpress/?p=402</guid>
		<description><![CDATA[The other day I gave a presentation on &#8216;Efficient SQL&#8217;. It was the first of a number of presentations, so I started with explaining some basic concepts. 
Maybe it will be interesting for other people too. So here is the summary of it. 
&#160;
MAIN RULES OF EFFICIENT SQL
&#160;
The main rules of efficient SQL are:
&#183;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Less [...]]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">The other day I gave a presentation on &lsquo;Efficient SQL&rsquo;. It was the first of a number of presentations, so I started with explaining some basic concepts. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Maybe it will be interesting for other people too. So here is the summary of it. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span style="mso-ansi-language: en-us"><font size="4"><font color="#4f81bd"><font face="Cambria">MAIN RULES OF EFFICIENT SQL<o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font face="Calibri"><font size="3"><font color="#000000">The main rules of efficient SQL are:<o:p></o:p></font></font></font></span></p>
<p class="MsoListParagraphCxSpFirst" style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt; mso-list: l1 level1 lfo1"><font color="#000000"><span style="font-family: symbol; mso-ansi-language: en-us; mso-fareast-font-family: symbol; mso-bidi-font-family: symbol"><span style="mso-list: ignore"><font size="3">&middot;</font><span style="font: 7pt 'times new roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="mso-ansi-language: en-us"><font face="Calibri"><font size="3">Less is better<o:p></o:p></font></font></span></font></p>
<p class="MsoListParagraphCxSpLast" style="text-indent: -18pt; margin: 0cm 0cm 10pt 36pt; mso-list: l1 level1 lfo1"><font color="#000000"><span style="font-family: symbol; mso-ansi-language: en-us; mso-fareast-font-family: symbol; mso-bidi-font-family: symbol"><span style="mso-list: ignore"><font size="3">&middot;</font><span style="font: 7pt 'times new roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri">More is better<o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">That seems easy, since everything is better. But let me explain. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><font size="3"><font face="Calibri"><font color="#000000"><b style="mso-bidi-font-weight: normal"><span style="mso-ansi-language: en-us">Less is better</span></b><span style="mso-ansi-language: en-us">: The less I/O generated the better your statement will perform. Even though somebody might be able to think of some exceptions. It is safe to keep this as a rule of thumb.<o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Avoid unnecessary work for your query. You can do that by selecting only the rows that you need. (That sounds obvious, but I&rsquo;ll give an example soon). In complex queries, make sure that you select the smallest possible set in every part of your query. Rather than collecting a huge amount of data and then selecting what you need, select the smallest set possible before you join.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Also select only the columns that you need. One argument is that it might give Oracle a chance to skip the table access, and use an index-only access. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Think about the use of &lsquo;select *&rsquo;. Most often this is a complete waste of resources. In packaged software, it can easily lead to bugs when the table definition changes. In all situations, it will cost extra resources to collect the data, send them to the client and then filter out the data that is not needed. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></b></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><font size="3"><font face="Calibri"><font color="#000000"><b style="mso-bidi-font-weight: normal"><span style="mso-ansi-language: en-us">More is better</span></b><span style="mso-ansi-language: en-us">: This is of course not about I/O. It is about the information that you give Oracle about your data and your query. Add as many predicates as possible, since it can help the optimizer do a better job. When 2 tables are joined on an ID-column. But you know, from your knowledge of the data, that another column can also be used as a join-condition then use both join conditions. <o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">It will help the optimizer work out the relationship between the tables, and select the optimal plan. If 2 columns have related data, and the predicate on one column means that the other column is restricted too, put a predicate on both columns. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Consider the following: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create table Xxx_inner <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>2<span style="mso-spacerun: yes">&nbsp; </span>as select * from dba_objects<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>3<span style="mso-spacerun: yes">&nbsp; </span>where object_type=&#39;TABLE&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Table created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create index xxx_inner_n1 on xxx_inner(object_id,object_type);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Index created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create index xxx_inner_n2 on xxx_inner(Object_type);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Index created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create table xxx_outer <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>2<span style="mso-spacerun: yes">&nbsp; </span>as select * from dba_objects;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Table created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; insert into<span style="mso-spacerun: yes">&nbsp; </span>xxx_outer <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>2<span style="mso-spacerun: yes">&nbsp; </span>select * from dba_objects;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">71136 rows created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create index xxx_outer_n1 on xxx_outer(Object_id,object_type);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Index created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create index xxx_outer_n2 on xxx_outer(object_type);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Index created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; analyze table xxx_inner compute statistics;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Table analyzed.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; analyze table xxx_outer compute statistics;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Table analyzed.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; set autotrace traceonly;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select o.*<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>2<span style="mso-spacerun: yes">&nbsp; </span>from xxx_outer o<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>3<span style="mso-spacerun: yes">&nbsp; </span>where o.object_id in (select object_id from xxx_inner i)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>4<span style="mso-spacerun: yes">&nbsp; </span>and o.object_type=&#39;PROCEDURE&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">no rows selected<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Statistics<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>113<span style="mso-spacerun: yes">&nbsp; </span>consistent gets<o:p></o:p></font></span></b></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>1064<span style="mso-spacerun: yes">&nbsp; </span>bytes sent via SQL*Net to client<o:p></o:p></font></span></b></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><i style="mso-bidi-font-style: normal"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Consistent gets is the number of times data was read from the buffer cache into our session memory. It is therefore a good measure of the amount of work a session needed to do while executing a query. <o:p></o:p></font></font></font></span></i></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select o.*<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>2<span style="mso-spacerun: yes">&nbsp; </span>from xxx_outer o<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>3<span style="mso-spacerun: yes">&nbsp; </span>where o.object_id in (select object_id<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>from xxx_inner i <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 108pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>where i.object_type=o.object_type)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>4<span style="mso-spacerun: yes">&nbsp; </span>and o.object_type=&#39;PROCEDURE&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">no rows selected<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Statistics<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>15<span style="mso-spacerun: yes">&nbsp; </span>consistent gets<o:p></o:p></font></span></b></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>1064<span style="mso-spacerun: yes">&nbsp; </span>bytes sent via SQL*Net to client<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select o.object_id<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>2<span style="mso-spacerun: yes">&nbsp; </span>from xxx_outer o<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>3<span style="mso-spacerun: yes">&nbsp; </span>where o.object_id in (select object_id<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>from xxx_inner i <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 108pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>where i.object_type=o.object_type)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>4<span style="mso-spacerun: yes">&nbsp; </span>and o.object_type=&#39;PROCEDURE&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">no rows selected<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Statistics<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>15<span style="mso-spacerun: yes">&nbsp; </span>consistent gets<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>254<span style="mso-spacerun: yes">&nbsp; </span>bytes sent via SQL*Net to client<o:p></o:p></font></span></b></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Here we see two tables created from &lsquo;DBA_OBJECTS&rsquo;. We join these tables on &lsquo;OBJECT_ID&rsquo;. In this case, we have some information that the Oracle Optimizer does not have. The object_id,object_type combination is the same in both tables. Unaware of this fact, Oracle has to search all object_id&rsquo;s for &lsquo;XXX_INNER&rsquo;. When we tell Oracle that the object_type is the same, it can skip most of the records resulting in less I/O. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">When we finally tell Oracle that we&rsquo;re only interested in the object_id, we also reduce the network traffic by 75%.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span style="mso-ansi-language: en-us"><font size="4"><font color="#4f81bd"><font face="Cambria">The concepts<o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font color="#000000"><font face="Calibri"><font size="3">For every query, Oracle will have to collect some data. And in most cases, it will have to join one or more data-sets. Let&rsquo;s see what options Oracle has for collecting data and joining the data together. In this presentation we only look at the basic options, not the more sophisticated features. So don&rsquo;t expect this list to be complete. We will see how data can be retrieved from the database, and how tables / data-sets can be joined together. We will not yet go into the most efficient way to do it, because the most efficient way to retrieve data depends on many factors. Only when you have a basic understanding of the concepts, we can start thinking about the most efficient way to do things. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h3 style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><font color="#4f81bd"><font face="Cambria"><font size="3">Collecting data<o:p></o:p></font></font></font></span></h3>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font face="Calibri"><font size="3"><font color="#000000">To gather data from a table, Oracle can use 3 different options, called &lsquo;Access Paths&rsquo;:<o:p></o:p></font></font></font></span></p>
<p class="MsoListParagraphCxSpFirst" style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo2"><font color="#000000"><span style="font-family: symbol; mso-ansi-language: en-us; mso-fareast-font-family: symbol; mso-bidi-font-family: symbol"><span style="mso-list: ignore"><font size="3">&middot;</font><span style="font: 7pt 'times new roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="mso-ansi-language: en-us"><font face="Calibri"><font size="3">Full Table Scan<o:p></o:p></font></font></span></font></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt; margin: 0cm 0cm 0pt 36pt; mso-list: l0 level1 lfo2"><font color="#000000"><span style="font-family: symbol; mso-ansi-language: en-us; mso-fareast-font-family: symbol; mso-bidi-font-family: symbol"><span style="mso-list: ignore"><font size="3">&middot;</font><span style="font: 7pt 'times new roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="mso-ansi-language: en-us"><font face="Calibri"><font size="3">Index Scan / Table Access by Rowid<o:p></o:p></font></font></span></font></p>
<p class="MsoListParagraphCxSpLast" style="text-indent: -18pt; margin: 0cm 0cm 10pt 36pt; mso-list: l0 level1 lfo2"><font color="#000000"><span style="font-family: symbol; mso-ansi-language: en-us; mso-fareast-font-family: symbol; mso-bidi-font-family: symbol"><span style="mso-list: ignore"><font size="3">&middot;</font><span style="font: 7pt 'times new roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri">Index Scan<o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">The Full Table Scan (FTS) is exactly as the name implies, a full scan of the table. All the records of the table are read into memory, and checked against the predicates in the query (where clause or Join condition). The blocks of the table don&rsquo;t have to be read in any particular order. Oracle will just try to get the blocks of the table as quickly as possible. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">When a sizable part of the table needs to be selected, this will be the most efficient access path. It will be the only one available, if there is no predicate available that matches (part of) an index. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">The &lsquo;Index Scan / Table Access by Rowid&rsquo;, will use an index to decide which rows need to be read into memory. Then based on the rowid in the index, the correct row will be retrieved. The rowid refers directly to the position on disk where the row is located.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">And the last option is the &lsquo;Index Scan&rsquo;. The difference with the previous option is that Oracle does not need to get the table data anymore. The data in the index is sufficient to answer the query. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">So which one of these is the most efficient? <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">As usual, it depends. Many people think a FTS is less efficient than an Index Scan. But consider this: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create table xxx_access as select * from dba_objects;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Table created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create index xxx_access_n1 on xxx_access (object_id);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Index created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select object_id,object_name from xxx_access where object_id&gt;0;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">71139 rows selected.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Elapsed: 00:00:08.02<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Execution Plan<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>0<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SELECT STATEMENT Optimizer=ALL_ROWS (Cost=287 Card=78799 Bytes=6225121)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>0<span style="mso-spacerun: yes">&nbsp;&nbsp; </span><b style="mso-bidi-font-weight: normal">TABLE ACCESS (FULL)</b> OF &#39;XXX_ACCESS&#39; (TABLE) (Cost=287 Card=78799 Bytes=6225121)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Statistics<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>5803<span style="mso-spacerun: yes">&nbsp; </span>consistent gets<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>2727442<span style="mso-spacerun: yes">&nbsp; </span>bytes sent via SQL*Net to client<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>71139<span style="mso-spacerun: yes">&nbsp; </span>rows processed<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select /*+ INDEX (xxx_access) */ object_id, object_name from xxx_access where object_id&gt;0;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">71139 rows selected.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Elapsed: 00:00:10.05<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Execution Plan<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">0<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>SELECT STATEMENT Optimizer=ALL_ROWS (Cost=1290 Card=78799 Bytes=6225121)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">1<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>0 <span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;</span><b style="mso-bidi-font-weight: normal">TABLE ACCESS (BY INDEX ROWID)</b> OF &#39;XXX_ACCESS&#39; (TABLE) (Cost=1290 Card=78799 By=6225121)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">2<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span><b style="mso-bidi-font-weight: normal">INDEX (RANGE SCAN)</b> OF &#39;XXX_ACCESS_N1&#39; (INDEX) (Cost=161 Card=78799)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Statistics<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>10771<span style="mso-spacerun: yes">&nbsp; </span>consistent gets<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>2727442<span style="mso-spacerun: yes">&nbsp; </span>bytes sent via SQL*Net to client<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>71139<span style="mso-spacerun: yes">&nbsp; </span>rows processed<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">The FTS needs 5803 I/O operations. While the Index Scan takes almost double at 10771 I/O&rsquo;s and 2 seconds more. (out of 10 sec&rsquo;s!)<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Imagine what will happen, when you try this with a multi-million row table. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">But for sure an Index Scan will be the most efficient when it can be done? Again, it depends. Consider this: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create table test1 (l number, txt varchar2(500));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Table created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; create index test1_idx on test1(l,txt);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Index created.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>2<span style="mso-spacerun: yes">&nbsp; </span>For I In (Select<span style="mso-spacerun: yes">&nbsp; </span>Level L, Rpad(&#39;ABC&#39;,500,To_char(Level)) Txt <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>3<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>From Dual Connect By Level &lt;= 50000) Loop<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>4<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Insert Into Test1 Values (I.L,I.Txt);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>5<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>If Mod(I.L,5)!=0 Then<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>6<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Delete From Test1 Where L=I.L;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>7<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>End If;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>8<span style="mso-spacerun: yes">&nbsp; </span>End Loop;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>9<span style="mso-spacerun: yes">&nbsp; </span>Commit;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span>10<span style="mso-spacerun: yes">&nbsp; </span>end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span>11<span style="mso-spacerun: yes">&nbsp; </span>/<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">PL/SQL procedure successfully completed.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; analyze table test1 compute statistics;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Table analyzed.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; set autotrace traceonly;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select l from test1 t where l&gt;0;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">10000 rows selected.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Execution Plan<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>0<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SELECT STATEMENT Optimizer=ALL_ROWS (<b style="mso-bidi-font-weight: normal">Cost=773</b> Card=10000 Bytes=40000)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>0<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>TABLE ACCESS (FULL) OF &#39;TEST1&#39; (TABLE) (Cost=773 Card=10000 Bytes=40000)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Statistics<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b style="mso-bidi-font-weight: normal">1393<span style="mso-spacerun: yes">&nbsp; </span>consistent gets<o:p></o:p></b></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>140549<span style="mso-spacerun: yes">&nbsp; </span>bytes sent via SQL*Net to client<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>10000<span style="mso-spacerun: yes">&nbsp; </span>rows processed<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select /*+ INDEX(t,test1_idx) */ l from test1 t where l&gt;0;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">10000 rows selected.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Execution Plan<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>0<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SELECT STATEMENT Optimizer=ALL_ROWS (<b style="mso-bidi-font-weight: normal">Cost=3338</b> Card=10000 Bytes=40000)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>0<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>INDEX (RANGE SCAN) OF &#39;TEST1_IDX&#39; (INDEX) (Cost=3338 Card=10000 Bytes=40000)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Statistics<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>4003<span style="mso-spacerun: yes">&nbsp; </span>consistent gets<o:p></o:p></font></span></b></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>140549<span style="mso-spacerun: yes">&nbsp; </span>bytes sent via SQL*Net to client<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>10000<span style="mso-spacerun: yes">&nbsp; </span>rows processed<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h2 style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><font size="4"><font color="#4f81bd"><font face="Cambria">How can the Full Table Scan be more efficient?<o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Good question. To answer it, we have to look at the amount of work that Oracle has to do to get the data. We start with the FTS:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">As mentioned, a FTS needs to scan all the blocks in a table. In my system, the table XXX_ACCESS was created with 1152 blocks. So basically Oracle will read 1152 blocks. However Oracle has optimized this process. One of the most noticeable optimizations is the db_file_multiblock_readcount, which tells Oracle to read multiple blocks in one I/O operation. So instead of doing 1152 reads, Oracle reads 4 (on my system) blocks at a time in 288 reads. (Take a look at the explain plan above again, and notice the cost of the Full Table Scan!). <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Now how much work does an Index Scan / Table Access rowid need to do? <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">To answer that question, you need to know the structure of an index. An index in Oracle is a B-Tree structure. It looks like an inverted tree, with the top being the &lsquo;Root-block&rsquo;. The lowest level contains the &lsquo;Leaf blocks&rsquo;, that hold the index keys and the matching rowid&rsquo;s. The index keys in the leaf blocks are sorted. So the lowest value will be in the utter-left block, the highest in the far right block.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">All upper level blocks show the ranges that the lower level blocks contain. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">To find a range of data, Oracle starts at the root block, and follows the pointers to the first leaf block containing an index key within the range. From here Oracle can walk the leaf blocks from left to right (or right to left, if needed). <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">See the following picture: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri"><o:p><img alt="" height="282" src="http://www.stijf.com/wordpress/wp-content/uploads/Index(1).jpg" width="906" /></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">That means that Oracle has to walk the &lsquo;height&rsquo; of the index (Index level). Then read a number of leaf blocks. And for every entry in the leaf-block, it needs to retrieve the data from the table.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">In the worst case scenario, the data is spread throughout the table. And for every index key, Oracle has to retrieve a different table block. In that case, the amount of work is: (index level &ndash; 1) + number of index leaf blocks + (Number of keys * Number of table blocks). <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">It will be obvious that is a lot more I/O than just reading the table once. The formula is not completely correct, because Oracle does not read the same table block twice, when the next rowid from the index is in the same block.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">But the formula should make it clear that with more data being retrieved, the cost of the index access / Table Rowid, is increasing faster than the cost of the Full Table Scan. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span style="mso-ansi-language: en-us"><font size="4"><font color="#4f81bd"><font face="Cambria">What happened to Index Only Access?<o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">The example showed that a Full Table Scan is still more efficient than using only an index. Even though Oracle would only have to walk through the index to retrieve all the data. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">This is caused by a feature of the index structure and the way the data was entered into the table. This caused the index to grow bigger than the actual table:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select table_name,num_rows,blocks from dba_Tables where table_name=&#39;TEST1&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">TABLE_NAME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>NUM_ROWS<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>BLOCKS<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">TEST1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>10000<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b style="mso-bidi-font-weight: normal">772</b><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SQL&gt; select index_name, distinct_keys, leaf_blocks from dba_indexes where index_name=&#39;TEST1_IDX&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">INDEX_NAME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DISTINCT_KEYS LEAF_BLOCKS<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8211;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">TEST1_IDX<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>10000<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><b style="mso-bidi-font-weight: normal">3334</b><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font color="#000000"><font size="3"><font face="Calibri">This situation can occur when a lot of inserts and deletes are taking place in the same transaction. The space for the deleted table rows can be reused immediately. But the space for the deleted index keys only comes available after the commit. NOTE: The space in the index will be reusable after the commit!<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us"><font color="#000000"><font size="3"><font face="Calibri">Another situation where this can happen is with an index key based on a sequence. So new data is only inserted at the end of the range. When you delete a lot of values on the lower end of the range (but not all). Richard Foote has some excellent material on his website about Deleted Index Keys: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><a href="http://en.wordpress.com/tag/index-delete-operations/"><font face="Calibri" size="3">http://en.wordpress.com/tag/index-delete-operations/</font></a></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-CA"><font color="#4f81bd" face="Cambria" size="4">Join Mechanisms</font></span></h2>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-CA"><o:p><font color="#4f81bd" face="Cambria" size="4">&nbsp;</font></o:p></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">I hope you&rsquo;re not yet in despair. Because so far we have only retrieved data from single tables. In most cases, we need to join tables together to get our data. Now we will look at 3 basic forms of joining data-sets together. Note that it is not necessarily only tables that we join. It can also be a result set from an earlier part of your query. For example we might collect some data from an Index Only Access and then join it to data from a Full Table Scan. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">Oracle has 3 mechanisms to perform Joins: Nested Loops, Hash Join, Merge Join. Let&rsquo;s take a look at them.</font></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-CA"><font color="#4f81bd" face="Cambria" size="4">Nested Loops</font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">The Nested Loop join loops over a smaller data set, and for every record in that set, it searches a matching record in the second data set. Visually, it looks like this:</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3"><img alt="" height="347" src="http://www.stijf.com/wordpress/wp-content/uploads/Nested Loops.jpg" width="575" />&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">You can see that the first set is fully scanned. This is the Outer or Driving Set. For every record in this set, we look up a matching record in the second set. Usually this will be done through an index, even though this is not mandatory.</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">The efficiency of this mechanism depends on the size of Set A, and the number of records we need to<span style="mso-spacerun: yes">&nbsp; </span>retrieve from Set B.</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">We will see some situations where a Nested Loops join is more or less efficient. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">The second join mechanism is the</font></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-CA"><font color="#4f81bd" face="Cambria" size="4">Hash Join</font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">For a Hash Join, Oracle builds a hash table from a (preferably) smaller data set (Build set), where the key is a hash value derived from the join columns. Then Oracle reads the second data set (Probe set), derives the hash value on the join columns and probes the hash table for a match. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">Schematically, it looks like this: </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><img alt="" height="311" src="http://www.stijf.com/wordpress/wp-content/uploads/Hash.jpg" width="660" /></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">For the Hash Join, it is not relevant if the data is retrieved through an index, or from a Table scan. Both data sets need to be read fully. One of the features of hashing is that collisions may occur. A collision means that 2 different values result in the same hash value. Therefore, the full data set is stored in the hash table. When a match is found on the hash values, Oracle double-checks the actual values of the join columns to see if they match. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">There is a major drawback for this mechanism. When the hash table does not fit into the available memory (hash_area_size). Then Oracle will dump parts of the hash table to disk (Temp tablespace). A bitmap of all possible hash values is kept in memory with a bit indicating if a hash-value is used or not. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">So while scanning the Probe set, Oracle can check if there is a possible match. If that part of the hash table is not in memory, Oracle will set aside the records from the probe table. When finished with the probe set, the next part of the hash table is loaded into memory, and the records that were set aside are tested again. This is called a &lsquo;Multipass Hash Join&rsquo;, instead of the &lsquo;Onepass Hash Join&rsquo; where the entire hash table is held in memory.</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">You can imagine that the hash join can be very efficient even without index access. However it can deteriorate quickly when a &lsquo;Multipass Hash Join&rsquo;<span style="mso-spacerun: yes">&nbsp; </span>is needed. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">That brings us to the </font></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-CA"><font color="#4f81bd" face="Cambria" size="4">Merge Join</font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">A Merge Join is possible when 2 datasets are both ordered on their join columns. The datasets can then be read in an alternating way. You start reading the first dataset, then you read the second dataset until you find a matching value, or exceed the value. If it is a matching value, you can start building your result set. If you pass the join value, you continue reading the first dataset again. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">Schematically, it looks like this: </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span style="mso-ansi-language: en-us; mso-no-proof: yes"><v:shape id="Object_x0020_5" o:gfxdata="UEsDBBQABgAIAAAAIQC75UiUBQEAAB4CAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbKSRvU7DMBSF<br />
dyTewfKKEqcMCKEmHfgZgaE8wMW+SSwc27JvS/v23KTJgkoXFsu+P+c7Ol5vDoMTe0zZBl/LVVlJ<br />
gV4HY31Xy4/tS3EvRSbwBlzwWMsjZrlprq/W22PELHjb51r2RPFBqax7HCCXIaLnThvSAMTP1KkI<br />
+gs6VLdVdad08ISeCho1ZLN+whZ2jsTzgcsnJwldluLxNDiyagkxOquB2Knae/OLUsyEkjenmdzb<br />
mG/YhlRnCWPnb8C898bRJGtQvEOiVxjYhtLOxs8AySiT4JuDystlVV4WPeM6tK3VaILeDZxIOSsu<br />
ti/jidNGNZ3/J08yC1dNv9v8AAAA//8DAFBLAwQUAAYACAAAACEArTA/8cEAAAAyAQAACwAAAF9y<br />
ZWxzLy5yZWxzhI/NCsIwEITvgu8Q9m7TehCRpr2I4FX0AdZk2wbbJGTj39ubi6AgeJtl2G9m6vYx<br />
jeJGka13CqqiBEFOe2Ndr+B03C3WIDihMzh6RwqexNA281l9oBFTfuLBBhaZ4ljBkFLYSMl6oAm5<br />
8IFcdjofJ0z5jL0MqC/Yk1yW5UrGTwY0X0yxNwri3lQgjs+Qk/+zfddZTVuvrxO59CNCmoj3vCwj<br />
MfaUFOjRhrPHaN4Wv0VV5OYgm1p+LW1eAAAA//8DAFBLAwQUAAYACAAAACEA2cWVB4UTAAB7egEA<br />
HwAAAGNsaXBib2FyZC9kcmF3aW5ncy9kcmF3aW5nMS54bWzsXV1zm0gWfd+q/Q8Ur1vZGCH04RrN<br />
lOOJs1vlybqizM5zGyGJSQu0gGU5v37v7W4+5CC3Y+TEypw8OEggaA6X7j6n78dPv2xX0tlEWR6n<br />
ycT1/nniOlESprM4WUzc3z9evBq5Tl6IZCZkmkQT9y7K3V9+/vvffhKni0ysl3Ho0BmS/FRM3GVR<br />
rE9fv87DZbQS+T/TdZTQvnmarURBH7PF61kmbunMK/m6d3IyeL0SceL+XJ/qV1EI5yaLn3AqmYaf<br />
otm5SDYip1PK8LT5jWmjDLufWZwmm3fZerq+yrjl4fvNVebEs4lLyCViRRC5r80Ocxh9fH3vV4v6<br />
BNt5tuLj0/nc2aqz3PFfdY5oWzghfRl4/ngwpCcR0j5vFAz90chcZfkf/TsvGHqDk77r0BG93igY<br />
j3vlEW8tZ6HG6UbQRqNhapNbtud+B+X9vsvSm7UTdLptb9wbDcem+UOvP+h5uxAMR8HIMwjQsQM6<br />
VsNcAdDz+n3PnMEPhn3fgBguSwCa5xj1+73BkM+x5/bztb73Lx/0sLzxD1FIb8ZCRs6gunk+vHzg<br />
5U9z+s65vv0tnZF1iJsiVTZ/78F7+9pfGoGl9eJ0neXFuyhdObwxcTNqnbqQ2FzmhW5TeYi6tfQi<br />
llKBKBPnduKOg15AJibWE3cuRUGbqzXZdZ4sXEfIBXUPYZGpM+apjGf8az6Pet2jc5k5GyEnbrFV<br />
T45Q3TmKr/yryJf6ILVLY0bGk8xUK5aRmL1NZk5xtyacEupuXG7WKpq5jozo8ryljixELB9zJDVC<br />
JtzGaD4nNCoY+IHw18V2qp5ysX2Tzu74m2v6nx4WdYiE4DLNPlMTqJsjFP53IzJqkPx3khNUZGv0<br />
vhfqQz8Y9uhD1txz3dyT3KzOU4LGo4MKqTbpeJGEdAECrNw8L+gT7QjT1VoUl8l0Td2VpwBn9D5u<br />
/xDZ2jzcgqzifTpdinXU9oz1scq29R3xvcm8mBZ3MuLtWTS/0hjQ1ge6Y0mGTKDLV+8vGWNCrj5E<br />
bqTHJqyNQKq7UC2dp0lxpizjWuS6Ifk6fBPN+RK0dRUW+nmrV5FNorn3bF48cJzZa5r3Kcp4eKJR<br />
w2qA14tWAySLjhNlW3MRkn2dZbGgWwmXIssjethllysax/xjlbyKhLa5ML+3I8xroAhBhZlBSqG9<br />
kT0GbSWyy4mrbIQfukILEE5cxnYPhIybgdCvIVTvHCB8nBUybgbCfg2h5/MkARg+DkMGzmAYNDAc<br />
9UYjYPjI3pCBMxgOagxpgkpm2LRD6uY/iuvpZzO00i4aKdUYE4nL5E32SY2eqg83H+mQJY1ZxCau<br />
bpKQOnA9Uh7deMGwGISGDYRo/sqDXT1g/HURYlgMQqMaIYanD4RoWreRDItBaNxAaBAMd3v7v64N<br />
MSx6htaYBKu5f40XvW00Wfugep04mUWJmhV+7Rt4b05ME2uadz7cZ0me6vPza06ZPeogybz1XLx5<br />
xEGn19c3RNw+bhWrur6Zfq42L2hqX314T1zMEK/rikQZm4uS2ZXIBHOITzereJX+SfINQdkkFE5O<br />
HbunRs1rDa/6e1OyvLzI4k+K803VlmGhmgImrB/J+HP0L/UjZhoyZimKLpKvinMZCaIGmhdotpeU<br />
zLbifztU9B5h3cMXmpSRXrLHsAe6XI2GsjayMPqyppc3eTRds2ygH6vmn4oX6cfPf5PN1EBba0sk<br />
fGhtqZYclHah9Cc+XJ+v/mnOZn1QycHrk0KjdA5qb6ldlHrCIyWHhx6DCEN649qpG+QJyBOQJ7hz<br />
iCBPTNw9Pfaj+ugDQAh5orMVQp7o/iZDnuiOIeQJpYU/oMVCnrAhBHnChhDkCRtCkCd46bhUO0gG<br />
Mat/kCf2TXZflDwx/lKeKP1T3is1o7s8EZyc+CfGzaLNI+IQ8kSlG7HbADwi4BEBjwhIDtqBBZKD<br />
UrLrkfno1lkhOXSny5AcumMIycFGhiA52BCC5GBDCJKDDSFIDpAc9rjw75nsvijJwSPvj/suEWPj<br />
qX0ozWHQ972RCaN5Ls0BLhE7sR3kW4KIDRWDwqv9iNhAxMZRBL3AJQIuETyd2jNz+FaeOdAnoE9w<br />
9OjzRvhBn7BxS+gTNoSgT9gQgj4BfeKY9QkK9r+vT5BmoaJoKK7jMDEblAhj7JtEGBAoKCeFxhcp<br />
JZBSoi31BFJK7IYYNvzt6qDCHzMrBwQKCBQQKNpcbI/OkQcOFDbqBIHChhAEChtCEChsCEGggEDx<br />
wgUKWk2vsnhWG3vSeXLqTC1Y6Hyenl+JFe90ttIyiMN85AVqdVKde6ZMCWHymFJqnpP+mHKEcj5S<br />
ldDTiB/7dYpSHXliRk8dAVJymraMpvtTenqU+PILtabMMHootaaZlNSCwtNTbCCGBVk96cU0s/pm<br />
Eh79+tKOqypZFLJ6Iqvn41IbIW2GSm78nf0bEMPS3b8BPiLdMYQEYyOHkGBsCEGCsSEECcaGECQY<br />
SDAvXILhFdd9WT29qoRKndaTlIjD+og8TnXgiz5ddEAQC4JY6hIlypJQdkRXx/lWru8s5aiQIZQd<br />
4eouT6ncAh8R+IjARwQ+IoyAg7IjlFSf6lTResFftDALBAob/YZAYUMIAgUEimMWKFpKnZJocViB<br />
IkBmT9Q6pQJIZQW3WkhArVNm9A+Ja995PRqiQ2fGDNGhM4Twiui+og+viO4YwivCRofgFWFDCKKD<br />
DSGIDjaEIDpAdDhm0aGl2Kl36GqnSO35q8iXuraBIpha1EHmDGTOQOYMWvniKtOuUl/WYZ0bow2a<br />
ei8yZ9C66b3y54BQbiQEiu7kGgJFdwwhUNioEwQKG0IQKGwIQaCwIQSBAgLFMQsULeVOvUPXO0Vq<br />
TwgUTlbI81QVRnZEEi7TbOIWECjaWDhSeyK1pybazkpklxN37PUpBRG9LHKhHZnpXVKO3RAoONBP<br />
54dRkVoQKFik6uyFAoGiO4YQKGzUCQKFDSEIFDaEIFDYEIJAAYHiiAWKXkttVO/AxVH9ntcfjEws<br />
yP5slsgr4XBBsomLEA+EeNR5OT9FGbFSr0cMFSEe8KBQkdYQKFbJqzA3IwYEiqXI8qgw6RggUGhf<br />
xe8c8AaBwkadIFDYEIJAYUMIAoUNIQgUECiOWaBoKY5KosVB80r4lFei7xu3DAgUKI4KD4p5Ydzx<br />
4UGBEI8PnC+UPAFo+R85KDqv/iPEo/vqPzwoumMIgcJGnSBQ2BCCQGFDCAKFDSEIFBAoXrhAQXNf<br />
Vb6UOVG4TaamTMc5b+pc+uH7zVXmxDOqYOqX9UGnRSbixbJwzrIsvXXO0ySJwiLNnF6v0i/MKXRJ<br />
jWTTOGNOZ3aub39LZ+QSIG6KVC3/cq1SJ0tprSfgsqlmUbgspNofBAOfEnFSIVXfH/f6I5MLo9Q0<br />
PKrw4dPVnZCO8IKRkjz21/LIzQ1ULfdUG8TmMi90izkB47soXdlWpkUYRknhmQW7nTSFMnFuqbkj<br />
j12wQ7GeuHMqhECbqzWhmSeL0jE7LDJ1+UUmZmwvzlzGdLT2liBI/oiL5XQp2INCt3ORUzu5ZYvc<br />
Wac5L4+pdmaL63OZ6UWi4O347cWFadcibx7tj+nfl78YBee9Pb8YVg8kb17jvP/r4O2b1mvQTZfP<br />
cOcnFxdv31ycNX7CFljejowTivFYKBf1PBQyIpyMIlbEMuICMQ45sL8yJ3fIWMpt/dRKBPlu+Qk+<br />
U/iMYLN3+elKeogyYuf6hbknmfDFo/mcGltZE5u8IprVO1Zt7LwajZeNjF0X493/stVJaA/6so3G<br />
/hDvGt61H+Zdq0a4PVW/e1WyJV31u1cnWnr3hKrfwdAj2Z3O+aiq317f54O17P/Uqt/1SaoxrxzZ<br />
9Si+v/5WryWQkwDR7flmVb9bbkD34DwGmxTIGfWoatTaM0yj6jeqftPQq52mHFT91u9wZ1UX+a07<br />
Q4i1hc4QYm2huy6OtYXuGGJtwaZ6Ym3BhhDWFmwIYW3BhhDWFrC28MLXFh6q+u23RGeSEvGNVYd+<br />
bzRUImqlmny16LCj+OfhMlpFlQRvXRsYB73gcUsDD12m2LYuPzyj/r0/jpOAfEAAFxAoIFCEh47p<br />
gkDRmV1DoOgMIQSK7uQaAkV3DCFQ2KgTBAobQhAobAhBoLAhBIECAsUxCxQt0ZkkWhxWoCA3Ef/k<br />
mdNHwSsCogNEB4gOykF4V5/8znlkIDpAdOA50nc2Q4gOEB04PeVcMZqzLBaS1mQOLVJDdLARRogO<br />
NoQgOtgQgugA0eGYRQcKYNRBXxzqRpFwMnJ8tbhP0ZmHisVA1e9nigqEV4Q4vRea83H7h8goppjc<br />
Qq7T2Z2ORZJ5MS3uZMSMlII1rvS3CNs4bKZbeEV0ZtcQKDpDCK+I7uQaAkV3DOEVYaNOEChsCEGg<br />
sCEEgcKGEAQKCBTHLFBUKaAaAkWd82lKaW7IQ4LYXrLhbbXmSP+3Z3vivSa/k0eFtPpeX6fMQNVv<br />
CBSo+h3+6BWhIFB0ZtcQKDpDCIGiO7mGQNEdQwgUNuoEgcKGEAQKG0IQKGwIQaCAQHHMAgVpCF94<br />
UPiHDdtA1e/nyqsMDwp4UDTyp3xnx3AIFJ3ZNQSKzhBCoOhOriFQdMcQAoWNOkGgsCEEgcKGEAQK<br />
G0IQKCBQvHCBgvwfqpIj+wtvBFXVkY9UxepNunWCuu4Ie084xZa+5To0bT4V7D3BNbOaXhQjKoIV<br />
DLQXRW8UjMfGNaOskjX0B96AFBIukuUPxr6v9lNzyxOVVa++tuIGnSI3/h7FVhcR48bP7rh12vPf<br />
uc24BJYpalXI85RCf03dqvUZVQG7iE3pLUQKSMm4UbEwqof1/KGp4LmdSRp4bmcIwXO7czTw3O4Y<br />
gufaZuDguTaEwHNtCIHn2hDaz3OVW3VG/ECXOIuSV79PXWcWZwVN6ymvfr4qzmUkqCipmV6nMlZ1<br />
ZXlSeS9FfWvueJrN0+n56OLnaVQ47NBN5Wb5a/7ym17/7N7Fo2R2JTLxobr9RL56f9m4fXWTT7jj<br />
+sTqTnXQck1ibvJoumand83FNMtRtEdd0NRNZtrGn+s6rkFVXrFiebvFFb+a5VH54/EJk0cuL9nK<br />
8vqjMddqBsuj3FIij1z9hBoO1VdUR3hzT0aBuzUVMXbZ7151IvM0Kc7kgjoRQKg6BLmRYHlgedxr<br />
fGe/BLA8sLznVwXB8mwzdLA8G0JgeTaEwPIUy3xz5CxvUJWzq1jebjG7r2Z5AeWGH4xNRHQby6OQ<br />
aWKBRANB88BRWHUgMYI4ChbzOnMU0LzOEGIxrztFAc3rjiEW82wTUNA8G0KgeTaEQPNsCL0Qmvch<br />
ym9k4eRRcRR8K9wm2pcw2Zzz5hdraxXrooW5ZRE5myi7jpNZnCxyGf+ZOCtavFzHf0qnX7Oxxplo<br />
yY8+OfFs4hKPimfka6lCRWkmTQt41YH0cacBOftmXt/+ls6iiSvIc1EtMLELpZOlBflrnoxO+J/r<br />
zGW8/i87cPIKlEl11Rt6/YFHib55+W5I9cf7Zj2wdNIksjcMaD/zuiAI+sb7c4+LZl5kIl4si/M0<br />
SWh1Ms30xe7lYX4XpcpR9KEy4j9stXKRZemtQfGB4uT81EuDqzZ2HnxjVbcZZvyg5QV18HFlUOK0<br />
YXke+esq0yvdfJ9meg0L8ynDO5eVMxY24MViVbeutDA/GHpjMk+2MI81BL2mDQtbRmL2Npkpn9vS<br />
Vfl24q6imevIiNZCeUtBWYhY1kc+g4Wxm3YVyP6ghQ2sFjZ8VgtrS9cHC5u4qq/V1pKlN8lM2c1L<br />
srDKM8U2eg5qj5U9fRh1Jt9j+FSmZ8y/7NzoO6Wbqs5tSEEQAbq3l2d8w0cb37DV+PKCLFHN3Lwd<br />
29sdWukihx1am5M33zuheZqZWJbW59HsbTSivpvNr8f1XcsZJUbXF9T38RN63Og6ah1dG+Z3GBv7<br />
Wubg0wgbDO6Fd+0an9f3KaMupnYvbuDlRbtHGl8dENgYeBvGV3KHcgysCS3Vqj5w39cfjgZsUXtp<br />
xc7IC1rxIid9TPseaXutkknD9kpW0WJ7VDv9sOPuju21EQ7Y3ssmHP8XAAAA///slc1O3DAQx1/F<br />
8gvsJptP1HBZWi60qkDq3dhOYurYkW2y4e0742SBSEigXtoDp51Zj+c/Hz85SjS0TikxbJANvZW8<br />
D5JM0t0rI5TpvFYPhgwykFE9aFIndHf5hV3wH9NxNnfjT4eeD+AQzJTUFH7nhh6WOGnE+egAIvEo<br />
pthtc4BrNhkhM7k/fbcCimKPwVLUmVs3kFar8RcoxX9s2xJQy8qqOCQZJU+gvC+TKtmv+nMgHALq<br />
tCpqOOcQkFZ5mad4DqqYElOPzodraQeCRkN9cEx1fThaYyQP1i1ybLrxYbl4vhD7t1qJb0rr6PBe<br />
DvKoHZmYhuI5lyace/avI7UhJygtT3MojI0NbTULYA4jTNKbjhKmO9NQHlxsdnPZb2XC/KYEVnnF<br />
fL/UEhMsg3H20Yi4yl4y8dUIEp5GmLWxRlIsa5CCEi1BHq0YGZjSL5HMOXtap6gNdi7bFmb1PCEf<br />
6cBFIykY8Gxsdg0swbIjh7ChD3K48vXC4bKVTWIs4G2IsJgVnbRMsiIBNhGdHNApi6VbuaKTAC9V<br />
dWYnyZCzReyTnf+JneLD7OTLgv+SnfcfoHy/zw7VlqLPBwgfw3/7AO00v9CW/5biyMzEfPwAdI6N<br />
veJXLLDX/uUfAAAA//8DAFBLAwQUAAYACAAAACEAxt//ONQGAADpGwAAGgAAAGNsaXBib2FyZC90<br />
aGVtZS90aGVtZTEueG1s7FnNb9xEFL8j8T+MfG+z381G3VTZzW4DaUqUbIt6nLVn7WnGHmtmNune<br />
UHtEQkIUxIFK3DggoFIrcSl/TaAIitR/gTcztteTdWhSgqigOWTt59+87/fm6+q1ezFDh0RIypOe<br />
V79c8xBJfB7QJOx5t8ajS6sekgonAWY8IT1vTqR3bf3dd67iNZ/RdMKxCMYRiQkCRolcwz0vUipd<br />
W1mRPpCxvMxTksC3KRcxVvAqwpVA4CMQELOVRq3WWYkxTbx14Kg0oyGDf4mSmuAzsa/ZEJTgGKRv<br />
40RxLgw4OKhriJzLARPoELOeB0wDfjQm95SHGJYKPvS8mvnzVtavruC1bBBTp4wtjRuZv2xcNiA4<br />
aBiZIpwUQuujVvfKZsHfAJhaxg2Hw8GwXvAzAOz7YKrVpcyzNVqt93OeJZB9XOY9qLVrLRdf4t9c<br />
0rnb7/fb3UwXy9SA7GNrCb9a67Q2Gg7egCy+vYRv9TcGg46DNyCL7yzhR1e6nZaLN6CI0eRgCa0D<br />
Ohpl3AvIlLOtSvgqwFdrGXyBgmwo0kuLmPJEnZpsMb7LxQgQGsmwoglS85RMsQ9ZOcDxRFCsJeA1<br />
gktfLMmXSyQtDElf0FT1vPdTnHglyMtn37189gQd3396fP/H4wcPju//YBk5o7ZwEpZHvfjm0z8e<br />
fYR+f/L1i4efV+NlGf/L9x///NNn1UCon4V5z794/OvTx8+//OS3bx9WwDcEnpThYxoTiW6SI7TH<br />
YzDMeMXVnEzE+UaMI0zLIzaSUOIEaykV/IcqctA355hl0XH06BPXg7cF9I8q4PXZXUfh/UjMFK2Q<br />
vB3FDnCHc9bnotIL21pWyc3jWRJWCxezMm4P48Mq2QOcOPEdzlLonHlaOoYPIuKoucugr+KQJEQh<br />
/Y0fEFJh3R1KHb/uUF9wyacK3aGoj2mlS8Z04mTTYtAWjSEu8yqbId6Ob3Zuoz5nVVZvkkMXCVWB<br />
WYXyY8IcN17HM4XjKpZjHLOyw29gFVUpuT8Xfhk3lAoiHRLG0TAgUlaN+UCAvaWgb2NoWZVh32Hz<br />
2EUKRQ+qeN7AnJeRm/xgEOE4rcLu0yQqY9+TB5CiGO1yVQXf4W6F6HeIA05ODfdtSpxwv7ob3KKh<br />
o9IiQfSXmdCxhF7tdOCYJn/VjhmFfmxz4OLaMTTA5189qsisN7URb8CcVFUJWyfa72m4k013wEVA<br />
3/yeu4lnyS6BNF+eeN623LctF/YQ//GWe1o9n7XRLnortF29brCrYrNGjk9fIk8pY/tqzsgNaVbJ<br />
EiaKYAREPdBsBkmxZ0ojeMwau4MLBTZjkODqQ6qi/QinsMKue5pJKDPWoUQpl7C1M+RK3hoPq3Rl<br />
N4ZtvWWwDUFitcMDS25qcr4zKNiY6SY0+89cUFMzOKuw5pWMKZj9OsLqWqkzS6sb1Uyvc6QVJkMQ<br />
l00DYuFNKAcE6xbwcge241o07EwwI4H2u51887CYKFxkiGSEA5LFSNu9HKO6CVKeK+YwAHKnIkZ6<br />
m/cKr5WkdTXbvyHtLEEqi2udIi6P3t+JUp7Biyjpwj1RjiwpFydL0FHP67YbbQ/5OO15U9jUwmOc<br />
QtSlXvRhFsKBkK/sYYtTpEU62cDZYjZVvohmNzfMLYI6HFRYvy8Z7IhIhVSbWEZWgvmUpQBLtCSr<br />
f6MNbr0oA2ymv4YWzVVIhn9NC/CjG1oynRJflYNdomjf2deslfKZImI/Co7QhM3EHobw61QFewIq<br />
4WzCdAT9Aidp2tvmk9ucs6Irn18ZnKVjlkY4a7e6RPNKtnBTx4UO5q2kHthWqbsx7vymmJK/IFPK<br />
afw/M0XPJ3BU0Ax0BHw4lxUY6XrteVyoiEMXSiPqjwSsHMyUCdkCp7HwGZIKDpHNryCH+tfWnOVh<br />
yhp2fGqPhkhQmI9UJAjZhbZksu8VzOrZ3GVZsoyRyaiSujK1ak/IIWFj3QM7em73UASpbrpJ1gYM<br />
7mT+ue9ZBU1Cvcgp15vTQyqbZUWvyZv3Ba98bDGDPLcPmwVN7v9CxYpZ1Y43w/O592TXXyyzWnlV<br />
gLDSVNDNyv41VTjnVGs71pLFjXauHERx2WIgFguiFA58kP4H8x8VPiMmjfWEOuZ70FsRXDVoZpA2<br />
kNWX7MID6QZpiRNYOFmijbNmZV2bLZ20O/+heBdyTzhba3aWeJ/T2cXizBXn1OJFOjvzsONrSzvV<br />
1RDZkyUKpGm+kzGBqbp42sEpmoT1ngd3PxDoe/AEt0ce0Bqa1tA0eIIrIVgs2Xucnpc95BT4bikF<br />
pplTmjmmlVNaOaWdU2Bxlt2Y5JQOdCp9yQG3bPrHQ/l9BqzgsvuPvKk6t3PrfwIAAP//AwBQSwME<br />
FAAGAAgAAAAhAJxmRkG7AAAAJAEAACoAAABjbGlwYm9hcmQvZHJhd2luZ3MvX3JlbHMvZHJhd2lu<br />
ZzEueG1sLnJlbHOEj80KwjAQhO+C7xD2btJ6EJEmvYjQq9QHCMk2LTY/JFHs2xvoRUHwsjCz7Dez<br />
TfuyM3liTJN3HGpaAUGnvJ6c4XDrL7sjkJSl03L2DjksmKAV201zxVnmcpTGKSRSKC5xGHMOJ8aS<br />
GtHKRH1AVzaDj1bmIqNhQaq7NMj2VXVg8ZMB4otJOs0hdroG0i+hJP9n+2GYFJ69elh0+UcEy6UX<br />
FqCMBjMHSldnnTUtXYGJhn39Jt4AAAD//wMAUEsBAi0AFAAGAAgAAAAhALvlSJQFAQAAHgIAABMA<br />
AAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAAACEArTA/8cEA<br />
AAAyAQAACwAAAAAAAAAAAAAAAAA2AQAAX3JlbHMvLnJlbHNQSwECLQAUAAYACAAAACEA2cWVB4UT<br />
AAB7egEAHwAAAAAAAAAAAAAAAAAgAgAAY2xpcGJvYXJkL2RyYXdpbmdzL2RyYXdpbmcxLnhtbFBL<br />
AQItABQABgAIAAAAIQDG3/841AYAAOkbAAAaAAAAAAAAAAAAAAAAAOIVAABjbGlwYm9hcmQvdGhl<br />
bWUvdGhlbWUxLnhtbFBLAQItABQABgAIAAAAIQCcZkZBuwAAACQBAAAqAAAAAAAAAAAAAAAAAO4c<br />
AABjbGlwYm9hcmQvZHJhd2luZ3MvX3JlbHMvZHJhd2luZzEueG1sLnJlbHNQSwUGAAAAAAUABQBn<br />
AQAA8R0AAAAA" o:spid="_x0000_i1025" style="width: 405pt; height: 146.25pt; visibility: visible" type="#_x0000_t75"><font size="3"><font color="#000000"><font face="Calibri"><v:imagedata cropbottom="-5377f" cropleft="-1129f" cropright="-1551f" croptop="-4705f" o:title="" src="file:///C:\DOCUME~1\ARIANS~1\LOCALS~1\Temp\msohtmlclip1\01\clip_image005.png"></v:imagedata><o:lock aspectratio="f" v:ext="edit"><img alt="" height="231" src="http://www.stijf.com/wordpress/wp-content/uploads/Merge.jpg" width="597" /></o:lock></font></font></font></v:shape></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">The main requirement is of course that both data sets are ordered, before the join takes place. If that is the case, this is probably the most efficient join mechanism. It can handle all kinds of join comparisons, including range comparisons. </font></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-CA"><font color="#4f81bd" face="Cambria" size="4">Back to efficient SQL</font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">Now it is time to go back to the main focus of this article. How to write efficient SQL. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">We have seen how Oracle can access data and join it together. It is the job of the Oracle Optimizer to find out the most efficient way to do that, for a given query. It does this based on statistics on the tables and indexes. It is not in the scope of this article to discuss how to gather statistics. But we will see the use of several of the statistics. These statistics include (but are not limited to) the number of rows in the table, the number of blocks, the average row length, etc. For an index, they include (but are not limited to) the number of leaf blocks, the number of keys per leaf block, the number of datablocks in the table per key, etc. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">In an ideal world, we would be able to trust the optimizer to do the right thing all the time. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">However, we live in an imperfect world, and the Oracle Optimizer does not always have perfect information about the data or your query. Either the statistics might not be up to date, or they might not include some dependencies within the data. Also your query might not give the optimizer all the information that you have. (see the first example in this article, where we can give the optimizer extra information by adding a predicate). </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">Consider this query: </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">Select * From<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">Tiny<span style="mso-spacerun: yes">&nbsp; </span>T, &#8211;7089 rec<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">Small S<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&#8211; 71151 Rec<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">Where t.Object_id = s.Object_id;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">Which explain plan is more efficient: </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">0 SELECT STATEMENT<span style="mso-spacerun: yes">&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">1<span style="mso-spacerun: yes">&nbsp; </span>HASH JOIN<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">2<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>TABLE ACCESS FULL <span style="mso-spacerun: yes">&nbsp;</span>TINY <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">3<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>TABLE ACCESS FULL <span style="mso-spacerun: yes">&nbsp;</span>SMALL<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font size="3"><font face="Calibri"><font color="#000000"><span lang="EN-CA">Or:</span><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p></o:p></span></font></font></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">0 SELECT STATEMENT<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">1<span style="mso-spacerun: yes">&nbsp; </span>TABLE ACCESS BY INDEX ROWID SMALL<span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">2<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>NESTED LOOPS<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">3<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>TABLE ACCESS FULL<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>TINY<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><font color="#000000">4<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>INDEX RANGE SCAN<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SMALL_IDX<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">The first explain plan uses a Hash Join, with Tiny as the Build Table. The second uses a Nested Loops Join, with Tiny as the Inner Table. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">I hope you have decided that you don&rsquo;t know which one is the most efficient. Because you cannot know based on the information you have. If I selected 2 non-overlapping sets of data, the Nested Loop Join might be more efficient.<span style="mso-spacerun: yes">&nbsp; </span>It would scan Tiny for 7089 records, then do 7089 index lookups on Small (without result), so it would need to read approximately 7089+7089=14178 blocks.</font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">If the 2 sets would have a 1-n relationship, and every occurrence of object_id in Small is also in Tiny, both tables would need to be read fully and the Hash Join would be more efficient. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3">That means that to write efficient SQL, you&rsquo;ll need to have an understanding of the data. And you must have considered the optimal execution plan for your query. When you write your query, keep in mind the mantra in first part of this article. Less is Better, More is Better. You want to give Oracle as much information as possible, and you want to get as small as possible result sets. </font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">The last part that we will do in this part, is to look at the</span></font></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA"><font color="#4f81bd" face="Cambria" size="4">Explain plan</font></span></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">To see what Oracle will do when executing a query, you can make an explain plan. Many tools have built-in options to show explain plans on queries. Alternatively, you can use the Oracle commands:</span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">SQL&gt; Explain plan for<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><span style="mso-spacerun: yes">&nbsp; </span>2<span style="mso-spacerun: yes">&nbsp; </span>Select * From<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><span style="mso-spacerun: yes">&nbsp; </span>3<span style="mso-spacerun: yes">&nbsp; </span>Tiny<span style="mso-spacerun: yes">&nbsp; </span>T, &#8211;7089 rec<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><span style="mso-spacerun: yes">&nbsp; </span>4<span style="mso-spacerun: yes">&nbsp; </span>Small S<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&#8211; 71151 Rec<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><span style="mso-spacerun: yes">&nbsp; </span>5<span style="mso-spacerun: yes">&nbsp; </span>Where t.Object_id = s.Object_id;<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">Explained.<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">SQL&gt; select * from table( dbms_xplan.display() );<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">PLAN_TABLE_OUTPUT<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">Plan hash value: 803478362<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">| Id<span style="mso-spacerun: yes">&nbsp; </span>| Operation<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>| Name<span style="mso-spacerun: yes">&nbsp; </span>| Rows<span style="mso-spacerun: yes">&nbsp; </span>| Bytes | Cost (%CPU)| Time<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>|<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">|<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>0 | SELECT STATEMENT<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>|<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|<span style="mso-spacerun: yes">&nbsp; </span>7089 |<span style="mso-spacerun: yes">&nbsp; </span>1287K|<span style="mso-spacerun: yes">&nbsp; </span>1264<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>(1)| 00:00:16 |<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">|*<span style="mso-spacerun: yes">&nbsp; </span>1 |<span style="mso-spacerun: yes">&nbsp; </span>HASH JOIN<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>|<span style="mso-spacerun: yes">&nbsp; </span>7089 |<span style="mso-spacerun: yes">&nbsp; </span>1287K|<span style="mso-spacerun: yes">&nbsp; </span>1264<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>(1)| 00:00:16 |<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">|<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>2 |<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>TABLE ACCESS FULL| TINY<span style="mso-spacerun: yes">&nbsp; </span>|<span style="mso-spacerun: yes">&nbsp; </span>7089 |<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>650K|<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>213<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>(0)| 00:00:03 |<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">|<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>3 |<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>TABLE ACCESS FULL| SMALL | 71151 |<span style="mso-spacerun: yes">&nbsp; </span>6392K|<span style="mso-spacerun: yes">&nbsp; </span>1049<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>(1)| 00:00:13 |<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">PLAN_TABLE_OUTPUT<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">Predicate Information (identified by operation id):<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>1 &#8211; access(&quot;T&quot;.&quot;OBJECT_ID&quot;=&quot;S&quot;.&quot;OBJECT_ID&quot;)<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">15 rows selected.</span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">I took the previous query, and ran an explain plan on it. First I should tell you how I created tiny and small, so you can verify: </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">create table tiny as select * from dba_objects where mod(object_id,10)=0;<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">create table small as select * from dba_objects;<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">create index tiny_idx on tiny(object_id);<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">create index small_idx on small(object_id);<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">Analyze Table Tiny Compute Statistics;<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt">analyze table small compute statistics;<o:p></o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">You can see that both tables were created from dba_objects and tiny is a subset of small. Therefore a Hash Join makes most sense. </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">Let&rsquo;s take a closer look at the explain plan now. Keep in mind that all the numbers are estimates from the optimizer. They are based on the statistics available, and the runtime numbers might be completely different. </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">The execution starts at the rows furthest right. And top down. In this case that means that we start with a Full Table Scan of Tiny. Then we do a Full Table Scan of Small, and finally we Hash join the 2 sets together. </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">The result of the Hash Join is returned, and becomes the result of the query (Select).</span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">Let&rsquo;s take a closer look at the Full Table Scans. After the name of the table, we see &lsquo;Rows&rsquo;,&rsquo;Bytes&rsquo;,&rsquo;Cost&rsquo; and &lsquo;Time&rsquo;. </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">The &lsquo;Time&rsquo; is an estimate of the amount of time it will take to complete this step. It is useful in query tuning<span style="mso-spacerun: yes">&nbsp; </span>to see which step will take the most time.</span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">The &lsquo;Bytes&rsquo; are an estimate of the amount of data used to complete this step. I find it useful when a hash join is involved. Because when it exceeds my hash_area_size, Oracle will need a &lsquo;Multi-Pass Hash Join&rsquo;. </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">The &lsquo;Cost&rsquo; is often used for query tuning, and people will try to &lsquo;tune down&rsquo; the cost. This makes sense, because the cost is an estimate for the amount of I/O Oracle needs to do for this step. However, there is a logical trap in this. </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">Oracle has used the cost of different explain plans for the original query to decide the most efficient one. Now when we change the query, the cost can no longer be compared to the original query. After all, it is a different query. It will return a different result. Unless, of course there is some information about the data we are selecting, that we didn&rsquo;t give the optimizer initially. </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">To me, it makes more sense to look at the &lsquo;Rows&rsquo;. This is the number of records Oracle expects from that step in the query. If this is very different from the number you are expecting, something is wrong. Either the statistics are outdated, or the Optimizer is missing some information that you have, or you are not selecting the data you are expecting. </span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA"><o:p>&nbsp;</o:p></span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><font color="#000000" face="Calibri" size="3"><span lang="EN-CA">In the query above, we see that Oracle has made the perfect assumptions. Tiny will return 7089 rows, Small will return 71151 rows and there is a 1-1 relationship<span style="mso-spacerun: yes">&nbsp; </span>between them. So the join will return one record for each record in Tiny. No use looking for a more efficient plan here. Unless again, we did not query what we are looking for.</span></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt">&nbsp;</p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-CA" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stijf.com/wordpress/2010/03/writing-efficient-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle Advanced Queues (AQ)</title>
		<link>http://www.stijf.com/wordpress/2010/03/oracle-advanced-queues-aq/</link>
		<comments>http://www.stijf.com/wordpress/2010/03/oracle-advanced-queues-aq/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 21:28:08 +0000</pubDate>
		<dc:creator>Arian Stijf</dc:creator>
				<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[dbms_aq]]></category>
		<category><![CDATA[dbms_aqadm]]></category>
		<category><![CDATA[dequeue]]></category>
		<category><![CDATA[eBS]]></category>
		<category><![CDATA[enqueue]]></category>
		<category><![CDATA[IOT]]></category>
		<category><![CDATA[payload]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[queue table]]></category>

		<guid isPermaLink="false">http://www.stijf.com/wordpress/?p=392</guid>
		<description><![CDATA[Oracle Advanced Queuing (AQ)
&#160;
A customer asked me to do a presentation about AQ (Advanced Queuing). This article is a rewrite of that presentation. We&#8217;ll be getting some hands-on experience with AQ, and then some tips on the issues that might occur. 
As always, your comments to this article are more than welcome. If you enjoy [...]]]></description>
			<content:encoded><![CDATA[<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="4"><font color="#4f81bd"><font face="Cambria">Oracle Advanced Queuing (AQ)<o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">A customer asked me to do a presentation about AQ (Advanced Queuing). This article is a rewrite of that presentation. We&rsquo;ll be getting some hands-on experience with AQ, and then some tips on the issues that might occur. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">As always, your comments to this article are more than welcome. If you enjoy this article, find it useful or maybe not at all, please let me know by leaving a comment on the site.</font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri"><o:p>The article is also available in PDF format from <a href="http://www.stijf.com/wordpress/PDF/Oracle queues.pdf">here.</a></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="4"><font color="#4f81bd"><font face="Cambria">Queuing: I don&rsquo;t want to queue. <o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">The title might be true in many cases, but there are also situations where a queue is very convenient. For example in the case of batch processing where a batch process handles multiple incoming messages from an online process. Or when 2 processes need inter-process communication, but still need to function independently of each other. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">In eBS we use queues for the workflow system. (Deferred items, notifications for the workflow mailer and the Business Event System). Some more queues are found for concurrent processing and SFM. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">So whether you like it or not, you&rsquo;ll have to queue. The trick is to manage these queues to get optimal performance for your system. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="4"><font color="#4f81bd"><font face="Cambria">(Advanced) Queue design<o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Before we can start building queues, there are some things to consider. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">AQ supports both point-to-point queues and publish-subscribe-queues (also called multi-consumer queues). <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Point-to-point queues are emptied by only one specific process. One or more processes can enqueue messages on the queue, but only one process can dequeue them. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">In contrast, a publish-subscribe queue can have many processes reading the messages in the queue. Either the messages are broadcasted, or the receivers have to subscribe to a certain kind of messages. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Of course the publish-subscribe queue has some very interesting properties. But we&rsquo;ll start our item with the point-to-point queue. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">So you&rsquo;ll first have to decide who the senders and receivers of the queue data will be. In this article, we start with using a point-to-point queue. After that we start using multi-consumer queues.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Another thing to consider is the payload of the message. Of course, the messages will need some content to give it a meaning to the receiver. This content is called the payload. And you can either use a custom type (including XML), or a raw type. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">During this article, we&rsquo;ll see some more features of AQ. But when we decide on the type of queue and the payload type, we can build our own queues. All queues are built on queue-tables. These tables hold the data in the queue. On top of these tables, the actual queue and some management views are built. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">To build a queue-table, we use the dbms_aqadm package:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dbms_aqadm.create_queue_table(queue_table =&gt;&rsquo;&lt;table_name&gt;&rsquo;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,queue_payload_type =&gt; [&lsquo;RAW&rsquo;|&lt;custom_type&gt;]);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span><o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">This creates the queue table including a LOB segment for the payload, some indexes, and an &lsquo;Error queue&rsquo;:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dbms_aqadm.create_queue_table(queue_table=&gt;&rsquo;xxx_test&rsquo; <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,queue_payload_type=&gt;&rsquo;RAW&rsquo;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Select object_name,object_type from dba_objects where created&gt;sysdate-1/24;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">OBJECT_NAME<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>OBJECT_TYPE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&#8212;&#8212;&#8212;&#8211;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">SYS_C0011768<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INDEX<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">XXX_TEST<span style="mso-tab-count: 1"> </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>TABLE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">SYS_LOB0000073754C00029$$<span style="mso-tab-count: 1">&nbsp;&nbsp; </span>LOB<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">SYS_LOB0000073754C00028$$<span style="mso-tab-count: 1">&nbsp;&nbsp; </span>LOB<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">AQ$_XXX_TEST_T<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INDEX<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">AQ$_XXX_TEST_I<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>INDEX<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">AQ$_XXX_TEST_E<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>QUEUE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">AQ$_XXX_TEST_F<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>VIEW<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">AQ$XXX_TEST<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>VIEW<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">This created the base-table for a point-to-point queue. The table is a regular heap-oriented table. And you are free to create extra indexes on it, if you feel the urge. The necessary indexes have been created already. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">The queue that is created now is the default error queue. Messages that failed dequeuing will be set on this queue. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Now it&rsquo;s time to create the actual queue. The queue-tables are the infrastructure for storing the messages and related information. The queue can now be created to control the queuing and dequeuing of messages. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri"><span style="mso-spacerun: yes">&nbsp;</span><o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">For both point-to-point as publish-subscriber queues, the command is: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dbms_aqadm.create_queue (queue_table =&gt;&rsquo;&lt;table_name&gt;&rsquo;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp; </span>queue_name =&gt; &lsquo;&lt;queue_name&gt;&rsquo;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: black; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">So for us we run: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dbms_aqadm.create_queue (queue_name =&gt; &#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 108pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span>,queue_table =&gt; &#39;xxx_mc_test&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">This creates an object of type QUEUE. This is the object that will control the contents of the underlying tables / IOT&rsquo;s. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Before we can start using our queues, we also have to &lsquo;start&rsquo; them. On starting, we indicate whether the queue is available for queuing, dequeuing or both: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span>dbms_aqadm.start_queue(queue_name=&gt;&rsquo;xxx_test_q&rsquo;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span>,enqueue=&gt;TRUE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span>,dequeue=&gt;TRUE);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Our queue is now enabled for both queueing and dequeuing. Let&rsquo;s first verify if things are working correctly. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">To enqueue (or dequeue) a message, we use the dbms_aq package. It has an enqueue and dequeue procedure. Both with their own parameters. The parameters include en-/dequeue options, message properties, a message_id and of course the message itself: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.Enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload:=Utl_raw.Cast_to_raw(&#39;Hello world!&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.Enqueue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(rawtohex(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">This enqueues a &lsquo;Hello world!&rsquo; message, and returns the message id. If everything works correctly, you&rsquo;ll see the msgid as a hexadecimal string. (Don&rsquo;t forget to set serveroutput on).<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">We created 2 extra parameters: v_enq_options with the options used to enqueue this message. And v_msg_properties to set additional information about the message. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">V_enq_options is of type &lsquo;dbms_aq.enqueue_options_t&rsquo;. This is a record of:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Visibility<span style="mso-tab-count: 1">&nbsp;&nbsp; </span>BINARY_INTEGER<span style="mso-spacerun: yes">&nbsp; </span>&#8211;Options are: dbms_aq.on_commit and dbms_aq.immediate. This indicates whether the enqueue is part of the current transaction, or done autonomously. <o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Relative_msgid<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>RAW(16)<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&#8211;If the message needs to be enqueued at a specific position, it will be relative to this msgid.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Sequence_deviation BINARY_INTEGER &ndash;-Options are: DBMS_AQ.BEFORE, DBMS_AQ.TOP or NULL (default). If before then the message is before the relative_msgid. If top, the message will be the first to be dequeued.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">V_msg_properties is of type &lsquo;dbms_aq.message_properties_t&rsquo;. This is a record of:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">priority<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BINARY_INTEGER <span style="mso-spacerun: yes">&nbsp;</span>&#8211; Any integer, to set the priority. Smaller is higher priority. The default is 1.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">delay<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BINARY_INTEGER <span style="mso-spacerun: yes">&nbsp;</span>&#8211; If the message needs to be delayed before it can be dequeued, set the time in seconds here. The default is dbms_aq.no_delay.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">expiration<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BINARY_INTEGER <span style="mso-spacerun: yes">&nbsp;</span>&#8211; For messages that need to expire after a certain time, set the expiration time in seconds. (Offset from the delay). The default is dbms_aq.never.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">correlation<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>VARCHAR2(128)<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>&#8211; A free text field that can be used to identify groups of messages. <o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">attempts<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BINARY_INTEGER<span style="mso-spacerun: yes">&nbsp; </span>&#8211; Number of failed attempts to dequeue, before the message will be failed and marked as expired.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">recipient_list<span style="mso-spacerun: yes">&nbsp; </span>DBMS_AQ.AQ$_RECIPIENT_LIST_T &ndash;- Only valid for multi-consumer queues. Sets the designated recipients.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">exception_queue VARCHAR2(51) <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span>&#8211; The exception queue to use, when it is not the default.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">enqueue_time<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>DATE<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp; </span>&#8211; Set automatically during enqueue <o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">state<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BINARY_INTEGER<span style="mso-spacerun: yes">&nbsp; </span>&#8211; Automatically maintained by AQ, to indicate the status of the message.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Let&rsquo;s see if the dequeue also works. For this the procedure dequeue is used, with similar parameters. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">This time, our message should be displayed. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">For the dequeue, we used v_deq_options of type &lsquo;dbms_aq.dequeue_options_t&rsquo;. This is a record of:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">consumer_name<span style="mso-spacerun: yes">&nbsp; </span>VARCHAR2(30) <span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&#8211; Indicates the consumer for multi-consumer queues.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dequeue_mode<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>BINARY_INTEGER &ndash;- How to dequeue the messages. Either leave it on the queue, or remove it. Either dbms_aq.browse and dbms_aq.remove (default).<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">navigation<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>BINARY_INTEGER &ndash;- Indicate where to start dequeuing. Dbms_aq.next_message (default), to continue from the previous dequeue. Dbms_aq.first_message to start at the top of the queue. Dbms_aq.next_transaction to skip the rest of this message group.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">visibility<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>BINARY_INTEGER &ndash;- same as dbms_aq.enqueue_options_t.visibility.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">wait<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>BINARY_INTEGER &ndash;- The time (in seconds) the package should wait if no message is available. Default is dbms_aq.forever.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">msgid<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>RAW(16) <span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>&#8211; When specified, only the message with this msgid will be dequeued.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; text-indent: -36pt; margin: 0cm 0cm 0pt 36pt; mso-layout-grid-align: none"><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">correlation<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>VARCHAR2(128) <span style="mso-spacerun: yes">&nbsp;</span>&#8211; Only messages with this correlation will be dequeued (may include wildcards).<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Note how message_properties and payload are now out-parameters. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">This is probably the simplest queue possible. We enqueued and dequeued a raw message. We didn&rsquo;t specify the visibility. So your session still needs to commit these actions.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Now let&rsquo;s enqueue our message again, and see how it works behind the curtain.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.Enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload:=Utl_raw.Cast_to_raw(&#39;Hello world!&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.Enqueue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(&#39;Msg_id: &#39;||rawtohex(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: 499CE4809F2641E1BFBC8AFBC8DB5AFA<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">The queue table is an ordinary heap-table, so we can query it.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select q_name, rawtohex(msgid) msg_id, priority, state, enq_time, enq_uid<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">from <span style="mso-spacerun: yes">&nbsp;&nbsp;</span>xxx_test;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">q_name<span style="mso-tab-count: 1">&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp; </span>msg_id<span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>priority state enq_time<span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>enq_uid<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">XXX_TEST_Q<span style="mso-spacerun: yes">&nbsp; </span>499CE4809F2641E1BFBC8AFBC8DB5AFA<span style="mso-tab-count: 1">&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp; </span>1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>0 21-03-10 17:24:01,876000000<span style="mso-tab-count: 1"> </span>SYSTEM<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">We see our msgid again. A priority flag. A state flag, the time of enqueueing the message, and the user that enqueued the message. The message is also in the table, but since it is a blob, we won&rsquo;t bother selecting from it yet. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">There are more columns in the table, that control the order and by who the messages are dequeued. Most of them are still null, so we will see them when needed. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">A useful alternative to the table is to query the queue-view aq$&lt;table_name&gt;. This will show the translated values of the state. (0 = READY). And especially when using multi-consumer queues, it will use a join to select a more complete picture of the queue.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">When we dequeue the message, it will disappear from the queue. (And be deleted from the queue table). However, this can be controlled by the retention parameter of the queue.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Let&rsquo;s set this parameter, so we can check the data after the dequeue.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">We set the retention time to 240 (seconds): <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DBMS_AQADM.ALTER_QUEUE(queue_name =&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,retention_time =&gt; 240);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Now when we dequeue the message, it will remain in the queue:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select <span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>queue<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>rawtohex(msg_id)msg_id<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>msg_priority<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>msg_state<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>enq_timestamp<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>enq_user_id<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>deq_timestamp<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>deq_user_id<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">from <span style="mso-tab-count: 1">&nbsp; </span>aq$xxx_test<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">QUEU<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>MSG_ID<span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>MSG_PRIO MSG_STATE ENQ_TIMESTAMP<span style="mso-tab-count: 1">&nbsp; </span>ENQ_USER DEQ_TIMESTAMP<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>DEQ_USER_ID<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 6pt; mso-ansi-language: en-us"><font color="#000000">XXX_TEST_Q AEC2CD2E34514363B6739969E8E8D353<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>1 PROCESSED 19-03-10 18:31:40 SYSTEM<span style="mso-tab-count: 1"> </span>19-03-10 21:26:45 SYSTEM<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Now the message has been set to state &lsquo;PROCESSED&rsquo;, and some dequeue information has been added. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">It&rsquo;s time to start navigating queues when there are multiple messages in the queue. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Messages are by default dequeued in the order in which they are enqueued. On creation of the queue table, you can set other dequeue orders. But it is also possible to dequeue messages in a different order by navigating the queues, or using filter-criteria. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">To show the dequeueing order we enqueue 10 different messages. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.Enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options.visibility := dbms_aq.immediate;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">for i in 1..10 loop<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>V_payload:=Utl_raw.Cast_to_raw(&#39;This is the &#39;||to_char(to_date(i,&#39;J&#39;),&#39;jspth&#39;)||&#39; message&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_aq.Enqueue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_output.Put_line(rawtohex(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end loop;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">This enqueues the text &lsquo;This is the first message&rsquo; till &lsquo;This is the tenth message&rsquo;. On dequeuing, the messages come out in the same order: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">for i in 1..10 loop<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span>,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end loop;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the first message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the second message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&hellip;&hellip;&hellip;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the tenth message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">When we created the queue table, we choose the default sort order. This is by enqueue_time. We can also build a queue that uses priority dequeuing. First we create a queue:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dbms_aqadm.create_queue_table(queue_table=&gt;&#39;xxx_test_prio&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>,<b style="mso-bidi-font-weight: normal">sort_list =&gt; &#39;PRIORITY,ENQ_TIME&#39;<o:p></o:p></b></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>,queue_payload_type=&gt;&#39;RAW&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dbms_aqadm.create_queue(queue_name=&gt;&#39;xxx_test_prio_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,queue_table=&gt;&#39;xxx_test_prio&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dbms_aqadm.start_queue(queue_name=&gt;&#39;xxx_test_prio_q&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">We indicated a sort_list now. The options are &lsquo;ENQ_TIME&rsquo; (default), &lsquo;ENQ_TIME,PRIORITY&rsquo;,&lsquo;PRIORITY&rsquo;,&rsquo;PRIORITY,ENQ_TIME&lsquo;. Now we enqueue some messages with reversed priorities:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.Enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options.visibility := dbms_aq.immediate;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">for i in 1..10 loop<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>V_payload:=Utl_raw.Cast_to_raw(&#39;This is the &#39;||to_char(to_date(i,&#39;J&#39;),&#39;jspth&#39;)||&#39; message&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>v_msg_properties.priority:=11-i;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_aq.Enqueue(Queue_name=&gt;&#39;xxx_test_prio_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_output.Put_line(rawtohex(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end loop;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">And we dequeue them again:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; color: #0000f0; font-size: 10pt; mso-ansi-language: en-us"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">for i in 1..10 loop<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_test_prio_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-spacerun: yes">&nbsp;</span>,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end loop;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the tenth message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the ninth message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&hellip;&hellip;&hellip;&hellip;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the second message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the first message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000">Now it&rsquo;s time to look at queueing navigation. It is possible to dequeue specific messages from the queue. You can select messages with a specific msg_id, correlation or recipient_list (for mc-queueus).<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000">We&rsquo;ll first search for a specific correlation and then a message_id. We enqueue ten messages, with different correlations:<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.Enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options.visibility := dbms_aq.immediate;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">for i in 1..10 loop<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>V_payload:=Utl_raw.Cast_to_raw(&#39;This is the &#39;||to_char(to_date(i,&#39;J&#39;),&#39;jspth&#39;)||&#39; message&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>v_msg_properties.correlation:=to_char(&#39;Corr&#39;||i);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>Dbms_aq.Enqueue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;</span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>dbms_output.Put_line(&#39;Msg_id: &#39;||rawtohex(V_msgid)||&#39; Correlation: Corr&#39;||i);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end loop;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: E8BE83A2A2A04F1EA74863B4A7C78DAF Correlation: Corr1<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: 7159B80BC3194C7AAA6910AB10E753C5 Correlation: Corr2<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: 4AF3693CF7EE4994B0F78830371437B9 Correlation: Corr3<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: 44DBC0CB09C94BB98DF2D7E48971849C Correlation: Corr4<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: 98F3E119041E47F5BF46604E014120BF Correlation: Corr5<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: B71B7F097A9E4EDBA696958326BF6300 Correlation: Corr6<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: C4F5050B02904EEEAD2842405A0BDE2A Correlation: Corr7<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: E4D923A4CB4B4DF2B64B8421A88FFC42 Correlation: Corr8<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: BE199053188648AE8FA238A01A5C9CD1 Correlation: Corr9<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Msg_id: 8991E793D2DB41F5B3F9D00D283B6F6D Correlation: Corr10<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000">Now we can dequeue the 5th (correlation) and 8th (msg_id) message: <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.correlation:=&#39;Corr5&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.correlation:=NULL;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.msgid:=&#39;E4D923A4CB4B4DF2B64B8421A88FFC42&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the fifth message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">This is the eighth message<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000">Note how we have to set the correlation back to NULL for the second dequeue. Otherwise we would be trying to dequeue a message with correlation &lsquo;Corr5&rsquo; and the specified msg_id. Since that message does not exist, our procedure will just wait for the message to appear. <o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000">By default when you dequeue from an empty queue, or try to dequeue a non-available message, the dequeue will wait indefinitely for a message to appear. You can control this behavior with the dequeue options. <o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options.wait := 10; &#8212; to wait 10 seconds</font><a name="74727"></a><font color="#000000">. Any number of 0 or higher is allowed. <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options.wait := dbms_aq.no_wait; &#8212; not waiting for the message.<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options.wait := dbms_aq.forever; &#8212; wait indefinitely<span style="mso-spacerun: yes">&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><a name="74729"></a><font color="#000000"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl">Do note that when the time-out is reached an </span><span lang="EN-US" style="font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">&rsquo;ORA-25228: timeout in dequeue from &lt;queue&gt; while waiting for a message&rsquo;</span><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"> raised. So you will need to handle the exception.<o:p></o:p></span></font></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 10pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000">One more feature to consider is the browsing mode. So far we have seen the messages that we dequeued were removed from the queue (or at least got status &lsquo;Processed&rsquo;). By setting the dequeue options, we can first inspect messages before dequeuing them. Consider the following. We have 8 messages left in our queue: <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options_rm dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.wait:=dbms_aq.no_wait;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.dequeue_mode:=DBMS_AQ.BROWSE;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">for i in 1..10 loop<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>dbms_output.put_line(v_msg_properties.correlation);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>if v_msg_properties.correlation=&#39;Corr6&#39; then<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v_deq_options.dequeue_mode:=DBMS_AQ.REMOVE;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v_deq_options.msgid:=v_msgid;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v_deq_options.dequeue_mode:=DBMS_AQ.BROWSE;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>v_deq_options.msgid:=NULL;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>end if;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>exception<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>when others then <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>null;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end loop;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000">This removed only the 6<sup>th</sup> message from the queue, and left the others intact. <o:p></o:p></font></span></p>
<p class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt"><span lang="EN-US" style="font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000">There are more options to the queuing / dequeuing like retrying failed attempts (rollback after a dequeue is considered a failed attempt) and queuing with a delay or an expiration time. But I think the information so far will allow you to test these options on a need-by basis. <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font size="4"><font color="#4f81bd"><font face="Cambria">Multi-consumer or publish-subscribe queues<o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Both &lsquo;publish-subscribe&rsquo; and &lsquo;multi-consumer&rsquo; are used for these queues. I think &lsquo;multi-consumer&rsquo; is most often used informally. That will also be the one I will use in this article (even though &lsquo;publish-subscribe&rsquo; is more accurate).<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">We build multi-consumer queues with dbms_aqadm again. But on creating the queue-table, we say that it has to be a multi-consumer queue-table: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">dbms_aqadm.create_queue_table (queue_table=&gt;&rsquo;xxx_mc_test&rsquo; <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,multiple_consumers=&gt;TRUE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,queue_payload_type=&gt;&rsquo;RAW&rsquo;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Now we see more objects being created. The most important ones are: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">Xxx_mc_test</span><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"> <span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;</span>The queue table itself. <o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3">Table </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">aq$_xxx_mc_test_s</span><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"> with information about the subscribers to the queue<o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3">Table </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">aq$_xxx_mc_test_r</span><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"> with information about the rules for the subscriptions<o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3">IOT </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">aq$_xxx_mc_test_h</span><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"> with historic information about dequeuing<o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3">IOT </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">aq$_xxx_mc_test_i</span><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"> with dequeuing information<o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">As you can see, a lot more information is stored for multi-consumer queues. In part this information has to do with the subscription and subscriber mechanism. But there is also the need to keep a history of the dequeuing, to know when a message has been dequeued by all subscribers.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">We will be seeing the use of all the objects in a few minutes, when we start queuing and dequeuing messages. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3">When we try to enqueue messages on this queue now, we receive an </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">ORA-24033:</span><span class="apple-converted-space"><span lang="EN-CA" style="font-family: 'arial', 'sans-serif'; color: black"><font size="3">&nbsp;</font></span></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">no recipients for message</span><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri">. This means we need to set up subscribers first. If we enqueue without a recipient list, the message will be made available for all subscribers. <o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3">To add a subscriber, we use the dbms_aqadm package and a new object_type: </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">sys.aq$_agent</span><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri">. <o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">This type is defined as an object of name , address and protocol. The last 2 are used in inter-system communication only.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">We can just call the following procedure:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'times new roman', 'serif'; font-size: 12pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DECLARE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_agent sys.aq$_agent;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">BEGIN<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>V_agent:= sys.aq$_agent(&#39;Agent1&#39;,NULL,NULL);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>DBMS_AQADM.ADD_SUBSCRIBER(queue_name=&gt;&#39;xxx_mc_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 108pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,subscriber=&gt;v_agent);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">END;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3">We can see the subscribers from the view </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">aq$xxx_mc_test_s</span><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3"> (or the underlying table: </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">aq$_xxx_mc_test_s</span><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri">):<o:p></o:p></font></font></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select * from aq$xxx_mc_test_s;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">QUEUE<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>NAME<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>ADDRESS<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>PROTOCOL TRANSFORMATION<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212; &#8212;&#8212;-<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8211;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_MC_TEST_Q<span style="mso-tab-count: 1"> </span>AGENT1<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>0<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Now let&rsquo;s enqueue a message: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_payload := utl_raw.cast_to_raw(&#39;Hello world, again!&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.enqueue(Queue_name=&gt;&#39;xxx_mc_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>,enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Now when we look at the queue-view, we can see that a subscriber has been selected: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select queue,rawtohex(msg_id) msg_id,msg_state,consumer_name from aq$xxx_mc_test;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">QUEUE<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSG_ID<span style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>MSG_STATE CONSUMER_NAME<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_MC_TEST_Q<span style="mso-tab-count: 1"> </span>BC4C48AC659946428F38F8BC3AB02184 READY<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>AGENT1<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Now to dequeue the message, we also need to set the consumer_name in the dequeue_options. When enqueuing a message without a subscriber_name, it can be dequeued by all subscribers. But on dequeueing, the subscriber needs to identify itself.<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><b style="mso-bidi-font-weight: normal"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.consumer_name:=&#39;Agent1&#39;;<o:p></o:p></font></span></b></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_mc_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Hello world, again!<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Now when we check the queue contents, we see that the message is still there. Even after a commit, the message has been retained. Maybe you won&rsquo;t see it on your system immediately. But then run: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aqadm.stop_time_manager;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">And enqueue/dequeue a message again. Now when you look in xxx_mc_test or aq$xxx_mc_test, you will see the message being retained (with status &lsquo;PROCESSED&rsquo;). When you start the time_manager again, the message will disappear after some time. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">The reason for this, is that Oracle enhances concurrency by using a separate table (IOT) for the dequeuing. When we enqueue a message again: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_payload := utl_raw.cast_to_raw(&#39;Hello world&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.enqueue(Queue_name=&gt;&#39;xxx_mc_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">We can see the data in the dequeue-IOT: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select subscriber#, queue#, msg_enq_time, msgid from Aq$_xxx_mc_test_i;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SUBSCRIBER# QUEUE# MSG_ENQ_TIME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSG_ID<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8211; &#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>0 21-03-10 14:16:00,252000000 75E41875D957455B84D80B55AE06F81C<span style="mso-tab-count: 1">&nbsp; </span></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Here the basic information about our message is recorded. After a subscriber dequeues the message it&rsquo;s version of the record is deleted only from this table (Please try this yourself, to confirm). The queue-monitors are responsible for cleaning up the queue-table after all subscribers have dequeued the message. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Now let&rsquo;s see what happens when we add a second subscriber for our queue: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DECLARE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_agent sys.aq$_agent;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">BEGIN<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>V_agent:= sys.aq$_agent(&#39;Agent2&#39;,NULL,NULL);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>DBMS_AQADM.ADD_SUBSCRIBER(queue_name=&gt;&#39;xxx_mc_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt 108pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,subscriber=&gt;v_agent);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">END;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Any messages that were enqueued already, won&rsquo;t be available for this new subscriber. It can only dequeue messages enqueued after the subscriber was added. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><font color="#000000"><span lang="EN-US" style="mso-ansi-language: en-us"><font face="Calibri" size="3">Also you can&rsquo;t just change subscribers in an existing session. If you try, you will get an </font></span><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us">ORA-25242: Cannot change subscriber name from string to string without FIRST_MESSAGE option. <o:p></o:p></span></font></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">As the message describes further, you need to change the navigation of the dequeue. The default navigation is next_message, which means that Oracle will read the queue in a read-consistent and ordered way. It will take a snapshot of the queue when the first message is dequeued, and will dequeue the messages in that order. Messages that were enqueued after the first dequeue, will be read after reading all the messages in the queue. Even if priority ordering means they are enqueued earlier. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">An alternative navigation is &lsquo;first_message&rsquo;. When the navigation is set to &lsquo;first_message&rsquo;, Oracle will take a new snapshot before every dequeue, and start with the first message eligible for dequeuing. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Because we change subscribers, we need to set navigation to &lsquo;First_message&rsquo;, to force Oracle to take a new snapshot. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">(Btw. If you would try &lsquo;first_message&rsquo; with dequeue_mode &lsquo;Browse&rsquo;, you would never get beyond the first message. Try it!)<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">(Btw2. The same goes for changing the filter options like correlation.)<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Let&rsquo;s start a new session, and enqueue a new message: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_payload := utl_raw.cast_to_raw(&#39;Hello agents!&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.enqueue(Queue_name=&gt;&#39;xxx_mc_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">The message is still the same in xxx_mc_test:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select q_name, rawtohex(msgid) msg_id,state,enq_time,enq_uid from xxx_mc_test<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Q_NAME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSG_ID<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>STATE ENQ_TIME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ENQ_UID<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_MC_TEST_Q 45F11423444747B99600BCD8E9B3141E<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>0 21-03-10 14:33:23,783000000 SYSTEM<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">But in the queue view, we now see 2 records: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select queue,msg_id,msg_state,enq_time,enq_user_id,consumer_name from aq$xxx_mc_test;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">QUEUE<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSG_ID<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>STATE ENQ_TIME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ENQ_USER_ID CONSUMER_NAME<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_MC_TEST_Q<span style="mso-tab-count: 1"> </span>45F11423444747B99600BCD8E9B3141E READY 21-03-10 14:33:24 SYSTEM<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>AGENT1<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_MC_TEST_Q<span style="mso-tab-count: 1"> </span>45F11423444747B99600BCD8E9B3141E READY 21-03-10 14:33:24 SYSTEM<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>AGENT2<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">One record for each subscriber. We can see the same in the dequeue_iot and in the history table: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select subscriber#,queue#,msg_enq_time,msgid from aq$_xxx_mc_test_i;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SUBSCRIBER# QUEUE# MSG_ENQ_TIME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSGID<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8211; &#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>0 21-03-10 14:33:23,783000000 45F11423444747B99600BCD8E9B3141E<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>21<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>0 21-03-10 14:33:23,783000000 45F11423444747B99600BCD8E9B3141E<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Select Msgid,Subscriber#,Name,Dequeue_time,Dequeue_user From Aq$_xxx_mc_test_h;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">MSGID<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SUBSCRIBER# NAME DEQUEUE_TIME DEQUEUE_USER<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8211; &#8212;- &#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">45F11423444747B99600BCD8E9B3141E<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>1<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>0<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">45F11423444747B99600BCD8E9B3141E<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>21<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>0<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">Now when we dequeue the message, the queue table is not updated:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Select Rawtohex(Msgid) Msg_id,State,Enq_time,Enq_uid,deq_time,deq_uid From Xxx_mc_test;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">MSG_ID <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>STATE ENQ_TIME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>ENQ_UID DEQ_TIME DEQ_UID<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;- &#8212;&#8212;&#8211; &#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">45F11423444747B99600BCD8E9B3141E<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>0 21-03-10 14:33:23,783000000 SYSTEM<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">However, the queue view reflects that the message has been dequeued by one subscriber. <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Select Queue,Msg_id,Msg_state,Enq_time,Enq_user_id,Consumer_name From Aq$xxx_mc_test;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">QUEUE<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSG_ID<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSG_STATE ENQ_TIME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>ENQ_USER CONSUMER_NAME<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_MC_TEST_Q 45F11423444747B99600BCD8E9B3141E PROCESSED 21-03-10 14:33:24 SYSTEM<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>AGENT1<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_MC_TEST_Q 45F11423444747B99600BCD8E9B3141E READY<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>21-03-10 14:33:24 SYSTEM<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>AGENT2<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">The record for Agent1 has been deleted from the dequeue-IOT:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select subscriber#,queue#,msg_enq_time,msgid from aq$_xxx_mc_test_i;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">SUBSCRIBER# QUEUE# MSG_ENQ_TIME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSGID<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8211; &#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>21<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>0 21-03-10 14:33:23,783000000 45F11423444747B99600BCD8E9B3141E<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">And the history table also shows the dequeue: <o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Select msgid, subscriber#, Dequeue_time,Dequeue_user From Aq$_xxx_mc_test_h;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">MSGID<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>SUBSCRIBER# DEQUEUE_TIME<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>DEQUEUE_USER <o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">45F11423444747B99600BCD8E9B3141E <span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>21<span style="mso-tab-count: 1">&nbsp;&nbsp; </span>21-03-10 14:33:23,783000000 SYSTEM<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">45F11423444747B99600BCD8E9B3141E<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>1<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span><o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font face="Calibri"><font color="#000000">To dequeue the message for &lsquo;Agent2&rsquo;. We of course need to set the navigation to &lsquo;First_message&rsquo;:<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options.Wait := Dbms_aq.No_wait;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options.Navigation:=Dbms_aq.First_message;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.consumer_name:=&#39;Agent2&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_mc_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000"><font face="Calibri">Now after the QMON has processed the queue, the records will be deleted from all queues. (When a retention time has been set, the records will of course be retained for that time).<o:p></o:p></font></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" face="Calibri" size="3">&nbsp;</font></o:p></span></p>
<h2 style="margin: 10pt 0cm 0pt"><font size="4"><font color="#4f81bd"><font face="Cambria"><span lang="EN-US" style="mso-ansi-language: en-us">Rules for multi-consumer queues</span><span lang="EN-US" style="line-height: 115%; font-family: 'calibri', 'sans-serif'; font-size: 11pt; mso-ansi-language: en-us; mso-fareast-font-family: calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-bidi-font-family: 'times new roman'; mso-bidi-theme-font: minor-bidi"><o:p></o:p></span></font></font></font></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">So far we have seen different kinds of filtering for dequeuing messages. A new option comes with multi-consumer queues, where different subscribers can put a filter on their subscriptions. These filters (rules) can take the form of (complex) predicates that return a Boolean value. The rule can reference both message_properties as payload. To reference the payload, use a qualifier of &lsquo;tab.user_data&rsquo;. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">Let&rsquo;s build a new queue. To make optimal use of the &lsquo;rule&rsquo;-functionality we&rsquo;ll use a custom type that can be referred to in the &lsquo;rules&rsquo;. The type that we&rsquo;ll use is loosely based on the emp table. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">create type t_emp as object<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">(empno<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>number<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,ename<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>varchar2(10)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,job<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>varchar2(9)<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">BEGIN<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DBMS_AQADM.CREATE_QUEUE_TABLE (queue_table =&gt; &#39;xxx_rule_test&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 108pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,queue_payload_type =&gt; &#39;t_emp&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DBMS_AQADM.CREATE_QUEUE(queue_name =&gt; &#39;xxx_rule_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span>,queue_table =&gt; &#39;xxx_rule_test&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DBMS_AQADM.START_QUEUE (queue_name =&gt; &#39;xxx_rule_test_q&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">END;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">We add 2 subscribers to this queue.<o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DECLARE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_agent sys.aq$_agent;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">BEGIN<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_agent:= sys.aq$_agent(&#39;HR_President&#39;,NULL,NULL);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DBMS_AQADM.ADD_SUBSCRIBER(queue_name=&gt;&#39;xxx_rule_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>,subscriber=&gt;v_agent<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>,rule=&gt;&#39;tab.user_data.job=&#39;&#39;President&#39;&#39;&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_agent:= sys.aq$_agent(&#39;HR_Employee&#39;,NULL,NULL);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">DBMS_AQADM.ADD_SUBSCRIBER(queue_name=&gt;&#39;xxx_rule_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 72pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>,subscriber=&gt;v_agent);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">END;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">Note how the agent &lsquo;HR_President&rsquo; has a rule added to its subscription. Only messages where the job attribute of the payload is &lsquo;President&rsquo; are eligible for dequeuing by this agent. Let&rsquo;s enqueue some messages on this queue.<o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload t_emp;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_enq_options Dbms_aq.enqueue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_payload := t_emp(1,&#39;Jones&#39;,&#39;Manager&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.enqueue(Queue_name=&gt;&#39;xxx_rule_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_payload := t_emp(2,&#39;King&#39;,&#39;President&#39;);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.enqueue(Queue_name=&gt;&#39;xxx_rule_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,enqueue_options=&gt;V_enq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(utl_raw.cast_to_varchar2(V_msgid));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">Now we have 2 messages. Only one of which matches the rule for the &lsquo;HR_President&rsquo; subscriber. The &lsquo;HR_Employee&rsquo; subscriber does not have any rule, and is thus eligible for all messages. We can see this when we query the queue-view:<o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">select queue,rawtohex(msg_id) msg_id,msg_state,consumer_name from aq$xxx_rule_test;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">QUEUE<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>MSG_ID<span style="mso-tab-count: 4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;</span>MSG_STATE CONSUMER_NAME<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">&#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;-<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_RULE_TEST_Q 4D0FF7A800834559809AD90AFCA81444 READY<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>HR_EMPLOYEE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_RULE_TEST_Q E5A2FDFD8EE942349E9BC9DEE88CEB10 READY<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>HR_EMPLOYEE<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">XXX_RULE_TEST_Q E5A2FDFD8EE942349E9BC9DEE88CEB10 READY<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>HR_PRESIDENT<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">We see that both messages are enqueued for the &lsquo;HR_Employee&rsquo;. But only the message with the job &lsquo;President&rsquo; is enqueued for the the &lsquo;HR_President&rsquo;.<o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">Let&rsquo;s dequeue the messages as &lsquo;HR_President&rsquo; first, then as &lsquo;HR_Employee&rsquo;. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload t_emp;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.wait := dbms_aq.no_wait;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.consumer_name:=&#39;HR_President&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_rule_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(v_payload.empno||&#39; &#39;||v_payload.ename);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">2 King<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">This time the first message enqueued was ignored for this subscriber. Only the message that met its rule was dequeued. When dequeuing as the &lsquo;HR_Employee&rsquo; both messages will be dequeued. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload t_emp;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.wait := dbms_aq.no_wait;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.navigation := dbms_aq.first_message;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.consumer_name:=&#39;HR_Employee&#39;;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_rule_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(v_payload.empno||&#39; &#39;||v_payload.ename);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_deq_options.navigation := dbms_aq.next_message;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(Queue_name=&gt;&#39;xxx_rule_test_q&#39;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(v_payload.empno||&#39; &#39;||v_payload.ename);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">1 Jones<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">2 King<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">After these dequeues, the queue is empty for these subscribers. The only message eligible for &lsquo;HR_President&rsquo; was the message with &lsquo;2,King,President&rsquo;. &lsquo;HR_Employee&rsquo; was eligible for both messages. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">Remember that the &lsquo;Rule&rsquo; must evaluate to a Boolean value. Valid references are to &lsquo;tab.user_data.&rsquo;, for object_type payloads. Also columns like &lsquo;priority&rsquo; or &lsquo;correlation&rsquo; from the message properties can be referenced in the rule.<o:p></o:p></font></font></span></p>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us; mso-fareast-font-family: calibri; mso-fareast-theme-font: minor-latin"><o:p><font color="#4f81bd" face="Cambria" size="4">&nbsp;</font></o:p></span></h2>
<h2 style="margin: 10pt 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us; mso-fareast-font-family: calibri; mso-fareast-theme-font: minor-latin"><font size="4"><font color="#4f81bd"><font face="Cambria">Common issues with queues and troubleshooting<o:p></o:p></font></font></font></span></h2>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">Above we already saw several error messages related to queues. Most of them can be expected, and should be handled in the code.<o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">The most common issues with queues are from queues not started, or not started for enqueuing or dequeuing. The error messages for this should be quite clear, and you can just start the queue with the &lsquo;dbms_aqadm.start_queue&rsquo; package. Note that when the queue is started for enqueuing or dequeuing only, you need to stop it first, then start again with the correct options enabled. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">Another issue may occur because of the AQ error handling system. A dequeue with dequeue_mode &lsquo;REMOVE&rsquo; that needs to roll back afterwards, is considered a failed attempt. When the number of failed attempts exceed the retry count of the queue, the message will be moved to the Exception queue. The message remains in the queue table, but with status 3: Expired. The exception_queue field will be set to the name of the exception queue. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">These messages are not available for dequeuing anymore. They must be dequeued from the exception queue.<o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><o:p><font color="#000000" size="3">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">To dequeue from an exception queue, it first needs to be enabled for dequeuing. (It cannot be enabled for enqueuing). Also no subscriber_name is allowed for the dequeue. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aqadm.Start_queue(Queue_name=&gt;&#39;aq$_xxx_mc_test_e&#39;,<b style="mso-bidi-font-weight: normal">Enqueue=&gt;False</b>,Dequeue=&gt;True);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">end;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Declare<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_payload Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_msgid Raw(200);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options Dbms_aq.dequeue_options_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">v_msg_properties dbms_aq.message_properties_t;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Begin<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">V_deq_options.Wait := Dbms_aq.No_wait;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_aq.dequeue(<b style="mso-bidi-font-weight: normal">Queue_name=&gt;&#39;AQ$_XXX_MC_TEST_E&#39;</b><o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Message_properties=&gt;V_msg_properties<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,dequeue_options=&gt;V_deq_options<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000"><span style="mso-spacerun: yes">&nbsp; </span><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp; </span>,Payload=&gt;V_payload<o:p></o:p></font></span></p>
<p class="MsoNormal" style="text-indent: 36pt; margin: 0cm 0cm 0pt 36pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">,Msgid=&gt;V_msgid);<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">Dbms_output.Put_line(Utl_raw.Cast_to_varchar2(V_payload));<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 8pt; mso-ansi-language: en-us"><font color="#000000">End;<o:p></o:p></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="mso-ansi-language: en-us"><font size="3"><font color="#000000">The last issue to note with queues (especially in eBS systems) is described in Metalink note &nbsp;267137.1. If multi-consumer queues are created in an ASSM tablespace, or when using freelist groups, QMON will not perform space management on the IOT&rsquo;s. This will result in ever growing IOT&rsquo;s and eventually in deteriorating performance. <o:p></o:p></font></font></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt"><span lang="EN-US" style="line-height: 115%; font-family: 'courier new'; font-size: 10pt; mso-ansi-language: en-us; mso-fareast-font-family: 'times new roman'; mso-fareast-language: nl"><o:p><font color="#000000">&nbsp;</font></o:p></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.stijf.com/wordpress/2010/03/oracle-advanced-queues-aq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selecting from custom types in (workflow) tables</title>
		<link>http://www.stijf.com/wordpress/2010/02/selecting-from-custom-types-in-workflow-tables/</link>
		<comments>http://www.stijf.com/wordpress/2010/02/selecting-from-custom-types-in-workflow-tables/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 10:16:44 +0000</pubDate>
		<dc:creator>Arian Stijf</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[eBS]]></category>
		<category><![CDATA[collection]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[payload]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[type]]></category>
		<category><![CDATA[user_data]]></category>
		<category><![CDATA[wf_notification_out]]></category>

		<guid isPermaLink="false">http://www.stijf.com/wordpress/?p=389</guid>
		<description><![CDATA[&#160;
After a long silence, it&#8217;s time to write another blog entry. I received a request to write about Oracle Reports. And I think that will be a new series (Even though I didn&#8217;t finish the workflow series yet).&#160;
&#160;
But the last few days, I&#8217;ve been working on cleaning up workflow tables.&#160;
Most of these tables are very [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>After a long silence, it&rsquo;s time to write another blog entry. I received a request to write about Oracle Reports. And I think that will be a new series (Even though I didn&rsquo;t finish the workflow series yet).&nbsp;</p>
<p>&nbsp;</p>
<p>But the last few days, I&rsquo;ve been working on cleaning up workflow tables.&nbsp;</p>
<p>Most of these tables are very straightforward and you can find queries and descriptions in the workflow series. However, there are some more complex cases. There are the advanced queuing (aq) tables. And also some data hidden in wf_item_attribute_values for items started by the Business Event System (BES) (reminder to self: Write that article about BES too).</p>
<p>&nbsp;</p>
<p>In the aq-tables, the payload of the message (i.e. the data transferred by the message) is stored in a custom type.&nbsp;The same goes for &nbsp;the event_data in wf_item_attribute_values.&nbsp;In this article we&rsquo;ll see how we can get the data from those &lsquo;strange&rsquo; columns.&nbsp;</p>
<p>&nbsp;</p>
<p>Let us start with wf_item_attribute_values. Processes that are started from a business event, store the data from the originating business event in the column &lsquo;EVENT_VALUE&rsquo;. This has a type &lsquo;WF_EVENT_T&rsquo;. When you query it in a sql*plus session, you will see a huge column filled with something like:&nbsp;</p>
<p>&nbsp;</p>
<pre>EVENT_VALUE(PRIORITY, SEND_DATE, RECEIVE_DATE, CORRELATION_ID, PARAMETER_LIST(NAME, VALUE), EVENT_NA
----------------------------------------------------------------------------------------------------
WF_EVENT_T(0, &#39;17-SEP-09&#39;, NULL, NULL, WF_PARAMETER_LIST_T(WF_PARAMETER_T(&#39;TASK_ID&#39;, &#39;16719879&#39;), WF(&#39;ABORT_WORKFLOW&#39;, &#39;N&#39;), WF_PARAMETER_T(&#39;SUB_GUID&#39;, &#39;73BAB9A51BAF5307E04400144F687CA0&#39;)), &#39;oracle.ap, NULL, NULL)</pre>
<p>&nbsp;</p>
<p>The problem that many ebs-dba&rsquo;s are facing is how to select the data inside this column. In this case, it would be the task_id that we are interested in. Oracle delivers several API&#39;s for use in PL/SQL. But sometimes you want plain SQL.&nbsp;</p>
<p>One way to do it is to use a clever substr/instr construction or a regular expression. But the efficient way to do it, is to tell Oracle which info you want.&nbsp;</p>
<p>Let&rsquo;s take a look at the custom type. As mentioned, it is WF_EVENT_T. We can find the description in the DBA_TYPES table.</p>
<p>&nbsp;</p>
<pre>select owner,type_name,typecode,attributes,methods
from dba_types
where type_name=&#39;WF_EVENT_T&#39;;

OWNER                          TYPE_NAME                      TYPECODE                       ATTRIBUTES    METHODS
------------------------------ ------------------------------ ------------------------------ ---------- ----------
APPS                           WF_EVENT_T                     OBJECT                                 13         31</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>This tells us that the WF_EVENT_T is an object type.&nbsp;</p>
<p>We can find its attributes in DBA_TYPE_ATTRS:&nbsp;</p>
<pre>select owner,type_name,attr_name,attr_type_owner,attr_type_name,length
from dba_type_attrs
where type_name=&rsquo;WF_EVENT_T&rsquo;;

OWNER		TYPE_NAME	ATTR_NAME         	ATTR_TYPE_OWNER		ATTR_TYPE_NAME
---------	------------	-------------------	----------------	--------------
APPS   		WF_EVENT_T      CORRELATION_ID					VARCHAR2
APPS     	WF_EVENT_T      ERROR_MESSAGE       				VARCHAR2
APPS     	WF_EVENT_T      ERROR_STACK         				VARCHAR2
APPS     	WF_EVENT_T      ERROR_SUBSCRIPTION  				RAW
APPS     	WF_EVENT_T      EVENT_DATA          				CLOB
APPS     	WF_EVENT_T      EVENT_KEY					VARCHAR2
APPS     	WF_EVENT_T      EVENT_NAME          				VARCHAR2
APPS     	WF_EVENT_T      FROM_AGENT         	APPS			WF_AGENT_T
APPS     	WF_EVENT_T      PARAMETER_LIST    	APPS			WF_PARAMETER_LIST_T
APPS     	WF_EVENT_T      PRIORITY         				NUMBER
APPS     	WF_EVENT_T      RECEIVE_DATE     				DATE
APPS     	WF_EVENT_T     	SEND_DATE        				DATE
APPS     	WF_EVENT_T     	TO_AGENT         	APPS			WF_AGENT_T<span class="Apple-style-span" style="white-space: normal;">
</span></pre>
<p>You see that the attributes are defined including their datatype, which can be a seeded datatype (VARCHAR2) or a custom one (WF_PARAMETER_LIST_T). Now that we now the attributes of the type, we can select them directly. To select the &lsquo;PRIORITY&rsquo;, just use an extra qualifier:&nbsp;</p>
<pre>select v.event_value.priority
from   wf_item_attribute_values v
where  ROWNUM = 1;

EVENT_VALUE.PRIORITY
--------------------
                   0<span class="Apple-style-span" style="white-space: normal;">
</span></pre>
<p>But how about the &lsquo;PARAMETER_LIST&rsquo;? That is where the task_id was stored. Let&rsquo;s check the WF_PARAMETER_LIST_T definition:&nbsp;</p>
<pre>select owner,type_name,typecode,attributes,methods
from   dba_types
where  type_name =&#39;WF_PARAMETER_LIST_T&#39;;

OWNER	  TYPE_NAME         	TYPECODE  		ATTRIBUTES  METHODS
--------- -------------------	-------------------	----------- -------
APPS      WF_PARAMETER_LIST_T	COLLECTION       		  0       0
</pre>
<p>&nbsp;</p>
<p>This time, the type is a collection. We can find more info about a collection with:&nbsp;</p>
<pre>select type_name,coll_type,elem_type_owner,elem_type_name
from 	 dba_coll_types
where  type_name=&#39;WF_PARAMETER_LIST_T&#39;;

TYPE_NAME                      COLL_TYPE                      ELEM_TYPE_OWNER                ELEM_TYPE_NAME
------------------------------ ------------------------------ ------------------------------ --------------
WF_PARAMETER_LIST_T            VARYING ARRAY                  APPS                           WF_PARAMETER_T
</pre>
<p>&nbsp;</p>
<p>So the WF_PARAMETER_LIST_T is a Varray of WF_PARAMETER_T. Before we look at selecting from Varrays, we first check what WF_PARAMETER_T looks like:</p>
<pre>select owner,type_name,typecode,attributes,methods
from   dba_types
where  type_name =&#39;WF_PARAMETER_T&#39;;

OWNER	  TYPE_NAME           TYPECODE	ATTRIBUTES METHODS
--------- ------------------- ---------	---------- ----------
APPS  	  WF_PARAMETER_T      OBJECT             2          4
</pre>
<p>&nbsp;</p>
<p>That is an object type again. So we select:&nbsp;</p>
<pre>select owner,type_name,attr_name,attr_type_owner,attr_type_name
from   dba_type_attrs
where  type_name=&#39;WF_PARAMETER_T&#39;;

OWNER	TYPE_NAME             ATTR_NAME	ATTR_TYPE_OWNER	    ATTR_TYPE_NAME
--------- ------------------- --------- ------------------- --------------
APPS	WF_PARAMETER_T        NAME			    VARCHAR2
APPS	WF_PARAMETER_T	      VALUE			    VARCHAR2
</pre>
<p>&nbsp;</p>
<p>Ok. We now know the whole structure of the parameter list. Back to the Varray. &nbsp;A Varray (Varying Array) is of course an array structure. Since this is similar to a table structure, you can cast the Varray into a table. Then you use the casted table to select your data. Let&rsquo;s do that to get the names from the parameter list.</p>
<pre>select t.name
from   wf_item_attribute_values v
,      table(v.event_value.parameter_list) t
Where  v.event_value IS NOT NULL
And    ROWNUM = 1;

NAME
------------------------------
TASK_ID
</pre>
<p>&nbsp;</p>
<p>Now that&rsquo;s a neat trick. We can join our table to its own column!&nbsp;</p>
<p>In our case, we only have a task_id parameter. We could do the same again, to get the value of the parameter from the value column.</p>
<p>But to join wf_item_attribute_values to itself is a very expensive operation. Take a look at the explain plan:&nbsp;</p>
<pre>PLAN_TABLE_OUTPUT

-----------------------------------------------------------------------------------------------------------------
| Id  | Operation                           |  Name                     | Rows  | Bytes | Cost  | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                    |                           |     1 |    62 |   432M|       |       |
|*  1 |  COUNT STOPKEY                      |                           |       |       |       |       |       |
|   2 |   NESTED LOOPS                      |                           |   207G|    11T|   432M|       |       |
|   3 |    PARTITION RANGE ALL              |                           |       |       |       |     1 |    77 |
|   4 |     PARTITION HASH ALL              |                           |       |       |       |     1 |     8 |
|*  5 |      TABLE ACCESS FULL              | WF_ITEM_ATTRIBUTE_VALUES  |    25M|  1453M|   948K|     1 |   616 |
|   6 |    COLLECTION ITERATOR PICKLER FETCH|                           |       |       |       |       |       |
-----------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(ROWNUM=1)
   5 - filter(SYS_OP_NOEXPAND(&quot;V&quot;.&quot;EVENT_VALUE&quot;) IS NOT NULL)

Note: cpu costing is off
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>That can kind of hurt if it,were it not for the NL with a COUNT STOPKEY (Because of the rownum=1). The reason for the expensive plan, is because for every row from wf_item_attribute_values, Oracle needs to get the data from event_value. It basically does a carthesian join with itself.</p>
<p>So here is another way to get your data:&nbsp;</p>
<pre>select v.item_key
,      (select value
        from table(v.event_value.parameter_list) t
        where t.name=&#39;TASK_ID&#39; ) task_id
from   wf_item_attribute_values v
where  v.event_value is not null
and    rownum=1;

ITEM_KEY						TASK_ID
-------------------------------------------------	--------
oracle.apps.jtf.cac.task.createTask-155563676		16719879
</pre>
<p>&nbsp;</p>
<p>Now we use a scalar subquery, where Oracle will access only the event_value for the rows that will be returned to the user. You can see this in the explain plan by the collection iterator picklefetch (= the operation that collects the data from a collection type) being pushed up to just before the select.&nbsp;</p>
<pre>PLAN_TABLE_OUTPUT

---------------------------------------------------------------------------------------------------------------
| Id  | Operation                         |  Name                     | Rows  | Bytes | Cost  | Pstart| Pstop |
---------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                  |                           |     1 |    60 |   948K|       |       |
|*  1 |  COLLECTION ITERATOR PICKLER FETCH|                           |       |       |       |       |       |
|*  2 |  COUNT STOPKEY                    |                           |       |       |       |       |       |
|   3 |   PARTITION RANGE ALL             |                           |       |       |       |     1 |    77 |
|   4 |    PARTITION HASH ALL             |                           |       |       |       |     1 |     8 |
|*  5 |     TABLE ACCESS FULL             | WF_ITEM_ATTRIBUTE_VALUES  |    25M|  1453M|   948K|     1 |   616 |
---------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter(SYS_OP_ATG(VALUE(KOKBF$),1,2,2)=&#39;TASK_ID&#39;)
   2 - filter(ROWNUM=1)
   5 - filter(SYS_OP_NOEXPAND(&quot;SYS_ALIAS_1&quot;.&quot;EVENT_VALUE&quot;) IS NOT NULL)

Note: cpu costing is off
</pre>
<p>&nbsp;</p>
<p>Still expensive. But much better.</p>
<p>&nbsp;</p>
<p>So that will let us peek into the &nbsp;event_value column on wf_item_attribute values. Be aware that different processes will enter different parameters into the event_value column. But with the information above you should be able to understand how to select the data and use it in your own queries.&nbsp;</p>
<p>&nbsp;</p>
<p>Now let&rsquo;s take a look at the AQ-tables?&nbsp;</p>
<p>As I mentioned, they carry their payloads in custom types too. One that most ebs-dba&rsquo;s will have seen is WF_NOTIFICATION_OUT. When the workflow engine generates a notification, it will be stored in &lsquo;WF_NOTIFICATIONS&rsquo;. However, a message will be posted on &lsquo;WF_NOTIFICATION_OUT&rsquo; too. This message will be read by the workflow notification mailer, which will use it to get the relevant data from WF_NOTIFICATIONS.</p>
<p>&nbsp;</p>
<p>If you haven&rsquo;t run the notification mailer for a long time, you might want to clean up WF_NOTIFICATION_OUT a bit. There is a script available from Metalink to do the job. (There is also a quicker but unsupported way). But you might want to see the records in WF_NOTIFICATION_OUT related to WF_NOTIFICATIONS to decide if a cleanup is appropriate.&nbsp;</p>
<p>&nbsp;</p>
<p>Let&rsquo;s look at WF_NOTIFICATION_OUT:</p>
<pre>Name                    Null?    Type
----------------------- -------- ----------------
Q_NAME                           VARCHAR2(30)
MSGID                   NOT NULL RAW(16)
CORRID                           VARCHAR2(128)
PRIORITY                         NUMBER
STATE                            NUMBER
DELAY                            DATE
EXPIRATION                       NUMBER
TIME_MANAGER_INFO                DATE
LOCAL_ORDER_NO                   NUMBER
CHAIN_NO                         NUMBER
CSCN                             NUMBER
DSCN                             NUMBER
ENQ_TIME                         DATE
ENQ_UID                          NUMBER
ENQ_TID                          VARCHAR2(30)
DEQ_TIME                         DATE
DEQ_UID                          NUMBER
DEQ_TID                          VARCHAR2(30)
RETRY_COUNT                      NUMBER
EXCEPTION_QSCHEMA                VARCHAR2(30)
EXCEPTION_QUEUE                  VARCHAR2(30)
STEP_NO                          NUMBER
RECIPIENT_KEY                    NUMBER
DEQUEUE_MSGID                    RAW(16)
SENDER_NAME                      VARCHAR2(30)
SENDER_ADDRESS                   VARCHAR2(1024)
SENDER_PROTOCOL                  NUMBER
USER_DATA                        SYS.AQ$_JMS_TEXT _MESSAGE
</pre>
<p>&nbsp;</p>
<p>The regular AQ-information is there. And our payload in USER_DATA. This time it&rsquo;s an AQ-type.&nbsp;</p>
<p>Let&rsquo;s follow the same procedure:&nbsp;</p>
<pre>select type_name,typecode,attributes,methods
from   dba_types
where  type_name=&#39;AQ$_JMS_TEXT_MESSAGE&#39;;

TYPE_NAME                      TYPECODE                       ATTRIBUTES    METHODS
------------------------------ ------------------------------ ---------- ----------
AQ$_JMS_TEXT_MESSAGE           OBJECT                                  4         34
</pre>
<p>An object type. So let&rsquo;s see its attributes:&nbsp;</p>
<pre>select type_name,attr_name,attr_type_owner,attr_type_name
from   dba_type_attrs
where  type_name=&#39;AQ$_JMS_TEXT_MESSAGE&#39;;

TYPE_NAME                      ATTR_NAME                      ATTR_TYPE_OWNER                ATTR_TYPE_NAME
------------------------------ ------------------------------ ------------------------------ --------------
AQ$_JMS_TEXT_MESSAGE           HEADER                         SYS                            AQ$_JMS_HEADER
AQ$_JMS_TEXT_MESSAGE           TEXT_LEN                                                      INTEGER
AQ$_JMS_TEXT_MESSAGE           TEXT_LOB                                                      CLOB
AQ$_JMS_TEXT_MESSAGE           TEXT_VC                                                       VARCHAR2
</pre>
<p>&nbsp;</p>
<p>We can already read the text_len, text_lob and text_vc. The last 2 contain an XML with a reference to the notification. But the information that I want to show you is in the header. This is a type &lsquo;AQ$_JMS_HEADER&rsquo;. When we check this one, we see that it again is an object with these attributes:</p>
<pre>select type_name,typecode,attributes,methods
from   dba_types
where  type_name=&#39;AQ$_JMS_HEADER&#39;;

TYPE_NAME                      TYPECODE                       ATTRIBUTES    METHODS
------------------------------ ------------------------------ ---------- ----------
AQ$_JMS_HEADER                 OBJECT                                  7         31

select type_name,attr_name,attr_type_owner,attr_type_name
from   dba_type_attrs
where  type_name=&#39;AQ$_JMS_HEADER&#39;;

TYPE_NAME                      ATTR_NAME                      ATTR_TYPE_OWNER                ATTR_TYPE_NAME
------------------------------ ------------------------------ ------------------------------ -------
AQ$_JMS_HEADER                 APPID                                                         VARCHAR2
AQ$_JMS_HEADER                 GROUPID                                                       VARCHAR2
AQ$_JMS_HEADER                 GROUPSEQ                                                      INTEGER
AQ$_JMS_HEADER                 PROPERTIES                     SYS                            AQ$_JMS_USERPROPARRAY
AQ$_JMS_HEADER                 REPLYTO                        SYS                            AQ$_AGENT
AQ$_JMS_HEADER                 TYPE                                                          VARCHAR2
AQ$_JMS_HEADER                 USERID                                                        VARCHAR2
</pre>
<p>&nbsp;</p>
<p>As you can imagine, we need to drill down into &lsquo;PROPERTIES&rsquo;. The other attributes might or might not contain any data, depending on the notification. properties is a Varray of &lsquo;AQ$_JMS_USERPROPERTY&rsquo;:</p>
<pre>select type_name,typecode,attributes,methods
from   dba_types
where  type_name=&#39;AQ$_JMS_USERPROPARRAY&#39;;

TYPE_NAME                      TYPECODE                       ATTRIBUTES    METHODS
------------------------------ ------------------------------ ---------- ----------
AQ$_JMS_USERPROPARRAY          COLLECTION                              0          0

select type_name,coll_type,elem_type_owner,elem_type_name
from 	 dba_coll_types
where  type_name=&#39;AQ$_JMS_USERPROPARRAY&#39;;

TYPE_NAME                      COLL_TYPE                      ELEM_TYPE_OWNER                ELEM_TYPE_NAME
------------------------------ ------------------------------ ------------------------------ --------------------
AQ$_JMS_USERPROPARRAY          VARYING ARRAY                  SYS                            AQ$_JMS_USERPROPERTY
</pre>
<p>&nbsp;</p>
<p>One more level to check:&nbsp;</p>
<pre>select type_name,typecode,attributes,methods
from   dba_types
where  type_name=&#39;AQ$_JMS_USERPROPERTY&#39;;

TYPE_NAME                      TYPECODE                       ATTRIBUTES    METHODS
------------------------------ ------------------------------ ---------- ----------
AQ$_JMS_USERPROPERTY           OBJECT                                  5          0

select type_name,attr_name,attr_type_owner,attr_type_name
from   dba_type_attrs
where  type_name=&#39;AQ$_JMS_USERPROPERTY&#39;;

TYPE_NAME                      ATTR_NAME                      ATTR_TYPE_OWNER                ATTR_TYPE_NAME
------------------------------ ------------------------------ ------------------------------ -------
AQ$_JMS_USERPROPERTY           JAVA_TYPE                                                     INTEGER
AQ$_JMS_USERPROPERTY           NAME                                                          VARCHAR2
AQ$_JMS_USERPROPERTY           NUM_VALUE                                                     NUMBER
AQ$_JMS_USERPROPERTY           STR_VALUE                                                     VARCHAR2
AQ$_JMS_USERPROPERTY           TYPE                                                          INTEGER<span class="Apple-style-span" style="white-space: normal;">
</span></pre>
<p>&nbsp;</p>
<p>So let&rsquo;s see what properties we have. I just query the whole contents of properties for the first row in wf_notification_out (This particular system doesn&rsquo;t have a WF-mailer running. If it is running, chances are that you won&rsquo;t have any records in WF_NOTIFICATION_OUT).</p>
<pre>select p.*
from   (select *
        from wf_notification_out
        where rownum=1) n
,      table(n.user_data.header.properties) p;

NAME	              	TYPE  STR_VALUE	                                   NUM_VALUE JAVA_TYPE
----------------------- ----- -------------------------------------------- --------- ---------
BES_EVENT_NAME	      	  100 oracle.apps.wf.notification.send                              27
BES_EVENT_KEY	      	  100                                               39388680        27
BES_PRIORITY	      	  200                                                     50        23
BES_SEND_DATE	       	  100 2009/03/06 01:12:23		                            27
BES_RECEIVE_DATE	  100 2009/03/06 01:12:34		                            27
BES_FROM_AGENT	      	  100 WF_NOTIFICATION_OUT@TESTDB.STIJF.COM                          27
BES_ERROR_SUBSCRIPTION    100 C10E7C2EF71253C1E0340800208D03E1		           	    27
NOTIFICATION_ID	      	  100 39388680		                                            27
ROLE		       	  100 FND_RESP535:21704		                                    27
GROUP_ID		  100 39388680		                                            27
Q_CORRELATION_ID	  100 XDPWFSTD		                                            27
</pre>
<p>There you go. Among others, the &lsquo;NOTIFICATION_ID&rsquo; is there. It maps to the notification_id on &lsquo;WF_NOTIFICATIONS&rsquo;. And by now, we have seen enough to select it directly in our queries:</p>
<pre>select n.msgid,(select str_value
                from   table(n.user_data.header.properties)
		where  name=&#39;NOTIFICATION_ID&#39;) notification_id
from   wf_notification_out n
where  rownum=1;

MSGID			    	 NOTIFICATION_ID
-------------------------------- ---------------
64672D4985E57075E04400144F687CA0	39388680<span class="Apple-style-span" style="white-space: normal;">
</span></pre>
<p>That concludes this article. Based on the above, you will be able to select the data you want.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stijf.com/wordpress/2010/02/selecting-from-custom-types-in-workflow-tables/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>New article on custom types available</title>
		<link>http://www.stijf.com/wordpress/2010/02/new-article-on-custom-types-available/</link>
		<comments>http://www.stijf.com/wordpress/2010/02/new-article-on-custom-types-available/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 17:57:57 +0000</pubDate>
		<dc:creator>Arian Stijf</dc:creator>
				<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Workflow]]></category>
		<category><![CDATA[eBS]]></category>

		<guid isPermaLink="false">http://www.stijf.com/wordpress/?p=384</guid>
		<description><![CDATA[I just wrote an item about selecting from the special column types in the workflow tables. (for example EVENT_VALUE in WF_ITEM_ATTRIBUTE_VALUE and how to select notification_id from the USER_DATA in WF_NOTIFICATION_OUT)
Didn&#39;t have any time to format it in HTML format yet. So for the moment it is only available in PDF format from the link-page [...]]]></description>
			<content:encoded><![CDATA[<p>I just wrote an item about selecting from the special column types in the workflow tables. (for example EVENT_VALUE in WF_ITEM_ATTRIBUTE_VALUE and how to select notification_id from the USER_DATA in WF_NOTIFICATION_OUT)</p>
<p>Didn&#39;t have any time to format it in HTML format yet. So for the moment it is only available in PDF format from the <a href="http://www.stijf.com/wordpress/about/link-page/">link-page</a> and from <a href="http://www.stijf.com/wordpress/PDF/Workflow object types.pdf">here</a>.&nbsp;</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stijf.com/wordpress/2010/02/new-article-on-custom-types-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More on 1 != 1</title>
		<link>http://www.stijf.com/wordpress/2009/07/more-on-1-1/</link>
		<comments>http://www.stijf.com/wordpress/2009/07/more-on-1-1/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 08:51:19 +0000</pubDate>
		<dc:creator>Arian Stijf</dc:creator>
				<category><![CDATA[Internals]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.stijf.com/wordpress/?p=360</guid>
		<description><![CDATA[I was reading the WorkflowFaq Blog today, where they discuss when 1 != 1 in Oracle.
Of I did some testing with this. First of course I reproduced the issue easy enough:
&#160;
SQL&#62; select 1/3*3 from dual;
&#160;
&#160;&#160;&#160;&#160; 1/3*3

----------

&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1
&#160;
SQL&#62; select * from dual where 1/3*3=1;
No rows selected.
It is obviously a rounding issue. So what happens if we [...]]]></description>
			<content:encoded><![CDATA[<p>I was reading the <a href="http://www.workflowfaq.com/when-does-1-1/156">WorkflowFaq Blog </a>today, where they discuss when 1 != 1 in Oracle.</p>
<p>Of I did some testing with this. First of course I reproduced the issue easy enough:</p>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select 1/3*3 from dual;</pre>
<p>&nbsp;</p>
<pre language="SQL">&nbsp;&nbsp;&nbsp;&nbsp; 1/3*3

----------

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</pre>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select * from dual where 1/3*3=1;</pre>
<p>No rows selected.</p>
<p>It is obviously a rounding issue. So what happens if we force Oracle to round the result?</p>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select * from dual where round(1/3*3)=1;</pre>
<p>&nbsp;</p>
<pre language="SQL">D

-

X</pre>
<p>&nbsp;</p>
<p>If the rounding went wrong, it will most likely be on the low side (0.3333&#8230;&#8230;*3=0.9999&#8230;&#8230;)</p>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select trunc(1/3*3) from dual where ceil(1/3*3)=1;</pre>
<p>&nbsp;</p>
<pre language="SQL">D

-

0</pre>
<p>&nbsp;</p>
<p>We can see the real contents by dumping the result:</p>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select dump(1/3*3) d from dual
&nbsp; 2&nbsp; union
&nbsp; 3&nbsp; select dump(1) d from dual;</pre>
<p>&nbsp;</p>
<pre language="SQL">D

--------------------------------------------------------------------------------

Typ=2 Len=21: 192,100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,10

0,100,100,100,100</pre>
<p>&nbsp;</p>
<pre language="SQL">Typ=2 Len=2: 193,2&nbsp;</pre>
<p>I will go into the internal number format in a while. For now, it is sufficient to say that&nbsp;the 1/3*3 is indeed&nbsp;0.9999999&#8230;&#8230;.</p>
<p>Now how many decimals can we get?</p>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select to_char(1/3*3,&#39;9.99&#39;) from dual;</pre>
<p>&nbsp;</p>
<pre language="SQL">TO_CH

-----

&nbsp;1.00</pre>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select to_char(1/3*3,&#39;9.99999999999999999999999999999999999999999&#39;) from dual;</pre>
<p>&nbsp;</p>
<pre language="SQL">TO_CHAR(1/3*3,&#39;9.999999999999999999999999999

--------------------------------------------

&nbsp; .99999999999999999999999999999999999999990</pre>
<p>&nbsp;</p>
<p>There is the real value of 1/3*3.</p>
<p>The Oracle documentation says that the precision of the number format is 126 binary digits, approximately 38 decimals digits.</p>
<p>So when we force a mask with more decimals, Oracle will show the real value.</p>
<p>&Agrave;n interesting &#39;feature&#39;. And definitely something to keep in mind.</p>
<p>One last note on the dumping of numbers. <br />
	dump(&lt;number&gt;,10) will dump the decimal value. <br />
	dump(&lt;number&gt;,16) will dump the hexadecimal value.</p>
<p>How do we translate it back to the real value then? <br />
	Let&#39;s do the excercise for a few numbers: 1234.5678 and -1234.5678.</p>
<p>There is some difference between positive and negative values. So let&#39;s do the positive one first.</p>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select dump(1234.5678,10),dump(1234.5678,16) from dual;</pre>
<p>&nbsp;</p>
<pre language="SQL">DUMP(1234.5678,10)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DUMP(1234.5678,16)

---------------------------- --------------------------

Typ=2 Len=5: 194,13,35,57,79 Typ=2 Len=5: c2,d,23,39,4f</pre>
<p>&nbsp;</p>
<p>We start with the second to the last numbers. And we subtract 1:<br />
	194,12,34,56,78</p>
<p>Ignore the 194 for now, and put the decimal . after the second number: 12.345678</p>
<p>Now subtract 193 from the first value: 194-193=1.</p>
<p>Multiply the decimal value this number of times by 100: 12.345678 * 100 = 1234.5678.<br />
	(In our case we multiply by 100 once if the first value would be higher, mulitply more often).</p>
<p>
	The negative values are a little different:</p>
<p>&nbsp;</p>
<pre language="SQL">SQL&gt; select dump(-1234.5678,10),dump(-1234.5678,16) from dual;</pre>
<p>&nbsp;</p>
<pre language="SQL">DUMP(-1234.5678,10)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DUMP(-1234.5678,16)

------------------------------- ------------------------------

Typ=2 Len=6: 61,89,67,45,23,102 Typ=2 Len=6: 3d,59,43,2d,17,66</pre>
<p>&nbsp;</p>
<p>The 102 at the end means it is a negative value. Discard the 102 for the rest of the calculation.</p>
<p>61,89,67,45,23.</p>
<p>Subtract the second to the last number from 101.<br />
	101-89=12, 101-67=34, 101-45=56,101-23=78&nbsp; gives<br />
	61,12 34 56 78</p>
<p>Put the decimal . after the second number. So we get 12.345678</p>
<p>Now subtract 62 from the first value and multiply by 100: 61-62 = -1.</p>
<p>Finally we divide the value this number of times by 100. In our case we have a negative, so we <br />
	multiply instead:</p>
<p>12.345678 * 100 = 1234.5678 -&gt; And we had a negative. So -1234.5678</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stijf.com/wordpress/2009/07/more-on-1-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
