doc-exports/docs/dws/dev/dws_04_0517.html
Lu, Huayi e6fa411af0 DWS DEV 830.201 version
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com>
Co-authored-by: Lu, Huayi <luhuayi@huawei.com>
Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
2024-05-16 07:24:04 +00:00

508 lines
65 KiB
HTML

<a name="EN-US_TOPIC_0000001188482246"></a><a name="EN-US_TOPIC_0000001188482246"></a>
<h1 class="topictitle1">Arrays</h1>
<div id="body8662426"><div class="section" id="EN-US_TOPIC_0000001188482246__s4f2a661ba100495e9680efd6f7f06ecf"><h4 class="sectiontitle">Use of Array Types</h4><p id="EN-US_TOPIC_0000001188482246__a3db47cb6b0254265809fb3d51644fabd">Before the use of arrays, an array type needs to be defined:</p>
<div class="p" id="EN-US_TOPIC_0000001188482246__ab483e5e794fa49dcb7eb6a47885e5a49">Define an array type immediately after the <strong id="EN-US_TOPIC_0000001188482246__en-us_topic_0027042958_b18053254152735">AS</strong> keyword in a stored procedure. Run the following statement:<pre class="screen" id="EN-US_TOPIC_0000001188482246__s90274da8c1af4475984d9e081bc4317c">TYPE array_type IS VARRAY(size) OF data_type [NOT NULL];</pre>
</div>
<p id="EN-US_TOPIC_0000001188482246__afbef7d7c0876410697c89e26be2bc5e6">Its parameters are as follows:</p>
<ul id="EN-US_TOPIC_0000001188482246__u704b1aea093645379713952390d75e5c"><li id="EN-US_TOPIC_0000001188482246__l6d762994a85e487eaf0a42679411e380"><strong id="EN-US_TOPIC_0000001188482246__en-us_topic_0027042958_b2291843152735">array_type</strong>: indicates the name of the array type to be defined.</li><li id="EN-US_TOPIC_0000001188482246__l0106272e01a5467d9a09e1ef2a8106fd"><strong id="EN-US_TOPIC_0000001188482246__en-us_topic_0027042958_b51421633152735">VARRAY</strong>: indicates the array type to be defined.</li><li id="EN-US_TOPIC_0000001188482246__l55b1a0e030ef42d99b6985a5e093385f"><strong id="EN-US_TOPIC_0000001188482246__en-us_topic_0027042958_b4402755152735">size</strong>: indicates the maximum number of members in the array type to be defined. The value is a positive integer.</li><li id="EN-US_TOPIC_0000001188482246__laa6651f038434329a2cf3ecfa9e8d5cd"><strong id="EN-US_TOPIC_0000001188482246__en-us_topic_0027042958_b21078898152735">data_type</strong>: indicates the types of members in the array type to be created.</li><li id="EN-US_TOPIC_0000001188482246__li129536221294"><strong id="EN-US_TOPIC_0000001188482246__b11223929152014">NOT NULL</strong>: an optional constraint. It can be used to ensure that none of the elements in the array is <strong id="EN-US_TOPIC_0000001188482246__b170684112211">NULL</strong>.</li></ul>
<div class="note" id="EN-US_TOPIC_0000001188482246__nfd5cc7a265b34e57a7bbc08f8d892991"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><ul id="EN-US_TOPIC_0000001188482246__u0d788093c09a4a289bcde752734041dc"><li id="EN-US_TOPIC_0000001188482246__l3c541df8eeb749c5a44289390fa514d8">In <span id="EN-US_TOPIC_0000001188482246__text1902038345">GaussDB(DWS)</span>, an array automatically increases. If an access violation occurs, a null value will be returned, and no error message will be reported. If out-of-bounds write occurs in an array, the message <strong id="EN-US_TOPIC_0000001188482246__b141195612920">Subscript outside of limit</strong> is displayed.</li><li id="EN-US_TOPIC_0000001188482246__l404111d221a547e3bf1f9ac8e957dd8b">The scope of an array type defined in a stored procedure takes effect only in this storage process.</li><li id="EN-US_TOPIC_0000001188482246__lff5a3df4a1ad4843a704b28f646c5285">It is recommended that you use one of the preceding methods to define an array type. If both methods are used to define the same array type, <span id="EN-US_TOPIC_0000001188482246__text829646971">GaussDB(DWS)</span> prefers the array type defined in a stored procedure to declare array variables.</li></ul>
</div></div>
<p id="EN-US_TOPIC_0000001188482246__ae7b000d5271041e9a77e6133f0d3e5df">In <span id="EN-US_TOPIC_0000001188482246__text1956132454">GaussDB(DWS)</span> 8.1.0 and earlier versions, the system does not verify the length of array elements and out-of-bounds write because the array can automatically increase. This version adds related constraints to be compatible with Oracle databases. If out-of-bounds write exists, you can configure <strong id="EN-US_TOPIC_0000001188482246__b163617191411">varray_verification</strong> in the parameter <a href="dws_04_0945.html#EN-US_TOPIC_0000001233563213__section1980124735516">behavior_compat_options</a> to be compatible with previously unverified operations.</p>
<p id="EN-US_TOPIC_0000001188482246__p112876212139">Example:</p>
</div>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__secad9c67204f445f94631833da975a1b"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Declare an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">array_proc</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">ARRAY_INTEGER</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">;</span><span class="c1">--Define the array type.</span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">ARRAY_INTEGER_NOT_NULL</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INTEGER</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="p">;</span><span class="c1">-- Defines non-null array types.</span>
<span class="w"> </span><span class="n">ARRINT</span><span class="w"> </span><span class="n">ARRAY_INTEGER</span><span class="p">:</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ARRAY_INTEGER</span><span class="p">();</span><span class="w"> </span><span class="c1">--Declare the variable of the array type. </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">ARRINT</span><span class="p">.</span><span class="n">extend</span><span class="p">(</span><span class="mi">10</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="k">FOR</span><span class="w"> </span><span class="n">I</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="mi">1</span><span class="p">..</span><span class="mi">10</span><span class="w"> </span><span class="n">LOOP</span><span class="w"> </span>
<span class="w"> </span><span class="n">ARRINT</span><span class="p">(</span><span class="n">I</span><span class="p">)</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">I</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="k">END</span><span class="w"> </span><span class="n">LOOP</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="n">ARRINT</span><span class="p">.</span><span class="k">COUNT</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="n">ARRINT</span><span class="p">(</span><span class="mi">1</span><span class="p">));</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="n">ARRINT</span><span class="p">(</span><span class="mi">10</span><span class="p">));</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="n">ARRINT</span><span class="p">(</span><span class="n">ARRINT</span><span class="p">.</span><span class="k">FIRST</span><span class="p">));</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="n">ARRINT</span><span class="p">(</span><span class="n">ARRINT</span><span class="p">.</span><span class="k">last</span><span class="p">));</span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span>
<span class="c1">-- Invoke the stored procedure.</span>
<span class="k">CALL</span><span class="w"> </span><span class="n">array_proc</span><span class="p">();</span>
<span class="mi">10</span>
<span class="mi">1</span>
<span class="mi">10</span>
<span class="mi">1</span>
<span class="mi">10</span>
<span class="c1">-- Delete the stored procedure.</span>
<span class="k">DROP</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">array_proc</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section34111435113"><h4 class="sectiontitle">Declaration and Use of Rowtype Arrays</h4><p id="EN-US_TOPIC_0000001188482246__p441194155112">In addition to the declaration and use of common arrays and non-null arrays in the preceding example, the array also supports the declaration and use of rowtype arrays.</p>
<p id="EN-US_TOPIC_0000001188482246__p17218111381320">Example:</p>
</div>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen84212435111"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the COUNT function on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">tbl</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="nb">int</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="nb">int</span><span class="p">);</span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">tbl</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">),(</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">),(</span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">);</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">array_proc</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">CURSOR</span><span class="w"> </span><span class="n">all_tbl</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">tbl</span><span class="w"> </span><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">a</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">tbl_array_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">varray</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="n">tbl</span><span class="o">%</span><span class="n">rowtype</span><span class="p">;</span><span class="w"> </span><span class="c1">-- Defines the array of the rowtype type. tbl indicates any table.</span>
<span class="w"> </span><span class="n">tbl_array</span><span class="w"> </span><span class="n">tbl_array_type</span><span class="p">;</span>
<span class="w"> </span><span class="n">tbl_item</span><span class="w"> </span><span class="n">tbl</span><span class="o">%</span><span class="n">rowtype</span><span class="p">;</span>
<span class="w"> </span><span class="n">inx1</span><span class="w"> </span><span class="nb">int</span><span class="p">;</span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">tbl_array</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">tbl_array_type</span><span class="p">();</span>
<span class="w"> </span><span class="n">inx1</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
<span class="w"> </span><span class="k">FOR</span><span class="w"> </span><span class="n">tbl_item</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="n">all_tbl</span><span class="w"> </span><span class="n">LOOP</span><span class="w"> </span>
<span class="w"> </span><span class="n">inx1</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">inx1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">)</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">tbl_item</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="k">END</span><span class="w"> </span><span class="n">LOOP</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">WHILE</span><span class="w"> </span><span class="n">inx1</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"> </span><span class="n">LOOP</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'tbl_array(inx1).a='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">).</span><span class="n">a</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="s1">' tbl_array(inx1).b='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">).</span><span class="n">b</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">inx1</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">tbl_array</span><span class="p">.</span><span class="k">PRIOR</span><span class="p">(</span><span class="n">inx1</span><span class="p">);</span>
<span class="w"> </span><span class="k">END</span><span class="w"> </span><span class="n">LOOP</span><span class="p">;</span><span class="w"> </span>
<span class="k">END</span><span class="p">;</span>
<span class="o">/</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p16416133115130">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen482114271748"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">array_proc</span><span class="p">();</span>
<span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">).</span><span class="n">a</span><span class="o">=</span><span class="mi">3</span><span class="w"> </span><span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">).</span><span class="n">b</span><span class="o">=</span><span class="mi">4</span>
<span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">).</span><span class="n">a</span><span class="o">=</span><span class="mi">2</span><span class="w"> </span><span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">).</span><span class="n">b</span><span class="o">=</span><span class="mi">3</span>
<span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">).</span><span class="n">a</span><span class="o">=</span><span class="mi">1</span><span class="w"> </span><span class="n">tbl_array</span><span class="p">(</span><span class="n">inx1</span><span class="p">).</span><span class="n">b</span><span class="o">=</span><span class="mi">2</span>
</pre></div></td></tr></table></div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section8502187153414"><h4 class="sectiontitle">Array Related Functions</h4><p id="EN-US_TOPIC_0000001188482246__p642520503349"><span id="EN-US_TOPIC_0000001188482246__text1141269171">GaussDB(DWS)</span> supports Oracle-related array functions. You can use the following functions to obtain array attributes or perform operations on the array content.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section495153064516"><h4 class="sectiontitle">COUNT</h4><p id="EN-US_TOPIC_0000001188482246__p3505185224611">Returns the number of elements in the current array. Only the initialized elements or the elements extended by the EXTEND function are counted.</p>
<p id="EN-US_TOPIC_0000001188482246__p82871749154515">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p1570910549463"><em id="EN-US_TOPIC_0000001188482246__i078194019431">varray</em><strong id="EN-US_TOPIC_0000001188482246__b2799144319435">.COUNT</strong> or <em id="EN-US_TOPIC_0000001188482246__i1936164716436">varray</em><strong id="EN-US_TOPIC_0000001188482246__b859955816431">.COUNT()</strong></p>
<p id="EN-US_TOPIC_0000001188482246__p4625152612238">Example:</p>
</div>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen132261030105311"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the COUNT function on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">test_varray</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">varray_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="n">varray_type</span><span class="p">;</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">varray_type</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.count='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="n">extend</span><span class="p">;</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.count='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">);</span><span class="w"> </span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p1272084042313">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen101426275811"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">test_varray</span><span class="p">();</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="o">=</span><span class="mi">3</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="o">=</span><span class="mi">4</span>
</pre></div></td></tr></table></div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section18169511111"><h4 class="sectiontitle">FIRST and LAST</h4><p id="EN-US_TOPIC_0000001188482246__p15406203018118">The FIRST function can return the subscript of the first element. The LAST function can return the subscript of the last element.</p>
<p id="EN-US_TOPIC_0000001188482246__p65841514181518">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p79210243159"><em id="EN-US_TOPIC_0000001188482246__i95211937204610">varray</em><strong id="EN-US_TOPIC_0000001188482246__b103762414465">.FIRST</strong> or <em id="EN-US_TOPIC_0000001188482246__i483212441466">varray</em><strong id="EN-US_TOPIC_0000001188482246__b579374794616">.FIRST()</strong></p>
<p id="EN-US_TOPIC_0000001188482246__p21473881812"><em id="EN-US_TOPIC_0000001188482246__i18648102134713">varray</em><strong id="EN-US_TOPIC_0000001188482246__b10969205994612">.LAST</strong> or <em id="EN-US_TOPIC_0000001188482246__i17368155516464">varray</em><strong id="EN-US_TOPIC_0000001188482246__b1791235213469">.LAST()</strong></p>
<p id="EN-US_TOPIC_0000001188482246__p121621469244">Example:</p>
</div>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen1950719324169"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the FIRST and LAST functions on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">test_varray</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">varray_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="n">varray_type</span><span class="p">;</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">varray_type</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.first='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">first</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.last='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">last</span><span class="p">);</span><span class="w"> </span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span><span class="w"> </span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p424205712414">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen155071232161616"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">test_varray</span><span class="p">();</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">first</span><span class="o">=</span><span class="mi">1</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">last</span><span class="o">=</span><span class="mi">3</span>
</pre></div></td></tr></table></div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section564483662320"><h4 class="sectiontitle">EXTEND</h4><div class="note" id="EN-US_TOPIC_0000001188482246__note159401152103711"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001188482246__p1494016521375">The EXTEND function is used to be compatible with two Oracle database operations. In <span id="EN-US_TOPIC_0000001188482246__text1582489220">GaussDB(DWS)</span>, an array automatically grows, and the EXTEND function is not necessary. For a newly written stored procedure, you do not need to use the EXTEND function.</p>
</div></div>
<p id="EN-US_TOPIC_0000001188482246__p164453612237">The EXTEND function can extend arrays. The EXTEND function can be invoked in either of the following ways:</p>
<ul id="EN-US_TOPIC_0000001188482246__ul4551174655220"><li id="EN-US_TOPIC_0000001188482246__li5551114614529">Method 1:<p id="EN-US_TOPIC_0000001188482246__p48611730172613"><a name="EN-US_TOPIC_0000001188482246__li5551114614529"></a><a name="li5551114614529"></a>EXTEND contains an integer input parameter, indicating that the array size is extended by the specified length. After executing the EXTEND function, the values of the COUNT and LAST functions change accordingly.</p>
<p id="EN-US_TOPIC_0000001188482246__p9645123612233">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p1764517364235"><em id="EN-US_TOPIC_0000001188482246__i764573618236">varray</em>.EXTEND(size)</p>
<p id="EN-US_TOPIC_0000001188482246__p5878195414254">By default, one bit is added to the end of <em id="EN-US_TOPIC_0000001188482246__i108911349551">varray</em><strong id="EN-US_TOPIC_0000001188482246__b350163855514">.EXTEND</strong>, which is equivalent to <em id="EN-US_TOPIC_0000001188482246__i1445874525518">varray</em><strong id="EN-US_TOPIC_0000001188482246__b82268490553">.EXTEND(1)</strong>.</p>
</li><li id="EN-US_TOPIC_0000001188482246__li53179816534">Method 2:<p id="EN-US_TOPIC_0000001188482246__p853113101291"><a name="EN-US_TOPIC_0000001188482246__li53179816534"></a><a name="li53179816534"></a>EXTEND contains two integer input parameters. The first parameter indicates the length of the extended size. The second parameter indicates that the value of the extended array element is the same as that of the element with the <strong id="EN-US_TOPIC_0000001188482246__b1448119342215">index</strong> subscript.</p>
<p id="EN-US_TOPIC_0000001188482246__p167568919319">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p1974111453117"><em id="EN-US_TOPIC_0000001188482246__i196011914314">varray</em>.EXTEND(size, index)</p>
</li></ul>
<p id="EN-US_TOPIC_0000001188482246__p12837319152520">Example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen56451236192320"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the EXTEND function on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">test_varray</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">varray_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="n">varray_type</span><span class="p">;</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">varray_type</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="n">extend</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.count='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="n">extend</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.count='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray(7)='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="mi">7</span><span class="p">));</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray(8)='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="mi">7</span><span class="p">));</span><span class="w"> </span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span><span class="w"> </span>
</pre></div></td></tr></table></div>
</div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p16993113217258">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen66451436192312"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">test_varray</span><span class="p">();</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="o">=</span><span class="mi">6</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="o">=</span><span class="mi">8</span>
<span class="n">v_varray</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span><span class="o">=</span><span class="mi">3</span>
<span class="n">v_varray</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span><span class="o">=</span><span class="mi">3</span>
</pre></div></td></tr></table></div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section116587105511"><h4 class="sectiontitle">NEXT and PRIOR</h4><p id="EN-US_TOPIC_0000001188482246__p05857247569">The NEXT and PRIOR functions are used for cyclic array traversal. The NEXT function returns the subscript of the next array element based on the input parameter <strong id="EN-US_TOPIC_0000001188482246__b287514361159">index</strong>. If the subscript reaches the maximum value, <strong id="EN-US_TOPIC_0000001188482246__b18277156753">NULL</strong> is returned. The PRIOR function returns the subscript of the previous array element based on the input parameter <strong id="EN-US_TOPIC_0000001188482246__b1378917164611">index</strong>. If the minimum value of the array subscript is reached, <strong id="EN-US_TOPIC_0000001188482246__b158681725366">NULL</strong> is returned.</p>
<p id="EN-US_TOPIC_0000001188482246__p1665811102512">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p46581410205118"><em id="EN-US_TOPIC_0000001188482246__i12658810165114">varray</em>.NEXT(index)</p>
<p id="EN-US_TOPIC_0000001188482246__p11658111013512"><em id="EN-US_TOPIC_0000001188482246__i465820106513">varray</em>.PRIOR(index)</p>
<p id="EN-US_TOPIC_0000001188482246__p9926116202618">Example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen196581610145112"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the NEXT and PRIOR functions on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">test_varray</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">varray_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="n">varray_type</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="nb">int</span><span class="p">;</span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">varray_type</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">COUNT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">WHILE</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"> </span><span class="n">LOOP</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'test prior v_varray('</span><span class="o">||</span><span class="n">i</span><span class="o">||</span><span class="s1">')='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="n">i</span><span class="p">));</span><span class="w"> </span>
<span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">PRIOR</span><span class="p">(</span><span class="n">i</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="k">END</span><span class="w"> </span><span class="n">LOOP</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">WHILE</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="w"> </span><span class="n">LOOP</span><span class="w"> </span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'test next v_varray('</span><span class="o">||</span><span class="n">i</span><span class="o">||</span><span class="s1">')='</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="n">i</span><span class="p">));</span><span class="w"> </span>
<span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">NEXT</span><span class="p">(</span><span class="n">i</span><span class="p">);</span><span class="w"> </span>
<span class="w"> </span><span class="k">END</span><span class="w"> </span><span class="n">LOOP</span><span class="p">;</span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p1454172332615">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen0658151011518"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span>
<span class="normal">6</span>
<span class="normal">7</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">test_varray</span><span class="p">();</span>
<span class="n">test</span><span class="w"> </span><span class="k">prior</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">=</span><span class="mi">3</span>
<span class="n">test</span><span class="w"> </span><span class="k">prior</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">=</span><span class="mi">2</span>
<span class="n">test</span><span class="w"> </span><span class="k">prior</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mi">1</span>
<span class="n">test</span><span class="w"> </span><span class="k">next</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">=</span><span class="mi">1</span>
<span class="n">test</span><span class="w"> </span><span class="k">next</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">=</span><span class="mi">2</span>
<span class="n">test</span><span class="w"> </span><span class="k">next</span><span class="w"> </span><span class="n">v_varray</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">=</span><span class="mi">3</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section03027411597"><h4 class="sectiontitle">EXISTS</h4><p id="EN-US_TOPIC_0000001188482246__p4302134119912">Determines whether an array subscript exists.</p>
<p id="EN-US_TOPIC_0000001188482246__p2302114114913">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p1930284120916"><em id="EN-US_TOPIC_0000001188482246__i530324118914">varray</em>.EXISTS(index)</p>
<p id="EN-US_TOPIC_0000001188482246__p09018432714">Example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen1630317411092"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the EXISTS function on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">test_varray</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">varray_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="n">varray_type</span><span class="p">;</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">varray_type</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="k">IF</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">EXISTS</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="k">THEN</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.EXISTS(1)'</span><span class="p">);</span>
<span class="w"> </span><span class="k">END</span><span class="w"> </span><span class="k">IF</span><span class="p">;</span>
<span class="w"> </span><span class="k">IF</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">EXISTS</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span><span class="w"> </span><span class="k">THEN</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'NOT v_varray.EXISTS(10)'</span><span class="p">);</span>
<span class="w"> </span><span class="k">END</span><span class="w"> </span><span class="k">IF</span><span class="p">;</span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span><span class="w"> </span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p4856249271">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen23031941494"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">test_varray</span><span class="p">();</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">EXISTS</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">NOT</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">EXISTS</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section8303174118914"><h4 class="sectiontitle">TRIM</h4><p id="EN-US_TOPIC_0000001188482246__p0112201601814">Deletes a specified number of elements from the end of an array.</p>
<p id="EN-US_TOPIC_0000001188482246__p1511913167183">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p13322181218195"><em id="EN-US_TOPIC_0000001188482246__i1323412141912">varray</em>.TRIM(size)</p>
<p id="EN-US_TOPIC_0000001188482246__p14323151261913"><em id="EN-US_TOPIC_0000001188482246__i636214180911">varray</em><strong id="EN-US_TOPIC_0000001188482246__b18100821493">.TRIM</strong> is equivalent to <em id="EN-US_TOPIC_0000001188482246__i9198936895">varray</em><strong id="EN-US_TOPIC_0000001188482246__b175510390914">.TRIM(1)</strong>, because the default input parameter is <strong id="EN-US_TOPIC_0000001188482246__b2077417016103">1</strong>.</p>
<p id="EN-US_TOPIC_0000001188482246__p1820819508279">Example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen1119416161810"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the TRIM function on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">test_varray</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">varray_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="n">varray_type</span><span class="p">;</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">varray_type</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">);</span>
<span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">trim</span><span class="p">(</span><span class="mi">3</span><span class="p">);</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.count'</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">);</span>
<span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">trim</span><span class="p">;</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.count:'</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">);</span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span><span class="w"> </span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p715161010289">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen4747192416183"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">test_varray</span><span class="p">();</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">:</span><span class="mi">2</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">:</span><span class="mi">1</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section157421887244"><h4 class="sectiontitle">DELETE</h4><p id="EN-US_TOPIC_0000001188482246__p1174218814247">Deletes all elements from an array.</p>
<p id="EN-US_TOPIC_0000001188482246__p374213819240">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p1374218810244"><em id="EN-US_TOPIC_0000001188482246__i0589103461010">varray</em><strong id="EN-US_TOPIC_0000001188482246__b3940153619107">.DELETE</strong> or <em id="EN-US_TOPIC_0000001188482246__i8445204010102">varray</em><strong id="EN-US_TOPIC_0000001188482246__b7204438109">.DELETE()</strong></p>
<p id="EN-US_TOPIC_0000001188482246__p1485314242917">Example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen15489111282912"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the DELETE function on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">test_varray</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">varray_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="n">varray_type</span><span class="p">;</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">varray_type</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">);</span>
<span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">delete</span><span class="p">;</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.count:'</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">);</span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span><span class="w"> </span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p860115209297">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen1174313812412"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">test_varray</span><span class="p">();</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">count</span><span class="p">:</span><span class="mi">0</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="section" id="EN-US_TOPIC_0000001188482246__section1890715682711"><h4 class="sectiontitle">LIMIT</h4><p id="EN-US_TOPIC_0000001188482246__p12907269273">Returns the allowed maximum length of an array.</p>
<p id="EN-US_TOPIC_0000001188482246__p890719618273">Use:</p>
<p id="EN-US_TOPIC_0000001188482246__p0907156152717"><em id="EN-US_TOPIC_0000001188482246__i64931393116">varray</em><strong id="EN-US_TOPIC_0000001188482246__b6581124271112">.LIMIT</strong> or <em id="EN-US_TOPIC_0000001188482246__i2895546161115">varray</em><strong id="EN-US_TOPIC_0000001188482246__b1038914910116">.LIMIT()</strong></p>
<p id="EN-US_TOPIC_0000001188482246__p1683454482915">Example:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen590717662715"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Use the LIMIT function on an array in a stored procedure.</span>
<span class="k">CREATE</span><span class="w"> </span><span class="k">OR</span><span class="w"> </span><span class="k">REPLACE</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">test_varray</span>
<span class="k">AS</span><span class="w"> </span>
<span class="w"> </span><span class="k">TYPE</span><span class="w"> </span><span class="n">varray_type</span><span class="w"> </span><span class="k">IS</span><span class="w"> </span><span class="n">VARRAY</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span><span class="w"> </span><span class="k">OF</span><span class="w"> </span><span class="nb">INT</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="n">varray_type</span><span class="p">;</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="w"> </span><span class="n">v_varray</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">varray_type</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">);</span>
<span class="w"> </span><span class="n">DBMS_OUTPUT</span><span class="p">.</span><span class="n">PUT_LINE</span><span class="p">(</span><span class="s1">'v_varray.limit:'</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">v_varray</span><span class="p">.</span><span class="k">limit</span><span class="p">);</span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span><span class="w"> </span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001188482246__p14351105712918">The execution output is as follows:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188482246__screen1790811612277"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">call</span><span class="w"> </span><span class="n">test_varray</span><span class="p">();</span>
<span class="n">v_varray</span><span class="p">.</span><span class="k">limit</span><span class="p">:</span><span class="mi">20</span>
</pre></div></td></tr></table></div>
</div>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_0516.html">Arrays and Records</a></div>
</div>
</div>