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

98 lines
8.4 KiB
HTML

<a name="EN-US_TOPIC_0000001233563323"></a><a name="EN-US_TOPIC_0000001233563323"></a>
<h1 class="topictitle1">RETURN NEXT and RETURN QUERY</h1>
<div id="body1551664498139"><div class="section" id="EN-US_TOPIC_0000001233563323__section66906369117"><h4 class="sectiontitle">Syntax</h4><p id="EN-US_TOPIC_0000001233563323__p147761058526">When creating a function, specify <strong id="EN-US_TOPIC_0000001233563323__b75417546556">SETOF datatype</strong> for the return values.</p>
<p id="EN-US_TOPIC_0000001233563323__p1319914613111">return_next_clause::=</p>
<p id="EN-US_TOPIC_0000001233563323__p1816318262217"><span><img id="EN-US_TOPIC_0000001233563323__image171001111131" src="figure/en-us_image_0000001188323798.png"></span></p>
<p id="EN-US_TOPIC_0000001233563323__p19958105918415">return_query_clause::=</p>
<p id="EN-US_TOPIC_0000001233563323__p1146642616219"><span><img id="EN-US_TOPIC_0000001233563323__image43476718203" src="figure/en-us_image_0000001233883431.png"></span></p>
<p id="EN-US_TOPIC_0000001233563323__p8901411957">The syntax details are as follows:</p>
<p id="EN-US_TOPIC_0000001233563323__p31481228512">If a function needs to return a result set, use <strong id="EN-US_TOPIC_0000001233563323__b1146424375819">RETURN NEXT</strong> or <strong id="EN-US_TOPIC_0000001233563323__b114451051165812">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_0000001233563323__b85098309519">RETURN NEXT</strong> or <strong id="EN-US_TOPIC_0000001233563323__b136613417518">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_0000001233563323__p25113522093"><strong id="EN-US_TOPIC_0000001233563323__b76319339818">RETURN NEXT</strong> can be used for scalar and compound data types.</p>
<p id="EN-US_TOPIC_0000001233563323__p672761751010"><strong id="EN-US_TOPIC_0000001233563323__b1384219565107">RETURN QUERY</strong> has a variant <strong id="EN-US_TOPIC_0000001233563323__b88645112114">RETURN QUERY EXECUTE</strong>. You can add dynamic queries and add parameters to the queries by using <strong id="EN-US_TOPIC_0000001233563323__b17990143313139">USING</strong>.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001233563323__section663313751118"><h4 class="sectiontitle">Examples</h4><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233563323__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_0533.html">RETURN Statements</a></div>
</div>
</div>