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>
213 lines
18 KiB
HTML
213 lines
18 KiB
HTML
<a name="EN-US_TOPIC_0000001510162929"></a><a name="EN-US_TOPIC_0000001510162929"></a>
|
|
|
|
<h1 class="topictitle1">RETURN Statements</h1>
|
|
<div id="body1551251593617"><p id="EN-US_TOPIC_0000001510162929__en-us_topic_0059778916_p17789840677">In <span id="EN-US_TOPIC_0000001510162929__text2099975401">GaussDB(DWS)</span>, data can be returned in either of the following ways: <strong id="EN-US_TOPIC_0000001510162929__b176511363339">RETURN</strong>, <strong id="EN-US_TOPIC_0000001510162929__b86511367339">RETURN NEXT</strong>, or <strong id="EN-US_TOPIC_0000001510162929__b15652336153319">RETURN QUERY</strong>. <strong id="EN-US_TOPIC_0000001510162929__b1432010278308">RETURN NEXT</strong> and <strong id="EN-US_TOPIC_0000001510162929__b1013931173015">RETURN QUERY</strong> are used only for functions and cannot be used for stored procedures.</p>
|
|
<div class="section" id="EN-US_TOPIC_0000001510162929__section446118284431"><h4 class="sectiontitle">RETURN</h4><p id="EN-US_TOPIC_0000001510162929__p57632291436"><strong id="EN-US_TOPIC_0000001510162929__b19701737124314">Syntax</strong></p>
|
|
<p id="EN-US_TOPIC_0000001510162929__ae13e2b897d5843bc8739b5c0dde95b7d"><a href="#EN-US_TOPIC_0000001510162929__fa40a1c0c0b6f4aba8952d533d6f111a5">Figure 1</a> shows the syntax diagram for a return statement.</p>
|
|
<div class="fignone" id="EN-US_TOPIC_0000001510162929__fa40a1c0c0b6f4aba8952d533d6f111a5"><a name="EN-US_TOPIC_0000001510162929__fa40a1c0c0b6f4aba8952d533d6f111a5"></a><a name="fa40a1c0c0b6f4aba8952d533d6f111a5"></a><span class="figcap"><b>Figure 1 </b>return_clause::=</span><br><span><img id="EN-US_TOPIC_0000001510162929__i92270c9f1f3e417eaf71aa53616f7ddb" src="figure/en-us_image_0000002040174922.jpg" height="36.9075" width="152.6175" title="Click to enlarge" class="imgResize"></span></div>
|
|
<p id="EN-US_TOPIC_0000001510162929__af0201a8e23ea4e4ba378b18f2a924d7e">The syntax details are as follows:</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__a31509f685ed94edc809af7ec1d5ed652">This statement returns control from a stored procedure or function to a caller.</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p1525915466456"><strong id="EN-US_TOPIC_0000001510162929__b735495813313">Examples</strong></p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510162929__screen14609191016462"><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>
|
|
<span class="normal">40</span>
|
|
<span class="normal">41</span>
|
|
<span class="normal">42</span>
|
|
<span class="normal">43</span>
|
|
<span class="normal">44</span>
|
|
<span class="normal">45</span>
|
|
<span class="normal">46</span>
|
|
<span class="normal">47</span>
|
|
<span class="normal">48</span>
|
|
<span class="normal">49</span>
|
|
<span class="normal">50</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1">-- Create the stored procedure proc_staffs:</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_staffs</span>
|
|
<span class="p">(</span>
|
|
<span class="n">section</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="n">salary_sum</span><span class="w"> </span><span class="k">out</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="n">staffs_count</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="k">IS</span>
|
|
<span class="k">BEGIN</span>
|
|
<span class="k">SELECT</span><span class="w"> </span><span class="k">sum</span><span class="p">(</span><span class="n">salary</span><span class="p">),</span><span class="w"> </span><span class="k">count</span><span class="p">(</span><span class="o">*</span><span class="p">)</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">salary_sum</span><span class="p">,</span><span class="w"> </span><span class="n">staffs_count</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="k">where</span><span class="w"> </span><span class="n">section_id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">section</span><span class="p">;</span>
|
|
<span class="k">END</span><span class="p">;</span>
|
|
<span class="o">/</span>
|
|
|
|
<span class="c1">-- Create the stored procedure proc_return:</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_return</span>
|
|
<span class="k">AS</span>
|
|
<span class="n">v_num</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="n">v_sum</span><span class="w"> </span><span class="nb">INTEGER</span><span class="p">;</span>
|
|
<span class="k">BEGIN</span>
|
|
<span class="n">proc_staffs</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span><span class="w"> </span><span class="n">v_sum</span><span class="p">,</span><span class="w"> </span><span class="n">v_num</span><span class="p">);</span><span class="w"> </span><span class="c1">--Invoke a statement.</span>
|
|
<span class="n">dbms_output</span><span class="p">.</span><span class="n">put_line</span><span class="p">(</span><span class="n">v_sum</span><span class="o">||</span><span class="s1">'#'</span><span class="o">||</span><span class="n">v_num</span><span class="p">);</span>
|
|
<span class="k">RETURN</span><span class="p">;</span><span class="w"> </span><span class="c1">--Return a statement.</span>
|
|
<span class="k">END</span><span class="p">;</span>
|
|
<span class="o">/</span>
|
|
|
|
<span class="c1">-- Invoke a stored procedure proc_return:</span>
|
|
<span class="k">CALL</span><span class="w"> </span><span class="n">proc_return</span><span class="p">();</span>
|
|
|
|
<span class="c1">-- Delete a 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_staffs</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">proc_return</span><span class="p">;</span>
|
|
|
|
<span class="c1">--Create the function func_return.</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">FUNCTION</span><span class="w"> </span><span class="n">func_return</span><span class="w"> </span><span class="k">returns</span><span class="w"> </span><span class="n">void</span>
|
|
<span class="k">language</span><span class="w"> </span><span class="n">plpgsql</span>
|
|
<span class="k">AS</span><span class="w"> </span><span class="err">$$</span>
|
|
<span class="k">DECLARE</span>
|
|
<span class="n">v_num</span><span class="w"> </span><span class="nb">INTEGER</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="k">BEGIN</span>
|
|
<span class="n">dbms_output</span><span class="p">.</span><span class="n">put_line</span><span class="p">(</span><span class="n">v_num</span><span class="p">);</span>
|
|
<span class="k">RETURN</span><span class="p">;</span><span class="w"> </span><span class="c1">--Return a statement.</span>
|
|
<span class="k">END</span><span class="w"> </span><span class="err">$$</span><span class="p">;</span>
|
|
|
|
|
|
<span class="c1">-- Invoke the function func_return.</span>
|
|
<span class="k">CALL</span><span class="w"> </span><span class="n">func_return</span><span class="p">();</span>
|
|
<span class="mi">1</span>
|
|
|
|
<span class="c1">-- Delete the function.</span>
|
|
<span class="k">DROP</span><span class="w"> </span><span class="k">FUNCTION</span><span class="w"> </span><span class="n">func_return</span><span class="p">;</span>
|
|
</pre></div></td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
<div class="section" id="EN-US_TOPIC_0000001510162929__section49241422104715"><h4 class="sectiontitle">RETURN NEXT and RETURN QUERY</h4><p id="EN-US_TOPIC_0000001510162929__p167691328124716"><strong id="EN-US_TOPIC_0000001510162929__b0670134384712">Syntax</strong></p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p147761058526">When creating a function, specify <strong id="EN-US_TOPIC_0000001510162929__b34216237993131">SETOF datatype</strong> for the return values.</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p1319914613111">return_next_clause::=</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p1816318262217"><span><img id="EN-US_TOPIC_0000001510162929__image171001111131" src="figure/en-us_image_0000002076212665.png"></span></p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p19958105918415">return_query_clause::=</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p1146642616219"><span><img id="EN-US_TOPIC_0000001510162929__image43476718203" src="figure/en-us_image_0000002076334057.png"></span></p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p8901411957">The syntax details are as follows:</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p31481228512">If a function needs to return a result set, use <strong id="EN-US_TOPIC_0000001510162929__b29549867693131">RETURN NEXT</strong> or <strong id="EN-US_TOPIC_0000001510162929__b74504245793131">RETURN QUERY</strong> to add results to the result set, and then continue to execute the next statement of the function. As the <strong id="EN-US_TOPIC_0000001510162929__b155390960693131">RETURN NEXT</strong> or <strong id="EN-US_TOPIC_0000001510162929__b28360970593131">RETURN QUERY</strong> statement is executed repeatedly, more and more results will be added to the result set. After the function is executed, all results are returned.</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p25113522093"><strong id="EN-US_TOPIC_0000001510162929__b9261450293131">RETURN NEXT</strong> can be used for scalar and compound data types.</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p672761751010"><strong id="EN-US_TOPIC_0000001510162929__b41841317593131">RETURN QUERY</strong> has a variant <strong id="EN-US_TOPIC_0000001510162929__b51391136293131">RETURN QUERY EXECUTE</strong>. You can add dynamic queries and add parameters to the queries by using <strong id="EN-US_TOPIC_0000001510162929__b172291106593131">USING</strong>.</p>
|
|
<p id="EN-US_TOPIC_0000001510162929__p169141731482"><strong id="EN-US_TOPIC_0000001510162929__b11940102303415">Examples</strong></p>
|
|
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001510162929__s5b2940101ab5464a8809349b84864c8a"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">t1</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="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">t1</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="mi">10</span><span class="p">);</span>
|
|
|
|
<span class="c1">--RETURN NEXT</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">FUNCTION</span><span class="w"> </span><span class="n">fun_for_return_next</span><span class="p">()</span><span class="w"> </span><span class="k">RETURNS</span><span class="w"> </span><span class="k">SETOF</span><span class="w"> </span><span class="n">t1</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="err">$$</span>
|
|
<span class="k">DECLARE</span>
|
|
<span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="n">t1</span><span class="o">%</span><span class="n">ROWTYPE</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">r</span><span class="w"> </span><span class="k">IN</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">t1</span>
|
|
<span class="w"> </span><span class="n">LOOP</span>
|
|
<span class="w"> </span><span class="k">RETURN</span><span class="w"> </span><span class="k">NEXT</span><span class="w"> </span><span class="n">r</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">RETURN</span><span class="p">;</span>
|
|
<span class="k">END</span><span class="p">;</span>
|
|
<span class="err">$$</span><span class="w"> </span><span class="k">LANGUAGE</span><span class="w"> </span><span class="n">PLPGSQL</span><span class="p">;</span>
|
|
<span class="k">call</span><span class="w"> </span><span class="n">fun_for_return_next</span><span class="p">();</span>
|
|
<span class="w"> </span><span class="n">a</span>
|
|
<span class="c1">---</span>
|
|
<span class="w"> </span><span class="mi">1</span>
|
|
<span class="w"> </span><span class="mi">10</span>
|
|
<span class="p">(</span><span class="mi">2</span><span class="w"> </span><span class="k">rows</span><span class="p">)</span>
|
|
|
|
<span class="c1">-- RETURN QUERY</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">FUNCTION</span><span class="w"> </span><span class="n">fun_for_return_query</span><span class="p">()</span><span class="w"> </span><span class="k">RETURNS</span><span class="w"> </span><span class="k">SETOF</span><span class="w"> </span><span class="n">t1</span><span class="w"> </span><span class="k">AS</span><span class="w"> </span><span class="err">$$</span>
|
|
<span class="k">DECLARE</span>
|
|
<span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="n">t1</span><span class="o">%</span><span class="n">ROWTYPE</span><span class="p">;</span>
|
|
<span class="k">BEGIN</span>
|
|
<span class="w"> </span><span class="k">RETURN</span><span class="w"> </span><span class="n">QUERY</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">t1</span><span class="p">;</span>
|
|
<span class="k">END</span><span class="p">;</span>
|
|
<span class="err">$$</span>
|
|
<span class="k">language</span><span class="w"> </span><span class="n">plpgsql</span><span class="p">;</span>
|
|
<span class="k">call</span><span class="w"> </span><span class="n">fun_for_return_next</span><span class="p">();</span>
|
|
<span class="w"> </span><span class="n">a</span>
|
|
<span class="c1">---</span>
|
|
<span class="w"> </span><span class="mi">1</span>
|
|
<span class="w"> </span><span class="mi">10</span>
|
|
<span class="p">(</span><span class="mi">2</span><span class="w"> </span><span class="k">rows</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_0532.html">GaussDB(DWS) Stored Procedure Control Statements</a></div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<script language="JavaScript">
|
|
<!--
|
|
image_size('.imgResize');
|
|
var msg_imageMax = "view original image";
|
|
var msg_imageClose = "close";
|
|
//--></script> |