forked from docs/doc-exports
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>
99 lines
11 KiB
HTML
99 lines
11 KiB
HTML
<a name="EN-US_TOPIC_0000001188163752"></a><a name="EN-US_TOPIC_0000001188163752"></a>
|
|
|
|
<h1 class="topictitle1">Cursor Loop</h1>
|
|
<div id="body8662426"><p id="EN-US_TOPIC_0000001188163752__ae558276410754afc96f45461437a035f">The use of cursors in <strong id="EN-US_TOPIC_0000001188163752__b15420183815715">WHILE</strong> and <strong id="EN-US_TOPIC_0000001188163752__b15611194010577">LOOP</strong> statements is called a cursor loop. Generally, <strong id="EN-US_TOPIC_0000001188163752__b10552111210589">OPEN</strong>, <strong id="EN-US_TOPIC_0000001188163752__b143507167588">FETCH</strong>, and <strong id="EN-US_TOPIC_0000001188163752__b13480019195811">CLOSE</strong> statements are needed in cursor loop. The following describes a loop that is applicable to a static cursor loop without executing the four steps of a static cursor.</p>
|
|
<div class="section" id="EN-US_TOPIC_0000001188163752__sa8822907c8364a16b0e2767d9056be98"><h4 class="sectiontitle">Syntax</h4><p id="EN-US_TOPIC_0000001188163752__ada141f79b1f045e1918f130e6df2d5cb"><a href="#EN-US_TOPIC_0000001188163752__ffb84c90bcf774206ab06d7f3b17cd9de">Figure 1</a> shows the syntax diagram for the <strong id="EN-US_TOPIC_0000001188163752__en-us_topic_0027042977_b48254015163521">FOR AS</strong> loop.</p>
|
|
<div class="fignone" id="EN-US_TOPIC_0000001188163752__ffb84c90bcf774206ab06d7f3b17cd9de"><a name="EN-US_TOPIC_0000001188163752__ffb84c90bcf774206ab06d7f3b17cd9de"></a><a name="ffb84c90bcf774206ab06d7f3b17cd9de"></a><span class="figcap"><b>Figure 1 </b>FOR_AS_loop::=</span><br><span><img id="EN-US_TOPIC_0000001188163752__i7c4535d5e8d44ce499d920b574b73739" src="figure/en-us_image_0000001233681875.png"></span></div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001188163752__s0739c9ecada641e7826ab44ed040af93"><h4 class="sectiontitle">Precautions</h4><ul id="EN-US_TOPIC_0000001188163752__ua3af7c5729b74d7a8e8474c21d88e9d5"><li id="EN-US_TOPIC_0000001188163752__l31fa595b124f4abb947bf906ee6affec">The <strong id="EN-US_TOPIC_0000001188163752__en-us_topic_0027042977_b16102764163559">UPDATE</strong> operation for the queried table is not allowed in the loop statement.</li><li id="EN-US_TOPIC_0000001188163752__lb1c31fdd84494b7397328225e351111b">The variable <em id="EN-US_TOPIC_0000001188163752__i73631350629">loop_name</em> is automatically defined and is valid only in this loop. The type and value of <em id="EN-US_TOPIC_0000001188163752__i1680117379413">loop_name</em> are the same as those of the query result of <em id="EN-US_TOPIC_0000001188163752__i104627141834">select_statement</em>.</li></ul>
|
|
</div>
|
|
<ul id="EN-US_TOPIC_0000001188163752__u587b6dadda544bd8846ef57dea2919d2"><li id="EN-US_TOPIC_0000001188163752__l0818fafcbcc54a8c8b34c813bac7cf7a">The <strong id="EN-US_TOPIC_0000001188163752__en-us_topic_0058965597_en-us_topic_0027042977_b460206163631">%FOUND</strong>, <strong id="EN-US_TOPIC_0000001188163752__en-us_topic_0058965597_en-us_topic_0027042977_b4141857163631">%NOTFOUND</strong>, and <strong id="EN-US_TOPIC_0000001188163752__en-us_topic_0058965597_en-us_topic_0027042977_b37276716163631">%ROWCOUNT</strong> attributes access the same internal variable in <span id="EN-US_TOPIC_0000001188163752__text4987372">GaussDB(DWS)</span>. Transactions and anonymous blocks cannot be accessed by multiple cursors at the same time.</li></ul>
|
|
<div class="section" id="EN-US_TOPIC_0000001188163752__s1cf2f6880add4f32a2fd6536bbd1b96b"><h4 class="sectiontitle">Examples</h4><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188163752__s27fe161686034ef0a94cd6bc89c39294"><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>
|
|
<span class="normal">29</span>
|
|
<span class="normal">30</span>
|
|
<span class="normal">31</span>
|
|
<span class="normal">32</span>
|
|
<span class="normal">33</span>
|
|
<span class="normal">34</span>
|
|
<span class="normal">35</span>
|
|
<span class="normal">36</span>
|
|
<span class="normal">37</span>
|
|
<span class="normal">38</span>
|
|
<span class="normal">39</span></pre></div></td><td class="code"><div><pre><span></span><span class="k">BEGIN</span>
|
|
<span class="k">FOR</span><span class="w"> </span><span class="n">ROW_TRANS</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="n">first_name</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">staffs</span><span class="w"> </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="w"> </span><span class="p">(</span><span class="n">ROW_TRANS</span><span class="p">.</span><span class="n">first_name</span><span class="w"> </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="k">END</span><span class="p">;</span>
|
|
<span class="o">/</span>
|
|
|
|
<span class="c1">-- Create a table:</span>
|
|
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">integerTable1</span><span class="p">(</span><span class="w"> </span><span class="n">A</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">)</span><span class="w"> </span><span class="n">DISTRIBUTE</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">hash</span><span class="p">(</span><span class="n">A</span><span class="p">);</span>
|
|
<span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">integerTable2</span><span class="p">(</span><span class="w"> </span><span class="n">B</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">)</span><span class="w"> </span><span class="n">DISTRIBUTE</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">hash</span><span class="p">(</span><span class="n">B</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">integerTable2</span><span class="w"> </span><span class="k">VALUES</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span>
|
|
|
|
<span class="c1">-- Multiple cursors share the parameters of cursor attributes:</span>
|
|
<span class="k">DECLARE</span>
|
|
<span class="w"> </span><span class="k">CURSOR</span><span class="w"> </span><span class="n">C1</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="n">A</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">integerTable1</span><span class="p">;</span><span class="c1">--Declare the cursor.</span>
|
|
<span class="w"> </span><span class="k">CURSOR</span><span class="w"> </span><span class="n">C2</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="n">B</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">integerTable2</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">PI_A</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">PI_B</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">;</span>
|
|
<span class="k">BEGIN</span>
|
|
<span class="w"> </span><span class="k">OPEN</span><span class="w"> </span><span class="n">C1</span><span class="p">;</span><span class="c1">-- Open the cursor.</span>
|
|
<span class="w"> </span><span class="k">OPEN</span><span class="w"> </span><span class="n">C2</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">FETCH</span><span class="w"> </span><span class="n">C1</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">PI_A</span><span class="p">;</span><span class="w"> </span><span class="c1">---- The value of C1%FOUND and C2%FOUND is FALSE.</span>
|
|
<span class="w"> </span><span class="k">FETCH</span><span class="w"> </span><span class="n">C2</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">PI_B</span><span class="p">;</span><span class="w"> </span><span class="c1">---- The value of C1%FOUND and C2%FOUND is TRUE.</span>
|
|
<span class="c1">-- Determine the cursor status:</span>
|
|
<span class="w"> </span><span class="k">IF</span><span class="w"> </span><span class="n">C1</span><span class="o">%</span><span class="k">FOUND</span><span class="w"> </span><span class="k">THEN</span>
|
|
<span class="w"> </span><span class="k">IF</span><span class="w"> </span><span class="n">C2</span><span class="o">%</span><span class="k">FOUND</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">'Dual cursor share paremeter.'</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">END</span><span class="w"> </span><span class="k">IF</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">CLOSE</span><span class="w"> </span><span class="n">C1</span><span class="p">;</span><span class="c1">-- Close the cursor.</span>
|
|
<span class="w"> </span><span class="k">CLOSE</span><span class="w"> </span><span class="n">C2</span><span class="p">;</span>
|
|
<span class="k">END</span><span class="p">;</span>
|
|
<span class="o">/</span>
|
|
|
|
<span class="c1">-- Drop the temporary table:</span>
|
|
<span class="k">DROP</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">integerTable1</span><span class="p">;</span>
|
|
<span class="k">DROP</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">integerTable2</span><span class="p">;</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_0545.html">Cursors</a></div>
|
|
</div>
|
|
</div>
|
|
|