Files
doc-exports/docs/dws/dev/dws_04_0530.html
luhuayi 177cd61a57 DWS DEVG 910.211 version
Reviewed-by: Pruthi, Vineet <vineet.pruthi@t-systems.com>
Co-authored-by: luhuayi <luhuayi@huawei.com>
Co-committed-by: luhuayi <luhuayi@huawei.com>
2025-05-05 07:44:03 +00:00

81 lines
9.2 KiB
HTML

<a name="EN-US_TOPIC_0000001811490929"></a><a name="EN-US_TOPIC_0000001811490929"></a>
<h1 class="topictitle1">Dynamically Calling Stored Procedures</h1>
<div id="body8662426"><p id="EN-US_TOPIC_0000001811490929__en-us_topic_0059778625_p81885420719">This section describes how to dynamically call store procedures. You must use anonymous statement blocks to package stored procedures or statement blocks and append <strong id="EN-US_TOPIC_0000001811490929__en-us_topic_0027042945_b630144016112">IN</strong> and <strong id="EN-US_TOPIC_0000001811490929__en-us_topic_0027042945_b5671296316112">OUT</strong> behind the <strong id="EN-US_TOPIC_0000001811490929__en-us_topic_0027042945_b4065462616112">EXECUTE IMMEDIATE...USING</strong> statement to input and output parameters.</p>
<div class="section" id="EN-US_TOPIC_0000001811490929__s123b25a658a448d69423d3384da4d89f"><h4 class="sectiontitle">Syntax</h4><p id="EN-US_TOPIC_0000001811490929__ac47acea0442d4cc78dfcb24be54dd151"><a href="#EN-US_TOPIC_0000001811490929__f0349b2280c1b49a59991a3d738298c77">Figure 1</a> shows the syntax diagram.</p>
<div class="fignone" id="EN-US_TOPIC_0000001811490929__f0349b2280c1b49a59991a3d738298c77"><a name="EN-US_TOPIC_0000001811490929__f0349b2280c1b49a59991a3d738298c77"></a><a name="f0349b2280c1b49a59991a3d738298c77"></a><span class="figcap"><b>Figure 1 </b>call_procedure::=</span><br><span><img id="EN-US_TOPIC_0000001811490929__i96ffd9a9faab4cfcab9f07cd89a0c748" src="figure/en-us_image_0000001764492252.png"></span></div>
<p id="EN-US_TOPIC_0000001811490929__a3779d7af11cd48d59e89dd2695a05748"><a href="#EN-US_TOPIC_0000001811490929__f07ede7782f5c41afa548256a382c493a">Figure 2</a> shows the syntax diagram for <strong id="EN-US_TOPIC_0000001811490929__b1211683814511">using_clause</strong>.</p>
<div class="fignone" id="EN-US_TOPIC_0000001811490929__f07ede7782f5c41afa548256a382c493a"><a name="EN-US_TOPIC_0000001811490929__f07ede7782f5c41afa548256a382c493a"></a><a name="f07ede7782f5c41afa548256a382c493a"></a><span class="figcap"><b>Figure 2 </b>using_clause-3</span><br><span><img id="EN-US_TOPIC_0000001811490929__i58a40bd9feb645309c17ae3893a443e2" src="figure/en-us_image_0000001811491517.png"></span></div>
<p id="EN-US_TOPIC_0000001811490929__a9520a147a0694102a245f412794a088e">The above syntax diagram is explained as follows:</p>
<ul id="EN-US_TOPIC_0000001811490929__ubb071afb93a14a508f18735d07f75446"><li id="EN-US_TOPIC_0000001811490929__ld0f4e73a436c49a7817f3c39b0140805"><strong id="EN-US_TOPIC_0000001811490929__b1528719075214">CALL procedure_name</strong>: calls the stored procedure.</li><li id="EN-US_TOPIC_0000001811490929__lae6f74ec5338430bbf6d48975d920f52"><strong id="EN-US_TOPIC_0000001811490929__b42751816529">[:placeholder1,:placeholder2, ...]</strong>: specifies the placeholder list of the stored procedure parameters. The number of placeholders is the same as the number of parameters. A placeholder name starts with a colon (:) or dollar sign ($). The colon (:) can be followed by digits, characters, or character strings (excluding digits, characters, or character strings with quotation marks). The dollar sign ($) can be followed only by digits. A placeholder can correspond to only one <em id="EN-US_TOPIC_0000001811490929__i1671616614542">bind_argument</em> in the <strong id="EN-US_TOPIC_0000001811490929__b6819140205413">USING</strong> clause.</li><li id="EN-US_TOPIC_0000001811490929__lbfe1b8eca2464489bdcdc283f17b8be4"><strong id="EN-US_TOPIC_0000001811490929__b1437716399119">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_0000001811490929__b43082305218">bind_argument</strong> and of the corresponding parameter are the same.</li></ul>
</div>
<div class="section" id="EN-US_TOPIC_0000001811490929__se9c7e55d19244892874c905f8ac99bce"><h4 class="sectiontitle">Examples</h4><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001811490929__sa6bc4c47a3ae4d90bf5afd8f6a07e416"><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></pre></div></td><td class="code"><div><pre><span></span><span class="c1">--Create the stored procedure proc_add.</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">proc_add</span>
<span class="p">(</span>
<span class="w"> </span><span class="n">param1</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">,</span>
<span class="w"> </span><span class="n">param2</span><span class="w"> </span><span class="k">out</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">,</span>
<span class="w"> </span><span class="n">param3</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="nb">INTEGER</span>
<span class="p">)</span>
<span class="k">AS</span>
<span class="k">BEGIN</span>
<span class="w"> </span><span class="n">param2</span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="n">param1</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">param3</span><span class="p">;</span>
<span class="k">END</span><span class="p">;</span>
<span class="o">/</span>
<span class="k">DECLARE</span>
<span class="w"> </span><span class="n">input1</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">:</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="n">input2</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">:</span><span class="o">=</span><span class="mi">2</span><span class="p">;</span>
<span class="w"> </span><span class="k">statement</span><span class="w"> </span><span class="n">VARCHAR2</span><span class="p">(</span><span class="mi">200</span><span class="p">);</span>
<span class="w"> </span><span class="n">param2</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="c1">--Declare the call statement.</span>
<span class="w"> </span><span class="k">statement</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="s1">'call proc_add(:col_1, :col_2, :col_3)'</span><span class="p">;(</span><span class="k">or</span><span class="w"> </span><span class="k">statement</span><span class="w"> </span><span class="p">:</span><span class="o">=</span><span class="w"> </span><span class="s1">'call proc_add($1, $2, $3)'</span><span class="p">;)</span>
<span class="w"> </span><span class="c1">--Execute the statement.</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="k">statement</span>
<span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="n">input1</span><span class="p">,</span><span class="w"> </span><span class="k">OUT</span><span class="w"> </span><span class="n">param2</span><span class="p">,</span><span class="w"> </span><span class="k">IN</span><span class="w"> </span><span class="n">input2</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">'result is: '</span><span class="o">||</span><span class="n">to_char</span><span class="p">(</span><span class="n">param2</span><span class="p">));</span>
<span class="k">END</span><span class="p">;</span>
<span class="o">/</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">proc_add</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 of GaussDB(DWS) Stored Procedures</a></div>
</div>
</div>