doc-exports/docs/dws/dev/dws_04_0558.html
Lu, Huayi a24ca60074 DWS DEVELOPER 811 version
Reviewed-by: Hasko, Vladimir <vladimir.hasko@t-systems.com>
Co-authored-by: Lu, Huayi <luhuayi@huawei.com>
Co-committed-by: Lu, Huayi <luhuayi@huawei.com>
2023-01-19 13:37:49 +00:00

115 lines
16 KiB
HTML

<a name="EN-US_TOPIC_0000001098654698"></a><a name="EN-US_TOPIC_0000001098654698"></a>
<h1 class="topictitle1">Debugging</h1>
<div id="body8662426"><div class="section" id="EN-US_TOPIC_0000001098654698__s2a042ac6634c47ccae0afc4e4b17a214"><h4 class="sectiontitle">Syntax</h4><p id="EN-US_TOPIC_0000001098654698__a1ea9396e3c8c48c791d283b38c806a81">RAISE has the following five syntax formats:</p>
<div class="fignone" id="EN-US_TOPIC_0000001098654698__fa56a6322eed74300a50ab67c80ae2440"><span class="figcap"><b>Figure 1 </b>raise_format::=</span><br><span><img id="EN-US_TOPIC_0000001098654698__en-us_topic_0059777683_i573a9b906a4f45b7b1b85a57947822f1" src="figure/en-us_image_0000001145695049.png"></span></div>
<div class="fignone" id="EN-US_TOPIC_0000001098654698__fbc6a866b0a164aefa3cc4942c2f57454"><span class="figcap"><b>Figure 2 </b>raise_condition::=</span><br><span><img id="EN-US_TOPIC_0000001098654698__en-us_topic_0059777683_i68c3fe73f8bc418d95fa62d461e70fb5" src="figure/en-us_image_0000001145814977.png"></span></div>
<div class="fignone" id="EN-US_TOPIC_0000001098654698__f830cdde921964751a34d50f7b862ee24"><span class="figcap"><b>Figure 3 </b>raise_sqlstate::=</span><br><span><img id="EN-US_TOPIC_0000001098654698__en-us_topic_0059777683_i4d8ea76bd48a43ca9f57f16ca8f68918" src="figure/en-us_image_0000001098655300.png"></span></div>
<div class="fignone" id="EN-US_TOPIC_0000001098654698__fe96016e576674cf590b9acdf5c67f02d"><span class="figcap"><b>Figure 4 </b>raise_option::=</span><br><span><img id="EN-US_TOPIC_0000001098654698__en-us_topic_0059777683_i4e5b515f37e74e49a75b99af103f1045" src="figure/en-us_image_0000001098975112.png"></span></div>
<div class="fignone" id="EN-US_TOPIC_0000001098654698__f24b430299840491494e4d22126e8d87e"><a name="EN-US_TOPIC_0000001098654698__f24b430299840491494e4d22126e8d87e"></a><a name="f24b430299840491494e4d22126e8d87e"></a><span class="figcap"><b>Figure 5 </b>raise::=</span><br><span><img id="EN-US_TOPIC_0000001098654698__en-us_topic_0059777683_ie2255504f2fa45628ca4ac4617fe67f7" src="figure/en-us_image_0000001145895095.png"></span></div>
<p id="EN-US_TOPIC_0000001098654698__a69586da2eba1411485c6e82e68eb45f4">Parameter description:</p>
<ul id="EN-US_TOPIC_0000001098654698__u538cc37accd44112b84c9d22c9304db0"><li id="EN-US_TOPIC_0000001098654698__lc43c17a8443e4bc68667968280433979">The level option is used to specify the error level, that is, <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b6555104217159">DEBUG</strong>, <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b5308847417159">LOG</strong>, <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b803421917159">INFO</strong>, <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b519911217159">NOTICE</strong>, <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b4679200817159">WARNING</strong>, or <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b1847489417159">EXCEPTION</strong> (default). <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b3205632217159">EXCEPTION</strong> throws an error that normally terminates the current transaction and the others only generate information at their levels. The <a href="dws_04_0915.html#EN-US_TOPIC_0000001098655026__s1ffb0797361d413d875381200fed970b">log_min_messages</a> and <a href="dws_04_0915.html#EN-US_TOPIC_0000001098655026__sbd8ad9bb6b9b48ba97f998f060dc56f3">client_min_messages</a> parameters control whether the error messages of specific levels are reported to the client and are written to the server log.</li><li id="EN-US_TOPIC_0000001098654698__ldd9355d37c7f4e45beb912ea1641b1d4"><strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b235133917159">format</strong>: specifies the error message text to be reported, a format character string. The format character string can be appended with an expression for insertion to the message text. In a format character string, <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b2116205217159">%</strong> is replaced by the parameter value attached to format and <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b5624074617159">%%</strong> is used to print <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b3640466917159">%</strong>. For example:<pre class="screen" id="EN-US_TOPIC_0000001098654698__s68dbe97a3fea465dbfc45b0857102b0b">--v_job_id replaces % in the character string.
RAISE NOTICE 'Calling cs_create_job(%)',v_job_id;</pre>
</li><li id="EN-US_TOPIC_0000001098654698__l5820ab9c60de46cfa000cfb56fa87f14">option = expression: inserts additional information to an error report. The keyword option can be <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b44987517159">MESSAGE</strong>, <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b404888317159">DETAIL</strong>, <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b3643995317159">HINT</strong>, or <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b5952412617159">ERRCODE</strong>, and each expression can be any character string.<ul id="EN-US_TOPIC_0000001098654698__ua0ff84a51a254102b81d7076578e083e"><li id="EN-US_TOPIC_0000001098654698__l56953010049141829d426d26e97c2505">MESSAGE: specifies the error message text. This option cannot be used in a RAISE statement that contains a format character string in front of USING.</li><li id="EN-US_TOPIC_0000001098654698__la21e3f717e374b62b1679514428b1d32">DETAIL: specifies detailed information of an error.</li><li id="EN-US_TOPIC_0000001098654698__l96e54cfbb4644a9e8cdc984c3f8ced2d">HINT: prints hint information.</li><li id="EN-US_TOPIC_0000001098654698__lf3071b2e925644ef95cb6cb2e1a07568"><strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b3682313017159">ERRCODE</strong>: designates an error code (SQLSTATE) to a report. A condition name or a five-character SQLSTATE error code can be used.</li></ul>
</li><li id="EN-US_TOPIC_0000001098654698__l02fc83fb04e14ad3a874e7e87e65aed2">condition_name: specifies the condition name corresponding to the error code.</li><li id="EN-US_TOPIC_0000001098654698__l55a9add3c8c44943a3cdb84bcfe3b396">sqlstate: specifies the error code.</li></ul>
<p id="EN-US_TOPIC_0000001098654698__a28656b6b753d4eb28dd1cbf290fbc932">If neither a condition name nor an <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b1467256917159">SQLSTATE</strong> is designated in a <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b6494426317159">RAISE EXCEPTION</strong> command, the <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b4762745617159">RAISE EXCEPTION (P0001)</strong> is used by default. If no message text is designated, the condition name or SQLSTATE is used as the message text by default.</p>
<div class="notice" id="EN-US_TOPIC_0000001098654698__n8c72a2f0a7f441929609a691a3ef1a98"><span class="noticetitle"><img src="public_sys-resources/notice_3.0-en-us.png"> </span><div class="noticebody"><p id="EN-US_TOPIC_0000001098654698__a5a147b36b5f54089ae68db2f336080da">If the <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b2403293117331">SQLSTATE</strong> designates an error code, the error code is not limited to a defined error code. It can be any error code containing five digits or ASCII uppercase rather than <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b1496979517331">00000</strong>. Do not use an error code ended with three zeros because this kind of error codes are type codes and can be captured by the whole category.</p>
</div></div>
<div class="note" id="EN-US_TOPIC_0000001098654698__n3357b83cd7f24ce49a48aea71bacb3ba"><img src="public_sys-resources/note_3.0-en-us.png"><span class="notetitle"> </span><div class="notebody"><p id="EN-US_TOPIC_0000001098654698__a28655dd1bcac43ffaad926df4c53cb4c">The syntax described in <a href="#EN-US_TOPIC_0000001098654698__f24b430299840491494e4d22126e8d87e">Figure 5</a> does not append any parameter. This form is used only for the <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b4484980917159">EXCEPTION</strong> statement in a <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b99509817159">BEGIN</strong> block so that the error can be re-processed.</p>
</div></div>
</div>
<div class="section" id="EN-US_TOPIC_0000001098654698__s395f5316a90b4b39a956f85cad136431"><h4 class="sectiontitle">Examples</h4><div class="p" id="EN-US_TOPIC_0000001098654698__aebc3f70c0f87482c9d9537ae98abf745">Display error and hint information when a transaction terminates:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001098654698__s2dacc5742f104d5f8f70e54d26f45da8"><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">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_raise1</span><span class="p">(</span><span class="n">user_id</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="k">AS</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="n">RAISE</span><span class="w"> </span><span class="k">EXCEPTION</span><span class="w"> </span><span class="s1">'Noexistence ID --&gt; %'</span><span class="p">,</span><span class="n">user_id</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="n">HINT</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'Please check your user ID'</span><span class="p">;</span><span class="w"> </span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span><span class="w"></span>
<span class="k">call</span><span class="w"> </span><span class="n">proc_raise1</span><span class="p">(</span><span class="mi">300011</span><span class="p">);</span><span class="w"></span>
<span class="c1">-- Execution result:</span>
<span class="n">ERROR</span><span class="p">:</span><span class="w"> </span><span class="n">Noexistence</span><span class="w"> </span><span class="n">ID</span><span class="w"> </span><span class="c1">--&gt; 300011</span>
<span class="n">HINT</span><span class="p">:</span><span class="w"> </span><span class="n">Please</span><span class="w"> </span><span class="k">check</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">ID</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="p" id="EN-US_TOPIC_0000001098654698__aa31c6135f50c4dc3bc3064b528068f9b">Two methods are available for setting <strong id="EN-US_TOPIC_0000001098654698__en-us_topic_0027043000_b4637828017412">SQLSTATE</strong>:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001098654698__s45e4cd90a6e94d659bad5432f8ee054b"><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></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">proc_raise2</span><span class="p">(</span><span class="n">user_id</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="k">AS</span><span class="w"> </span>
<span class="k">BEGIN</span><span class="w"> </span>
<span class="n">RAISE</span><span class="w"> </span><span class="s1">'Duplicate user ID: %'</span><span class="p">,</span><span class="n">user_id</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="n">ERRCODE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'unique_violation'</span><span class="p">;</span><span class="w"> </span>
<span class="k">END</span><span class="p">;</span><span class="w"> </span>
<span class="o">/</span><span class="w"></span>
<span class="err">\</span><span class="k">set</span><span class="w"> </span><span class="n">VERBOSITY</span><span class="w"> </span><span class="k">verbose</span><span class="w"></span>
<span class="k">call</span><span class="w"> </span><span class="n">proc_raise2</span><span class="p">(</span><span class="mi">300011</span><span class="p">);</span><span class="w"></span>
<span class="c1">-- Execution result:</span>
<span class="n">ERROR</span><span class="p">:</span><span class="w"> </span><span class="n">Duplicate</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">ID</span><span class="p">:</span><span class="w"> </span><span class="mi">300011</span><span class="w"></span>
<span class="k">SQLSTATE</span><span class="p">:</span><span class="w"> </span><span class="mi">23505</span><span class="w"></span>
<span class="k">LOCATION</span><span class="p">:</span><span class="w"> </span><span class="n">exec_stmt_raise</span><span class="p">,</span><span class="w"> </span><span class="n">pl_exec</span><span class="p">.</span><span class="n">cpp</span><span class="p">:</span><span class="mi">3482</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</div>
<p id="EN-US_TOPIC_0000001098654698__a86db198ebf5f4a5589c055f322cc85ea">If the main parameter is a condition name or <strong id="EN-US_TOPIC_0000001098654698__b13349155393211">SQLSTATE</strong>, the following applies:</p>
<p id="EN-US_TOPIC_0000001098654698__a5dce3924b2df41038bb3c519474f52cc">RAISE division_by_zero;</p>
<p id="EN-US_TOPIC_0000001098654698__acb7613531b8846f8899f761545a67c49">RAISE SQLSTATE '22012';</p>
<p id="EN-US_TOPIC_0000001098654698__a3aee8ad6cf254cf7b3512ca07b3fbeb8">For example:</p>
<pre class="screen" id="EN-US_TOPIC_0000001098654698__s21d6bf6c13fa448f8e021922b0f5a964">CREATE OR REPLACE PROCEDURE division(div in integer, dividend in integer)
AS
DECLARE
res int;
BEGIN
IF dividend=0 THEN
RAISE division_by_zero;
RETURN;
ELSE
res := div/dividend;
RAISE INFO 'division result: %', res;
RETURN;
END IF;
END;
/
call division(3,0);
-- Execution result:
ERROR: division_by_zero</pre>
<div class="p" id="EN-US_TOPIC_0000001098654698__a1411541a0afb464faa868806c4cb1264">Alternatively:<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001098654698__s6305fadf550b4552b8b47344540bdac8"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span><span class="n">RAISE</span><span class="w"> </span><span class="n">unique_violation</span><span class="w"> </span><span class="k">USING</span><span class="w"> </span><span class="n">MESSAGE</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s1">'Duplicate user ID: '</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">user_id</span><span class="p">;</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
</div>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_04_0512.html">Stored Procedures</a></div>
</div>
</div>