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

61 lines
7.6 KiB
HTML

<a name="EN-US_TOPIC_0000001233708665"></a><a name="EN-US_TOPIC_0000001233708665"></a>
<h1 class="topictitle1">ROLLBACK TO SAVEPOINT</h1>
<div id="body1494377960801"><div class="section" id="EN-US_TOPIC_0000001233708665__s0fc26f80df2b4ae09547bb9766bd0e1b"><h4 class="sectiontitle">Function</h4><p id="EN-US_TOPIC_0000001233708665__p82381552124217"><strong id="EN-US_TOPIC_0000001233708665__b1749993411216">ROLLBACK TO SAVEPOINT</strong> rolls back to a savepoint. It implicitly destroys all savepoints that were established after the named savepoint.</p>
<p id="EN-US_TOPIC_0000001233708665__ac4c26c47a71b49efaa6484b237977486">Rolls back all commands that were executed after the savepoint was established. The savepoint remains valid and can be rolled back to again later, if needed.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001233708665__s277af5c6ff7547f5b6074caa5195a001"><h4 class="sectiontitle">Precautions</h4><ul id="EN-US_TOPIC_0000001233708665__ul1764286153911"><li id="EN-US_TOPIC_0000001233708665__li764213693919">Specifying a savepoint name that has not been established is an error.</li><li id="EN-US_TOPIC_0000001233708665__li7642169391">Cursors have somewhat non-transactional behavior with respect to savepoints. Any cursor that is opened inside a savepoint will be closed when the savepoint is rolled back. If a previously opened cursor is affected by a <strong id="EN-US_TOPIC_0000001233708665__b109051743190">FETCH</strong> or <strong id="EN-US_TOPIC_0000001233708665__b20561184517912">MOVE</strong> command inside a savepoint that is later rolled back, the cursor remains at the position that <strong id="EN-US_TOPIC_0000001233708665__b1354513541293">FETCH</strong> left it pointing to (that is, the cursor motion caused by <strong id="EN-US_TOPIC_0000001233708665__b109217485910">FETCH</strong> is not rolled back). Closing a cursor is not undone by rolling back, either. A cursor whose execution causes a transaction to abort is put in a cannot-execute state, so while the transaction can be restored using <strong id="EN-US_TOPIC_0000001233708665__b842352706194355">ROLLBACK TO SAVEPOINT</strong>, the cursor can no longer be used.</li><li id="EN-US_TOPIC_0000001233708665__li116421620399">Use <strong id="EN-US_TOPIC_0000001233708665__b842352706181729">ROLLBACK TO SAVEPOINT</strong> to roll back to a savepoint. Use <strong id="EN-US_TOPIC_0000001233708665__b531098911076">RELEASE SAVEPOINT</strong> to destroy a savepoint but keep the effects of the commands executed after the savepoint was established.</li></ul>
</div>
<div class="section" id="EN-US_TOPIC_0000001233708665__se203a0d0672949e4ac68506914ccf446"><h4 class="sectiontitle">Syntax</h4><div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233708665__seab8bc6dee734fd2933a0cef5991459d"><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="k">ROLLBACK</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="k">WORK</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="k">TRANSACTION</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="k">TO</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="n">SAVEPOINT</span><span class="w"> </span><span class="p">]</span><span class="w"> </span><span class="n">savepoint_name</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="section" id="EN-US_TOPIC_0000001233708665__s1e4a3553941b49acb3848d3f6f003e2d"><h4 class="sectiontitle">Parameter Description</h4><p id="EN-US_TOPIC_0000001233708665__a09014d11ad7841c796ff1a413719fd73">savepoint_name</p>
<p id="EN-US_TOPIC_0000001233708665__en-us_topic_0059778869_p486213219158">Rolls back to a savepoint.</p>
</div>
<div class="section" id="EN-US_TOPIC_0000001233708665__section8208165872713"><h4 class="sectiontitle">Examples</h4><p id="EN-US_TOPIC_0000001233708665__p1355714214112">Undo the effects of the commands executed after my_savepoint was established:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233708665__screen843849111112"><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="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>
</pre></div></td></tr></table></div>
</div>
<p id="EN-US_TOPIC_0000001233708665__p230534212114">Cursor positions are not affected by savepoint rollback:</p>
<div class="codecoloring" codetype="Sql" id="EN-US_TOPIC_0000001233708665__screen1820855842715"><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></pre></div></td><td class="code"><div><pre><span></span><span class="k">BEGIN</span><span class="p">;</span>
<span class="k">DECLARE</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="k">CURSOR</span><span class="w"> </span><span class="k">FOR</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">UNION</span><span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
<span class="n">SAVEPOINT</span><span class="w"> </span><span class="n">foo</span><span class="p">;</span>
<span class="k">FETCH</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">foo</span><span class="p">;</span>
<span class="w"> </span><span class="o">?</span><span class="k">column</span><span class="o">?</span><span class="w"> </span>
<span class="c1">----------</span>
<span class="w"> </span><span class="mi">1</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">foo</span><span class="p">;</span>
<span class="k">FETCH</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="k">FROM</span><span class="w"> </span><span class="n">foo</span><span class="p">;</span>
<span class="w"> </span><span class="o">?</span><span class="k">column</span><span class="o">?</span><span class="w"> </span>
<span class="c1">----------</span>
<span class="w"> </span><span class="mi">2</span>
<span class="k">COMMIT</span><span class="p">;</span>
</pre></div></td></tr></table></div>
</div>
</div>
<div class="section" id="EN-US_TOPIC_0000001233708665__sf1cf2456736e4414bc7334451f6039a7"><h4 class="sectiontitle">Helpful Links</h4><p id="EN-US_TOPIC_0000001233708665__en-us_topic_0059778869_p327135613124"><a href="dws_06_0263.html">SAVEPOINT</a>, <a href="dws_06_0267.html">RELEASE 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>