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>
180 lines
17 KiB
HTML
180 lines
17 KiB
HTML
<a name="EN-US_TOPIC_0000001233761737"></a><a name="EN-US_TOPIC_0000001233761737"></a>
|
|
|
|
<h1 class="topictitle1">GOTO Statements</h1>
|
|
<div id="body1551942823551"><p id="EN-US_TOPIC_0000001233761737__p493218712218">The <strong id="EN-US_TOPIC_0000001233761737__b138219984618">GOTO</strong> statement unconditionally transfers the control from the current statement to a labeled statement. The <strong id="EN-US_TOPIC_0000001233761737__b14786853519">GOTO</strong> statement changes the execution logic. Therefore, use this statement only when necessary. Alternatively, you can use the <strong id="EN-US_TOPIC_0000001233761737__b6867145119527">EXCEPTION</strong> statement to handle issues in special scenarios. To run the <strong id="EN-US_TOPIC_0000001233761737__b1069242311547">GOTO</strong> statement, the labeled statement must be unique.</p>
|
|
<div class="section" id="EN-US_TOPIC_0000001233761737__section126022140116"><h4 class="sectiontitle">Syntax</h4><p id="EN-US_TOPIC_0000001233761737__p8751942831">label declaration ::=</p>
|
|
</div>
|
|
<p id="EN-US_TOPIC_0000001233761737__p1466414251916"><span><img id="EN-US_TOPIC_0000001233761737__image197672617203" src="figure/en-us_image_0000001188163796.png"></span></p>
|
|
<p id="EN-US_TOPIC_0000001233761737__p17190908218">goto statement ::=</p>
|
|
<p id="EN-US_TOPIC_0000001233761737__p329914618212"><span><img id="EN-US_TOPIC_0000001233761737__image6426163232116" src="figure/en-us_image_0000001233883403.png"></span></p>
|
|
<div class="section" id="EN-US_TOPIC_0000001233761737__section147058110414"><h4 class="sectiontitle">Examples</h4><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233761737__screen453893216187"><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></pre></div></td><td class="code"><div><pre><span></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">GOTO_test</span><span class="p">()</span>
|
|
<span class="k">AS</span><span class="w"> </span>
|
|
<span class="k">DECLARE</span>
|
|
<span class="w"> </span><span class="n">v1</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="n">v1</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="n">LOOP</span>
|
|
<span class="w"> </span><span class="n">EXIT</span><span class="w"> </span><span class="k">WHEN</span><span class="w"> </span><span class="n">v1</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">100</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="n">v1</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">v1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">v1</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="mi">25</span><span class="w"> </span><span class="k">THEN</span>
|
|
<span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="n">pos1</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="n">LOOP</span><span class="p">;</span>
|
|
<span class="o"><<</span><span class="n">pos1</span><span class="o">>></span>
|
|
<span class="n">v1</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">v1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span>
|
|
<span class="n">raise</span><span class="w"> </span><span class="n">info</span><span class="w"> </span><span class="s1">'v1 is %. '</span><span class="p">,</span><span class="w"> </span><span class="n">v1</span><span class="p">;</span>
|
|
<span class="k">END</span><span class="p">;</span>
|
|
<span class="o">/</span>
|
|
|
|
<span class="k">call</span><span class="w"> </span><span class="n">GOTO_test</span><span class="p">();</span>
|
|
<span class="k">DROP</span><span class="w"> </span><span class="k">PROCEDURE</span><span class="w"> </span><span class="n">GOTO_test</span><span class="p">();</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001233761737__section186169245159"><h4 class="sectiontitle">Constraints</h4><p id="EN-US_TOPIC_0000001233761737__p1711413217158">The <strong id="EN-US_TOPIC_0000001233761737__b1749614905517">GOTO</strong> statement has the following constraints:</p>
|
|
</div>
|
|
<ul id="EN-US_TOPIC_0000001233761737__ul207668408714"><li id="EN-US_TOPIC_0000001233761737__li6766740773">The <strong id="EN-US_TOPIC_0000001233761737__b112451757115814">GOTO</strong> statement does not allow multiple labeled statements even if they are in different blocks.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233761737__screen55026314717"><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">BEGIN</span>
|
|
<span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="n">pos1</span><span class="p">;</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="o"><<</span><span class="n">pos1</span><span class="o">>></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="p">...</span>
|
|
<span class="w"> </span><span class="o"><<</span><span class="n">pos1</span><span class="o">>></span>
|
|
<span class="w"> </span><span class="k">UPDATE</span><span class="w"> </span><span class="n">t1</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="p">...</span>
|
|
<span class="k">END</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</li></ul>
|
|
<ul id="EN-US_TOPIC_0000001233761737__ul188771441679"><li id="EN-US_TOPIC_0000001233761737__li28771944076">The <strong id="EN-US_TOPIC_0000001233761737__b86911217205918">GOTO</strong> statement cannot transfer control to the <strong id="EN-US_TOPIC_0000001233761737__b19380855165914">IF</strong>, <strong id="EN-US_TOPIC_0000001233761737__b173591457165916">CASE</strong>, or <strong id="EN-US_TOPIC_0000001233761737__b19856719018">LOOP</strong> statement.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233761737__screen192011241471"><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">BEGIN</span>
|
|
<span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="n">pos1</span><span class="p">;</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="k">IF</span><span class="w"> </span><span class="k">valid</span><span class="w"> </span><span class="k">THEN</span>
|
|
<span class="w"> </span><span class="o"><<</span><span class="n">pos1</span><span class="o">>></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="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="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</li></ul>
|
|
<ul id="EN-US_TOPIC_0000001233761737__ul1591114220113"><li id="EN-US_TOPIC_0000001233761737__li89184213115">The <strong id="EN-US_TOPIC_0000001233761737__b10681437703">GOTO</strong> statement cannot transfer control from one <strong id="EN-US_TOPIC_0000001233761737__b194521859102">IF</strong> clause to another, or from one <strong id="EN-US_TOPIC_0000001233761737__b795244110111">WHEN</strong> clause in the <strong id="EN-US_TOPIC_0000001233761737__b79706717114">CASE</strong> statement to another.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233761737__screen49761092123"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">BEGIN</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="k">IF</span><span class="w"> </span><span class="k">valid</span><span class="w"> </span><span class="k">THEN</span>
|
|
<span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="n">pos1</span><span class="p">;</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="p">...</span>
|
|
<span class="w"> </span><span class="k">ELSE</span>
|
|
<span class="w"> </span><span class="o"><<</span><span class="n">pos1</span><span class="o">>></span>
|
|
<span class="w"> </span><span class="k">UPDATE</span><span class="w"> </span><span class="n">t1</span><span class="w"> </span><span class="k">SET</span><span class="w"> </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="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</li></ul>
|
|
<ul id="EN-US_TOPIC_0000001233761737__ul161321873820"><li id="EN-US_TOPIC_0000001233761737__li131326710813">The <strong id="EN-US_TOPIC_0000001233761737__b198891621726">GOTO</strong> statement cannot transfer control from an outer block to an inner <strong id="EN-US_TOPIC_0000001233761737__b15291013316">BEGIN-END</strong> block.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233761737__screen19851591977"><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">BEGIN</span>
|
|
<span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="n">pos1</span><span class="p">;</span><span class="w"> </span>
|
|
<span class="w"> </span><span class="k">BEGIN</span>
|
|
<span class="w"> </span><span class="o"><<</span><span class="n">pos1</span><span class="o">>></span>
|
|
<span class="w"> </span><span class="k">UPDATE</span><span class="w"> </span><span class="n">t1</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="p">...</span>
|
|
<span class="w"> </span><span class="k">END</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">END</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</li></ul>
|
|
<ul id="EN-US_TOPIC_0000001233761737__ul63301910385"><li id="EN-US_TOPIC_0000001233761737__li63303103814">The <strong id="EN-US_TOPIC_0000001233761737__b173811640232">GOTO</strong> statement cannot transfer control from an <strong id="EN-US_TOPIC_0000001233761737__b1214291720510">EXCEPTION</strong> block to the current <strong id="EN-US_TOPIC_0000001233761737__b4156200740">BEGIN-END</strong> block but can transfer to an outer <strong id="EN-US_TOPIC_0000001233761737__b125371251063">BEGIN-END</strong> block.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233761737__screen12572205514612"><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">BEGIN</span>
|
|
<span class="w"> </span><span class="o"><<</span><span class="n">pos1</span><span class="o">>></span>
|
|
<span class="w"> </span><span class="k">UPDATE</span><span class="w"> </span><span class="n">t1</span><span class="w"> </span><span class="k">SET</span><span class="w"> </span><span class="p">...</span>
|
|
<span class="w"> </span><span class="k">EXCEPTION</span>
|
|
<span class="w"> </span><span class="k">WHEN</span><span class="w"> </span><span class="n">condition</span><span class="w"> </span><span class="k">THEN</span>
|
|
<span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="n">pos1</span><span class="p">;</span>
|
|
<span class="w"> </span><span class="k">END</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</li></ul>
|
|
<ul id="EN-US_TOPIC_0000001233761737__ul76666141785"><li id="EN-US_TOPIC_0000001233761737__li186667141283">If the labeled statement in the <strong id="EN-US_TOPIC_0000001233761737__b4666229191218">GOTO</strong> statement does not exist, you need to add the <strong id="EN-US_TOPIC_0000001233761737__b1226412266716">NULL</strong> statement.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233761737__screen182424612814"><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="k">DECLARE</span>
|
|
<span class="w"> </span><span class="n">done</span><span class="w"> </span><span class="nb">BOOLEAN</span><span class="p">;</span>
|
|
<span class="k">BEGIN</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">50</span><span class="w"> </span><span class="n">LOOP</span>
|
|
<span class="w"> </span><span class="k">IF</span><span class="w"> </span><span class="n">done</span><span class="w"> </span><span class="k">THEN</span>
|
|
<span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="n">end_loop</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="o"><<</span><span class="n">end_loop</span><span class="o">>></span><span class="w"> </span><span class="c1">-- not allowed unless an executable statement follows</span>
|
|
<span class="w"> </span><span class="k">NULL</span><span class="p">;</span><span class="w"> </span><span class="c1">-- add NULL statement to avoid error</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="c1">-- raises an error without the previous NULL</span>
|
|
<span class="k">END</span><span class="p">;</span>
|
|
<span class="o">/</span>
|
|
</pre></div></td></tr></table></div>
|
|
|
|
</div>
|
|
</li></ul>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_0532.html">Control Statements</a></div>
|
|
</div>
|
|
</div>
|
|
|