doc-exports/docs/dws/dev/dws_04_0531.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

60 lines
7.8 KiB
HTML

<a name="EN-US_TOPIC_0000001188163616"></a><a name="EN-US_TOPIC_0000001188163616"></a>
<h1 class="topictitle1">Dynamically Calling Anonymous Blocks</h1>
<div id="body8662426"><p id="EN-US_TOPIC_0000001188163616__af9218efba0e4428187a22009f6da34c0">This section describes how to execute anonymous blocks in dynamic statements. Append <strong id="EN-US_TOPIC_0000001188163616__en-us_topic_0027042973_b13442516421">IN</strong> and <strong id="EN-US_TOPIC_0000001188163616__en-us_topic_0027042973_b120983216421">OUT</strong> behind the <strong id="EN-US_TOPIC_0000001188163616__en-us_topic_0027042973_b5240414419111">EXECUTE IMMEDIATE...USING</strong> statement to input and output parameters.</p>
<div class="section" id="EN-US_TOPIC_0000001188163616__s48c2d70a0c724643a12b25a085238c41"><h4 class="sectiontitle">Syntax</h4><p id="EN-US_TOPIC_0000001188163616__abaa716b3fc1849c8ac8b420395ffa74a"><a href="#EN-US_TOPIC_0000001188163616__fa37441543aa3495d84b876c58afc0a2d">Figure 1</a> shows the syntax diagram.</p>
<div class="fignone" id="EN-US_TOPIC_0000001188163616__fa37441543aa3495d84b876c58afc0a2d"><a name="EN-US_TOPIC_0000001188163616__fa37441543aa3495d84b876c58afc0a2d"></a><a name="fa37441543aa3495d84b876c58afc0a2d"></a><span class="figcap"><b>Figure 1 </b>call_anonymous_block::=</span><br><span><img id="EN-US_TOPIC_0000001188163616__idd94d768eefe4fe28fa2f3673e323657" src="figure/en-us_image_0000001188482334.png"></span></div>
<p id="EN-US_TOPIC_0000001188163616__ade0b0856ac594518bbd3100e3c31f632"><a href="#EN-US_TOPIC_0000001188163616__f1cfe980b10ab4ce88a9b967d374ec40e">Figure 2</a> shows the syntax diagram for <strong id="EN-US_TOPIC_0000001188163616__b11447541103814">using_clause</strong>.</p>
<div class="fignone" id="EN-US_TOPIC_0000001188163616__f1cfe980b10ab4ce88a9b967d374ec40e"><a name="EN-US_TOPIC_0000001188163616__f1cfe980b10ab4ce88a9b967d374ec40e"></a><a name="f1cfe980b10ab4ce88a9b967d374ec40e"></a><span class="figcap"><b>Figure 2 </b>using_clause-4</span><br><span><img id="EN-US_TOPIC_0000001188163616__i0e6cf8a3f7c8471daab58a6f4b093503" src="figure/en-us_image_0000001233563357.png"></span></div>
<p id="EN-US_TOPIC_0000001188163616__a102b60b9a22845298e34b60269194fff">The above syntax diagram is explained as follows:</p>
<ul id="EN-US_TOPIC_0000001188163616__ua8ca45bb3bea460bb9e24c9c6c884bfc"><li id="EN-US_TOPIC_0000001188163616__l102539bd7ddd43fda34e45c8e51e28d9">The execute part of an anonymous block starts with a <strong id="EN-US_TOPIC_0000001188163616__en-us_topic_0027042998_b62812577153841">BEGIN</strong> statement, has a break with an <strong id="EN-US_TOPIC_0000001188163616__en-us_topic_0027042998_b54654009153841">END</strong> statement, and ends with a semicolon (;).</li><li id="EN-US_TOPIC_0000001188163616__l7f3c5ecc1fbd47daa9a97d15ff7490ac"><strong id="EN-US_TOPIC_0000001188163616__en-us_topic_0027042973_b5724099116516">USING [IN|OUT|IN OUT]bind_argument</strong>: specifies where the variable passed to the stored procedure parameter value is stored. The modifiers in front of <strong id="EN-US_TOPIC_0000001188163616__en-us_topic_0027042973_b4540687316516">bind_argument</strong> and of the corresponding parameter are the same.</li><li id="EN-US_TOPIC_0000001188163616__l8bab49278ab14236837ca00cd0f95626">The input and output parameters in the middle of an anonymous block are designated by placeholders. The numbers of the placeholders and the parameters are the same. The sequences of the parameters corresponding to the placeholders and the USING parameters are the same.</li><li id="EN-US_TOPIC_0000001188163616__la3e2b4b4890e44b5ad985a3f7a278dbe">Currently in <span id="EN-US_TOPIC_0000001188163616__text192897880">GaussDB(DWS)</span>, when dynamic statements call anonymous blocks, placeholders cannot be used to pass input and output parameters in an <strong id="EN-US_TOPIC_0000001188163616__en-us_topic_0085033129_en-us_topic_0058965632_en-us_topic_0027042973_b1825282516516">EXCEPTION</strong> statement.</li></ul>
</div>
<div class="section" id="EN-US_TOPIC_0000001188163616__sd80f532da61d4000ac9a2e0d0cf3dae2"><h4 class="sectiontitle">Example</h4><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001188163616__s96bd5d03d91c47b689b74a18136e6bcf"><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></pre></div></td><td class="code"><div><pre><span></span><span class="c1">--Create the stored procedure dynamic_proc.</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">dynamic_proc</span>
<span class="k">AS</span>
<span class="w"> </span><span class="n">staff_id</span><span class="w"> </span><span class="nb">NUMBER</span><span class="p">(</span><span class="mi">6</span><span class="p">)</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="mi">200</span><span class="p">;</span>
<span class="w"> </span><span class="n">first_name</span><span class="w"> </span><span class="n">VARCHAR2</span><span class="p">(</span><span class="mi">20</span><span class="p">);</span>
<span class="w"> </span><span class="n">salary</span><span class="w"> </span><span class="nb">NUMBER</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="mi">2</span><span class="p">);</span>
<span class="k">BEGIN</span>
<span class="c1">--Execute the anonymous block.</span>
<span class="w"> </span><span class="k">EXECUTE</span><span class="w"> </span><span class="k">IMMEDIATE</span><span class="w"> </span><span class="s1">'begin select first_name, salary into :first_name, :salary from staffs where staff_id= :dno; end;'</span>
<span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="k">OUT</span><span class="w"> </span><span class="n">first_name</span><span class="p">,</span><span class="w"> </span><span class="k">OUT</span><span class="w"> </span><span class="n">salary</span><span class="p">,</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="n">staff_id</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="n">first_name</span><span class="o">||</span><span class="w"> </span><span class="s1">' '</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">salary</span><span class="p">);</span>
<span class="k">END</span><span class="p">;</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">dynamic_proc</span><span class="p">();</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">dynamic_proc</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_0527.html">Dynamic Statements</a></div>
</div>
</div>