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

57 lines
8.3 KiB
HTML

<a name="EN-US_TOPIC_0000001145830885"></a><a name="EN-US_TOPIC_0000001145830885"></a>
<h1 class="topictitle1">SAVEPOINT</h1>
<div id="body1494377960801"><div class="section" id="EN-US_TOPIC_0000001145830885__s5f5c7196b45748249cab9239de80ef32"><h4 class="sectiontitle">Function</h4><p id="EN-US_TOPIC_0000001145830885__en-us_topic_0059777880_p88037451270"><strong id="EN-US_TOPIC_0000001145830885__b842352706181620">SAVEPOINT</strong> establishes a new savepoint within the current transaction.</p>
<p id="EN-US_TOPIC_0000001145830885__ac0439bb7fd564a90a9bbe12ade2f4cbc">A savepoint is a special mark inside a transaction that rolls back all commands that are executed after the savepoint was established, restoring the transaction state to what it was at the time of the savepoint.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001145830885__se3e51029d8094b96bf845390e3a07e07"><h4 class="sectiontitle">Precautions</h4><ul id="EN-US_TOPIC_0000001145830885__ul5749173618471"><li id="EN-US_TOPIC_0000001145830885__li2749133654710">Use <strong id="EN-US_TOPIC_0000001145830885__b842352706181729">ROLLBACK TO SAVEPOINT</strong> to roll back to a savepoint. Use <strong id="EN-US_TOPIC_0000001145830885__b531098911076">RELEASE SAVEPOINT</strong> to destroy a savepoint but keep the effects of the commands executed after the savepoint was established.</li><li id="EN-US_TOPIC_0000001145830885__li1274919368471">Savepoints can only be established when inside a transaction block. There can be multiple savepoints defined within a transaction.</li><li id="EN-US_TOPIC_0000001145830885__li157499367478"><strong id="EN-US_TOPIC_0000001145830885__b155359423492612">SAVEPOINT</strong> cannot be used for functions, anonymous blocks, or stored procedures.</li><li id="EN-US_TOPIC_0000001145830885__li2750336114713">In the case of an unexpected termination of a distributed thread or process caused by a node or connection failure, or of an error caused by the inconsistency between source and destination table structures in a COPY FROM operation, the transaction cannot be rolled back to the established savepoint. Instead, the entire transaction will be rolled back.</li><li id="EN-US_TOPIC_0000001145830885__li0750736124710">According to the SQL standard, a savepoint is destroyed automatically when another savepoint with the same name is established. In <span id="EN-US_TOPIC_0000001145830885__text1327428531">GaussDB(DWS)</span>, old savepoints are kept, though only the most recent one will be used for rollback or release. Releasing the newer savepoint with <strong id="EN-US_TOPIC_0000001145830885__b168816306011">RELEASE SAVEPOINT</strong> will cause the older one to again become accessible to <strong id="EN-US_TOPIC_0000001145830885__b155761849007">ROLLBACK TO SAVEPOINT</strong> and <strong id="EN-US_TOPIC_0000001145830885__b15884145211019">RELEASE SAVEPOINT</strong>. Except for this, <strong id="EN-US_TOPIC_0000001145830885__b648910206119">SAVEPOINT</strong> is fully SQL conforming.</li></ul>
</div>
<div class="section" id="EN-US_TOPIC_0000001145830885__s4ba8540aea0146f48402dcc21a3b7573"><h4 class="sectiontitle">Syntax</h4><pre class="screen" id="EN-US_TOPIC_0000001145830885__sa64fa27ae6d9447793dd43c8b06dfc8d">SAVEPOINT savepoint_name;</pre>
</div>
<div class="section" id="EN-US_TOPIC_0000001145830885__s7e9cadffbdb74a7c870d4da59e9e9fac"><h4 class="sectiontitle">Parameter Description</h4><p id="EN-US_TOPIC_0000001145830885__ade421a818a75405fb502b5928bad4623">savepoint_name</p>
<p id="EN-US_TOPIC_0000001145830885__ae62445f119d7420c820a9a26be199569">Specifies the name of a new savepoint.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001145830885__s85afb65aa7a847318788164030e46a21"><h4 class="sectiontitle">Examples</h4><ul id="EN-US_TOPIC_0000001145830885__ul8809124292910"><li id="EN-US_TOPIC_0000001145830885__li11809042152916">Create a savepoint and undo all commands executed after the savepoint is created.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145830885__screen1997114136268"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">START</span><span class="w"> </span><span class="k">TRANSACTION</span><span class="p">;</span><span class="w"></span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">table1</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="p">);</span><span class="w"></span>
<span class="n">SAVEPOINT</span><span class="w"> </span><span class="n">my_savepoint</span><span class="p">;</span><span class="w"></span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">table1</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">2</span><span class="p">);</span><span class="w"></span>
<span class="k">ROLLBACK</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="n">SAVEPOINT</span><span class="w"> </span><span class="n">my_savepoint</span><span class="p">;</span><span class="w"></span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">table1</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">3</span><span class="p">);</span><span class="w"></span>
<span class="k">COMMIT</span><span class="p">;</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001145830885__p5308848112919">Query the table content, which should contain 1 and 3 but not 2, because 2 has been rolled back.</p>
</li><li id="EN-US_TOPIC_0000001145830885__li1681014242911">Create and then destroy a savepoint.<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001145830885__s099869e839cf49f38265b1827810147a"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">START</span><span class="w"> </span><span class="k">TRANSACTION</span><span class="p">;</span><span class="w"></span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">table1</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">3</span><span class="p">);</span><span class="w"></span>
<span class="n">SAVEPOINT</span><span class="w"> </span><span class="n">my_savepoint</span><span class="p">;</span><span class="w"></span>
<span class="k">INSERT</span><span class="w"> </span><span class="k">INTO</span><span class="w"> </span><span class="n">table1</span><span class="w"> </span><span class="k">VALUES</span><span class="w"> </span><span class="p">(</span><span class="mi">4</span><span class="p">);</span><span class="w"></span>
<span class="n">RELEASE</span><span class="w"> </span><span class="n">SAVEPOINT</span><span class="w"> </span><span class="n">my_savepoint</span><span class="p">;</span><span class="w"></span>
<span class="k">COMMIT</span><span class="p">;</span><span class="w"></span>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001145830885__p1441918535297">Query the table content, which should contain both 3 and 4.</p>
</li></ul>
</div>
<div class="section" id="EN-US_TOPIC_0000001145830885__sa449b160d1e74b0980a8dd4f4b8ace35"><h4 class="sectiontitle">Helpful Links</h4><p id="EN-US_TOPIC_0000001145830885__ad35cb4e466554a77ae1fe7d6f0758f5f"><a href="dws_06_0267.html">RELEASE SAVEPOINT</a>, <a href="dws_06_0269.html">ROLLBACK TO SAVEPOINT</a></p>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="dws_06_0254.html">TCL Syntax</a></div>
</div>
</div>