{"id":13198,"date":"2024-01-30T01:17:39","date_gmt":"2024-01-30T00:17:39","guid":{"rendered":"https:\/\/www.salvis.com\/blog\/?p=13198"},"modified":"2024-06-17T11:06:22","modified_gmt":"2024-06-17T09:06:22","slug":"islandsql-episode-6-dml-statements-in-oracle-database-23c","status":"publish","type":"post","link":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/","title":{"rendered":"IslandSQL Episode 6: DML Statements in Oracle Database 23c"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"introduction\">Introduction<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/github.com\/IslandSQL\/IslandSQL\">IslandSQL<\/a> grammar now covers all DML statements. This means <code>call<\/code>, <code>delete<\/code>, <code>explain plan<\/code>, <code>insert<\/code>, <code>lock table<\/code>, <code>merge<\/code>, <code>select<\/code> and <code>update<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this episode, we will focus on new features in the Oracle Database 23c that can be used in <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/INSERT.html\">insert<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/UPDATE.html\">update<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/DELETE.html\">delete<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/MERGE.html\">merge<\/a><\/code> statements. For the <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6\">select<\/a><\/code> statement see the <a href=\"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#new_features_in_the_oracle_database_23c\">last episode<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Table Value Constructor<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The new table value constructor allows you to create rows on the fly. This simplifies statements. Furthermore, it allows you to write a single statement instead of a series of statements, which makes the execution in scripts faster. It can be used in the <code><a href=\"https:\/\/www.salvis.com\/blog\/2024\/01\/12\/islandsql-episode-5-select\/#table_value_constructor\">select<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/INSERT.html#GUID-903F8043-0254-4EE9-ACC1-CB8AC0AF3423__I2122346\">insert<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/MERGE.html#GUID-5692CCB7-24D9-4C0E-81A7-A22436DC968F__GUID-12808F21-5862-4A67-AEAD-4DA45F9FDC8B\">merge<\/a><\/code> statement.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Insert<\/h5>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">1) Insert with table value constructor<\/span><span role=\"button\" tabindex=\"0\" data-code=\"drop table if exists d;\ncreate table d (deptno number(2,0), dname varchar2(14), loc varchar2(13));\ninsert into d (deptno, dname, loc)\nvalues (10, 'ACCOUNTING', 'NEW YORK'),\n       (20, 'RESEARCH',   'DALLAS'),\n       (30, 'SALES',      'CHICAGO'),\n       (40, 'OPERATIONS', 'BOSTON');\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> d;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> d (deptno <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">), dname <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">14<\/span><span style=\"color: #D4D4D4\">), loc <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">13<\/span><span style=\"color: #D4D4D4\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> d (deptno, dname, loc)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;ACCOUNTING&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;NEW YORK&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       (<\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;RESEARCH&#39;<\/span><span style=\"color: #D4D4D4\">,   <\/span><span style=\"color: #CE9178\">&#39;DALLAS&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       (<\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;SALES&#39;<\/span><span style=\"color: #D4D4D4\">,      <\/span><span style=\"color: #CE9178\">&#39;CHICAGO&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       (<\/span><span style=\"color: #B5CEA8\">40<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;OPERATIONS&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;BOSTON&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"Table D dropped.\n\nTable D created.\n\n4 rows inserted.\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Table D dropped.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Table D created.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">4 rows inserted.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">Merge<\/h5>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">2) Merge with table value constructor<\/span><span role=\"button\" tabindex=\"0\" data-code=\"merge into d t\nusing (values \n         (10, 'ACCOUNTING', 'NEW YORK'),\n         (20, 'RESEARCH',   'DALLAS'),\n         (30, 'SALES',      'CHICAGO'),\n         (40, 'OPERATIONS', 'BOSTON')\n      ) s (deptno, dname, loc)\n   on (t.deptno = s.deptno)\n when matched then\n      update\n         set t.dname = s.dname,\n             t.loc = s.loc\n when not matched then\n      insert (t.deptno, t.dname, t.loc)\n      values (s.deptno, s.dname, s.loc);\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">merge<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> d t<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">using<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         (<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;ACCOUNTING&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;NEW YORK&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         (<\/span><span style=\"color: #B5CEA8\">20<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;RESEARCH&#39;<\/span><span style=\"color: #D4D4D4\">,   <\/span><span style=\"color: #CE9178\">&#39;DALLAS&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         (<\/span><span style=\"color: #B5CEA8\">30<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;SALES&#39;<\/span><span style=\"color: #D4D4D4\">,      <\/span><span style=\"color: #CE9178\">&#39;CHICAGO&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         (<\/span><span style=\"color: #B5CEA8\">40<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;OPERATIONS&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;BOSTON&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      ) s (deptno, dname, loc)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> (t.deptno = s.deptno)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">when<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">matched<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> t.dname = s.dname,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             t.loc = s.loc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">when<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">matched<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> (t.deptno, t.dname, t.loc)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (s.deptno, s.dname, s.loc);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"4 rows merged.\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">4 rows merged.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Direct Joins for UPDATE and DELETE Statements<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The new <code>from_using_clause<\/code> can be used in <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/DELETE.html#GUID-156845A5-B626-412B-9F95-8869B988ABD7__SECTION_QS3_4WS_DYB\">delete<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/UPDATE.html#GUID-027A462D-379D-4E35-8611-410F3AC8FDA5__SECTION_CQ3_4XS_DYB\">update<\/a><\/code> statements. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"508\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-1-1024x508.png\" alt=\"from_using_clause railroad diagram\" class=\"wp-image-13204\" style=\"width:304px;height:auto\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-1-1024x508.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-1-300x149.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-1-768x381.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-1-150x75.png 150w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-1-480x238.png 480w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-1.png 1227w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">With this new clause, you can avoid a self-join and, as a result, the optimizer can produce a more efficient execution plan.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\">Delete<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">The next example is based on the HR schema. We delete all countries that are not used by any department. See line 3 for the <code>from_using_clause<\/code>. The join conditions and the filter criteria are part of the <code>where_clause<\/code>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You cannot define the join condition for the table in the <code>from_clause<\/code> in the <code>from_using_clause<\/code>. This is a documented limitation. Furthermore, we cannot mix ANSI-92 join syntax with Oracle-style outer join syntax (see <a href=\"https:\/\/docs.oracle.com\/en\/error-help\/db\/ora-25156\/index.html\">ORA-25156<\/a>). As a result, we have to use the Oracle-style join syntax for all tables.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">3a) Delete with from_using_clause<\/span><span role=\"button\" tabindex=\"0\" data-code=\"delete \n  from countries c \n  from locations l, departments d\n where l.country_id (+) = c.country_id\n   and d.location_id (+) = l.location_id\n   and l.location_id is null\n   and d.department_id is null; \" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">delete<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> countries <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> locations l, departments d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> l.country_id (+) = <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.country_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> d.location_id (+) = l.location_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> l.location_id <\/span><span style=\"color: #569CD6\">is null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> d.department_id <\/span><span style=\"color: #569CD6\">is null<\/span><span style=\"color: #D4D4D4\">; <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"11 rows deleted.\n\n--------------------------------------------------\n| Id  | Operation              | Name            |\n--------------------------------------------------\n|   0 | DELETE STATEMENT       |                 |\n|   1 |  DELETE                | COUNTRIES       |\n|   2 |   FILTER               |                 |\n|   3 |    HASH JOIN OUTER     |                 |\n|   4 |     FILTER             |                 |\n|   5 |      HASH JOIN OUTER   |                 |\n|   6 |       INDEX FULL SCAN  | COUNTRY_C_ID_PK |\n|   7 |       TABLE ACCESS FULL| LOCATIONS       |\n|   8 |     TABLE ACCESS FULL  | DEPARTMENTS     |\n--------------------------------------------------\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">11 rows deleted.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation              | Name            |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   0 | DELETE STATEMENT       |                 |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   1 |  DELETE                | COUNTRIES       |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   2 |   FILTER               |                 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   3 |    HASH JOIN OUTER     |                 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   4 |     FILTER             |                 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   5 |      HASH JOIN OUTER   |                 |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   6 |       INDEX FULL SCAN  | COUNTRY_C_ID_PK |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   7 |       TABLE ACCESS FULL| LOCATIONS       |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   8 |     TABLE ACCESS FULL  | DEPARTMENTS     |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--------------------------------------------------<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Having two <code>from<\/code> keywords in the <code>delete<\/code> statement is funny, but it does not make the statement easier to read. I therefore recommend rewriting the statement like this:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">3b) Delete with from_using_clause (simplified &amp; clearer)<\/span><span role=\"button\" tabindex=\"0\" data-code=\"delete countries c \n using locations l, departments d\n where l.country_id (+) = c.country_id\n   and d.location_id (+) = l.location_id\n   and l.location_id is null\n   and d.department_id is null;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">delete<\/span><span style=\"color: #D4D4D4\"> countries <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">using<\/span><span style=\"color: #D4D4D4\"> locations l, departments d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> l.country_id (+) = <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.country_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> d.location_id (+) = l.location_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> l.location_id <\/span><span style=\"color: #569CD6\">is null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> d.department_id <\/span><span style=\"color: #569CD6\">is null<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"11 rows deleted.\n\n--------------------------------------------------\n| Id  | Operation              | Name            |\n--------------------------------------------------\n|   0 | DELETE STATEMENT       |                 |\n|   1 |  DELETE                | COUNTRIES       |\n|   2 |   FILTER               |                 |\n|   3 |    HASH JOIN OUTER     |                 |\n|   4 |     FILTER             |                 |\n|   5 |      HASH JOIN OUTER   |                 |\n|   6 |       INDEX FULL SCAN  | COUNTRY_C_ID_PK |\n|   7 |       TABLE ACCESS FULL| LOCATIONS       |\n|   8 |     TABLE ACCESS FULL  | DEPARTMENTS     |\n--------------------------------------------------\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">11 rows deleted.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation              | Name            |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   0 | DELETE STATEMENT       |                 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   1 |  DELETE                | COUNTRIES       |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   2 |   FILTER               |                 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   3 |    HASH JOIN OUTER     |                 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   4 |     FILTER             |                 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   5 |      HASH JOIN OUTER   |                 |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   6 |       INDEX FULL SCAN  | COUNTRY_C_ID_PK |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   7 |       TABLE ACCESS FULL| LOCATIONS       |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   8 |     TABLE ACCESS FULL  | DEPARTMENTS     |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">--------------------------------------------------<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s an alternative, pre-23c-style <code>delete<\/code> statement without the <code>from_using_clause<\/code>. It is accessing the <code>countries<\/code> table twice, which might lead to a less efficient execution plan.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">3c) Delete with subquery filter<\/span><span role=\"button\" tabindex=\"0\" data-code=\"delete \n  from countries c1\n where c1.country_id in (\n          select c2.country_id\n            from countries c2\n            left join locations l\n              on l.country_id = c2.country_id\n            left join departments d\n              on d.location_id = l.location_id\n           where l.location_id is null\n             and d.department_id is null\n       );\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">delete<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> countries c1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> c1.country_id <\/span><span style=\"color: #569CD6\">in<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> c2.country_id<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> countries c2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">left join<\/span><span style=\"color: #D4D4D4\"> locations l<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> l.country_id = c2.country_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">left join<\/span><span style=\"color: #D4D4D4\"> departments d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> d.location_id = l.location_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">           <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> l.location_id <\/span><span style=\"color: #569CD6\">is null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">             <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> d.department_id <\/span><span style=\"color: #569CD6\">is null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       );<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"11 rows deleted.\n\n----------------------------------------------------------------------\n| Id  | Operation                                 | Name             |\n----------------------------------------------------------------------\n|   0 | DELETE STATEMENT                          |                  |\n|   1 |  DELETE                                   | COUNTRIES        |\n|   2 |   INDEX FULL SCAN                         | COUNTRY_C_ID_PK  |\n|   3 |    FILTER                                 |                  |\n|   4 |     NESTED LOOPS OUTER                    |                  |\n|   5 |      FILTER                               |                  |\n|   6 |       NESTED LOOPS OUTER                  |                  |\n|   7 |        INDEX UNIQUE SCAN                  | COUNTRY_C_ID_PK  |\n|   8 |        TABLE ACCESS BY INDEX ROWID BATCHED| LOCATIONS        |\n|   9 |         INDEX RANGE SCAN                  | LOC_COUNTRY_IX   |\n|  10 |      TABLE ACCESS BY INDEX ROWID BATCHED  | DEPARTMENTS      |\n|  11 |       INDEX RANGE SCAN                    | DEPT_LOCATION_IX |\n----------------------------------------------------------------------\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">11 rows deleted.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">----------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                                 | Name             |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">----------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   0 | DELETE STATEMENT                          |                  |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   1 |  DELETE                                   | COUNTRIES        |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   2 |   INDEX FULL SCAN                         | COUNTRY_C_ID_PK  |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   3 |    FILTER                                 |                  |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   4 |     NESTED LOOPS OUTER                    |                  |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   5 |      FILTER                               |                  |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   6 |       NESTED LOOPS OUTER                  |                  |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   7 |        INDEX UNIQUE SCAN                  | COUNTRY_C_ID_PK  |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   8 |        TABLE ACCESS BY INDEX ROWID BATCHED| LOCATIONS        |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   9 |         INDEX RANGE SCAN                  | LOC_COUNTRY_IX   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  10 |      TABLE ACCESS BY INDEX ROWID BATCHED  | DEPARTMENTS      |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  11 |       INDEX RANGE SCAN                    | DEPT_LOCATION_IX |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">----------------------------------------------------------------------<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h5 class=\"wp-block-heading\">Update<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">In this example, we increase the salaries of all employees in Germany and Canada by 20%. See lines 3 to 7 for the <code>from_using_clause<\/code> where we use ANSI-92 join syntax.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">4a) Update with from_using_clause<\/span><span role=\"button\" tabindex=\"0\" data-code=\"update employees e\n   set e.salary = e.salary * 1.2 \n using departments d\n  join locations l\n    on l.location_id = d.location_id\n  join countries c\n    on c.country_id = l.country_id\n where d.department_id = e.department_id\n   and c.country_name in ('Germany', 'Canada');\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">update<\/span><span style=\"color: #D4D4D4\"> employees e<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> e.salary = e.salary * <\/span><span style=\"color: #B5CEA8\">1.2<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">using<\/span><span style=\"color: #D4D4D4\"> departments d<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> locations l<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> l.location_id = d.location_id<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> countries <\/span><span style=\"color: #569CD6\">c<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.country_id = l.country_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> d.department_id = e.department_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.country_name <\/span><span style=\"color: #569CD6\">in<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #CE9178\">&#39;Germany&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Canada&#39;<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"3 rows updated.\n\n----------------------------------------------------------------------\n| Id  | Operation                                | Name              |\n----------------------------------------------------------------------\n|   0 | UPDATE STATEMENT                         |                   |\n|   1 |  UPDATE                                  | EMPLOYEES         |\n|   2 |   NESTED LOOPS                           |                   |\n|   3 |    NESTED LOOPS                          |                   |\n|   4 |     NESTED LOOPS                         |                   |\n|   5 |      NESTED LOOPS                        |                   |\n|   6 |       INDEX FULL SCAN                    | COUNTRY_C_ID_PK   |\n|   7 |       TABLE ACCESS BY INDEX ROWID BATCHED| LOCATIONS         |\n|   8 |        INDEX RANGE SCAN                  | LOC_COUNTRY_IX    |\n|   9 |      TABLE ACCESS BY INDEX ROWID BATCHED | DEPARTMENTS       |\n|  10 |       INDEX RANGE SCAN                   | DEPT_LOCATION_IX  |\n|  11 |     INDEX RANGE SCAN                     | EMP_DEPARTMENT_IX |\n|  12 |    TABLE ACCESS BY INDEX ROWID           | EMPLOYEES         |\n----------------------------------------------------------------------\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">3 rows updated.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">----------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                                | Name              |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">----------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   0 | UPDATE STATEMENT                         |                   |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   1 |  UPDATE                                  | EMPLOYEES         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   2 |   NESTED LOOPS                           |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   3 |    NESTED LOOPS                          |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   4 |     NESTED LOOPS                         |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   5 |      NESTED LOOPS                        |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   6 |       INDEX FULL SCAN                    | COUNTRY_C_ID_PK   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   7 |       TABLE ACCESS BY INDEX ROWID BATCHED| LOCATIONS         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   8 |        INDEX RANGE SCAN                  | LOC_COUNTRY_IX    |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   9 |      TABLE ACCESS BY INDEX ROWID BATCHED | DEPARTMENTS       |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  10 |       INDEX RANGE SCAN                   | DEPT_LOCATION_IX  |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|  11 |     INDEX RANGE SCAN                     | EMP_DEPARTMENT_IX |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|  12 |    TABLE ACCESS BY INDEX ROWID           | EMPLOYEES         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">----------------------------------------------------------------------<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">And here&#8217;s an alternative, pre-23c-style <code>update<\/code> statement without the <code>from_using_clause<\/code>. It is accessing the <code>employees<\/code> table twice, which might lead to a less efficient execution plan.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">4b) Update with subquery filter<\/span><span role=\"button\" tabindex=\"0\" data-code=\"update employees e1\n   set e1.salary = e1.salary * 1.2\n where e1.employee_id in (\n          select e2.employee_id\n            from employees e2\n            join departments d\n              on d.department_id = e2.department_id\n            join locations l\n              on l.location_id = d.location_id\n            join countries c\n              on c.country_id = l.country_id\n           where c.country_name in ('Germany', 'Canada')\n       );\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line cbp-line-highlight\"><span style=\"color: #569CD6\">update<\/span><span style=\"color: #D4D4D4\"> employees e1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> e1.salary = e1.salary * <\/span><span style=\"color: #B5CEA8\">1.2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> e1.employee_id <\/span><span style=\"color: #569CD6\">in<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> e2.employee_id<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> employees e2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> departments d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> d.department_id = e2.department_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> locations l<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> l.location_id = d.location_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> countries <\/span><span style=\"color: #569CD6\">c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.country_id = l.country_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">           <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.country_name <\/span><span style=\"color: #569CD6\">in<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #CE9178\">&#39;Germany&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Canada&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       );<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"3 rows updated.\n\n-----------------------------------------------------------------------\n| Id  | Operation                                 | Name              |\n-----------------------------------------------------------------------\n|   0 | UPDATE STATEMENT                          |                   |\n|   1 |  UPDATE                                   | EMPLOYEES         |\n|   2 |   HASH JOIN SEMI                          |                   |\n|   3 |    TABLE ACCESS FULL                      | EMPLOYEES         |\n|   4 |    VIEW                                   | VW_NSO_1          |\n|   5 |     NESTED LOOPS                          |                   |\n|   6 |      NESTED LOOPS                         |                   |\n|   7 |       NESTED LOOPS                        |                   |\n|   8 |        NESTED LOOPS SEMI                  |                   |\n|   9 |         VIEW                              | index$_join$_005  |\n|  10 |          HASH JOIN                        |                   |\n|  11 |           INDEX FAST FULL SCAN            | LOC_COUNTRY_IX    |\n|  12 |           INDEX FAST FULL SCAN            | LOC_ID_PK         |\n|  13 |         INDEX UNIQUE SCAN                 | COUNTRY_C_ID_PK   |\n|  14 |        TABLE ACCESS BY INDEX ROWID BATCHED| DEPARTMENTS       |\n|  15 |         INDEX RANGE SCAN                  | DEPT_LOCATION_IX  |\n|  16 |       INDEX RANGE SCAN                    | EMP_DEPARTMENT_IX |\n|  17 |      TABLE ACCESS BY INDEX ROWID          | EMPLOYEES         |\n-----------------------------------------------------------------------\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">3 rows updated.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-----------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                                 | Name              |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-----------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   0 | UPDATE STATEMENT                          |                   |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   1 |  UPDATE                                   | EMPLOYEES         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   2 |   HASH JOIN SEMI                          |                   |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   3 |    TABLE ACCESS FULL                      | EMPLOYEES         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   4 |    VIEW                                   | VW_NSO_1          |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   5 |     NESTED LOOPS                          |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   6 |      NESTED LOOPS                         |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   7 |       NESTED LOOPS                        |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   8 |        NESTED LOOPS SEMI                  |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   9 |         VIEW                              | index$_join$_005  |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  10 |          HASH JOIN                        |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  11 |           INDEX FAST FULL SCAN            | LOC_COUNTRY_IX    |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  12 |           INDEX FAST FULL SCAN            | LOC_ID_PK         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  13 |         INDEX UNIQUE SCAN                 | COUNTRY_C_ID_PK   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  14 |        TABLE ACCESS BY INDEX ROWID BATCHED| DEPARTMENTS       |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|  15 |         INDEX RANGE SCAN                  | DEPT_LOCATION_IX  |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|  16 |       INDEX RANGE SCAN                    | EMP_DEPARTMENT_IX |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|  17 |      TABLE ACCESS BY INDEX ROWID          | EMPLOYEES         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">-----------------------------------------------------------------------<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">However, we can update an inline view. The Oracle database has supported this for a very long time (without a <code>BYPASS_UJVC<\/code> hint). There are some limitations, but otherwise, it works quite well. Here&#8217;s an example:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">4c) Update inline-view<\/span><span role=\"button\" tabindex=\"0\" data-code=\"update (\n          select e.*\n            from employees e\n            join departments d\n              on d.department_id = e.department_id\n            join locations l\n              on l.location_id = d.location_id\n            join countries c\n              on c.country_id = l.country_id\n           where c.country_name in ('Germany', 'Canada')\n       )\n   set salary = salary * 1.2;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">update<\/span><span style=\"color: #D4D4D4\"> (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">          <\/span><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> e.*<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> employees e<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> departments d<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> d.department_id = e.department_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> locations l<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> l.location_id = d.location_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">            <\/span><span style=\"color: #569CD6\">join<\/span><span style=\"color: #D4D4D4\"> countries <\/span><span style=\"color: #569CD6\">c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">              <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.country_id = l.country_id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">           <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">c<\/span><span style=\"color: #D4D4D4\">.country_name <\/span><span style=\"color: #569CD6\">in<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #CE9178\">&#39;Germany&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;Canada&#39;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       )<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> salary = salary * <\/span><span style=\"color: #B5CEA8\">1.2<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"3 rows updated.\n\n---------------------------------------------------------------------\n| Id  | Operation                               | Name              |\n---------------------------------------------------------------------\n|   0 | UPDATE STATEMENT                        |                   |\n|   1 |  UPDATE                                 | EMPLOYEES         |\n|   2 |   NESTED LOOPS                          |                   |\n|   3 |    NESTED LOOPS                         |                   |\n|   4 |     NESTED LOOPS                        |                   |\n|   5 |      INDEX FULL SCAN                    | COUNTRY_C_ID_PK   |\n|   6 |      TABLE ACCESS BY INDEX ROWID BATCHED| LOCATIONS         |\n|   7 |       INDEX RANGE SCAN                  | LOC_COUNTRY_IX    |\n|   8 |     TABLE ACCESS BY INDEX ROWID BATCHED | DEPARTMENTS       |\n|   9 |      INDEX RANGE SCAN                   | DEPT_LOCATION_IX  |\n|  10 |    INDEX RANGE SCAN                     | EMP_DEPARTMENT_IX |\n---------------------------------------------------------------------\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">3 rows updated.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">| Id  | Operation                               | Name              |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------------------------------------------------------------------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   0 | UPDATE STATEMENT                        |                   |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|   1 |  UPDATE                                 | EMPLOYEES         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   2 |   NESTED LOOPS                          |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   3 |    NESTED LOOPS                         |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   4 |     NESTED LOOPS                        |                   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   5 |      INDEX FULL SCAN                    | COUNTRY_C_ID_PK   |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   6 |      TABLE ACCESS BY INDEX ROWID BATCHED| LOCATIONS         |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   7 |       INDEX RANGE SCAN                  | LOC_COUNTRY_IX    |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   8 |     TABLE ACCESS BY INDEX ROWID BATCHED | DEPARTMENTS       |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">|   9 |      INDEX RANGE SCAN                   | DEPT_LOCATION_IX  |<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">|  10 |    INDEX RANGE SCAN                     | EMP_DEPARTMENT_IX |<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------------------------------------------------------------------<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The execution plan is similar to the variant with the <code>from_using_clause<\/code>. So, from a performance point of view, this is a good option. However, I like the <code>from_using_clause<\/code> variant better because it&#8217;s clearer which table is updated and which tables are just used for query purposes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">SQL UPDATE RETURN Clause Enhancements<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/UPDATE.html#GUID-027A462D-379D-4E35-8611-410F3AC8FDA5__I2126358\">returning_clause<\/a><\/code> has been extended. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"868\" height=\"208\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-2.png\" alt=\"returning_clause railroad diagram\" class=\"wp-image-13222\" style=\"width:464px\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-2.png 868w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-2-300x72.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-2-768x184.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-2-150x36.png 150w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-2-480x115.png 480w\" sizes=\"auto, (max-width:767px) 480px, (max-width:868px) 100vw, 868px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s now possible to explicitly return <code>old<\/code> and <code>new<\/code> values. The default depends on the operation. <code>new<\/code> in <code>insert<\/code>\/<code>update<\/code> and <code>old<\/code> in <code>delete<\/code> statements. I do not see a lot of value for <code>delete<\/code> and <code>insert<\/code> statements besides maybe making the statements more explicit and therefore easier to read. However, for the <code>update<\/code> statement, this new feature can be useful.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s a small SQL script showing the new returning clause in action for <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/INSERT.html#GUID-903F8043-0254-4EE9-ACC1-CB8AC0AF3423__I2122356\">insert<\/a><\/code>, <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/UPDATE.html#GUID-027A462D-379D-4E35-8611-410F3AC8FDA5__I2126358\">update<\/a><\/code> and <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/DELETE.html#GUID-156845A5-B626-412B-9F95-8869B988ABD7__I2122564\">delete<\/a><\/code>.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">5) New returning_clause in insert, update and delete<\/span><span role=\"button\" tabindex=\"0\" data-code=\"set serveroutput on\ndrop table if exists t;\ncreate table t (id integer, value integer);\n\ndeclare\n   l_old_value t.value%type;\n   l_new_value t.value%type;\nbegin\n   dbms_random.seed(16);\n\n   insert into t (id, value) \n   values (1, dbms_random.value(low =&gt; 1, high =&gt; 100))\n   return new value into l_new_value;\n   dbms_output.put_line('Insert: new value ' || l_new_value);\n\n   update t\n      set value = value * 2\n    where id = 1\n   return old value, new value into l_old_value, l_new_value;\n   dbms_output.put_line('Update: old value ' || l_old_value || ', new value ' || l_new_value);\n\n   delete t\n    where id = 1\n   return old value into l_old_value;\n   dbms_output.put_line('Delete: old value ' || l_old_value); \nend;\n\/\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> serveroutput <\/span><span style=\"color: #569CD6\">on<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> t;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> t (id <\/span><span style=\"color: #569CD6\">integer<\/span><span style=\"color: #D4D4D4\">, value <\/span><span style=\"color: #569CD6\">integer<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">declare<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #9CDCFE\">l_old_value<\/span><span style=\"color: #D4D4D4\"> t.value%<\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #9CDCFE\">l_new_value<\/span><span style=\"color: #D4D4D4\"> t.value%<\/span><span style=\"color: #569CD6\">type<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">begin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #DCDCAA\">dbms_random.<\/span><span style=\"color: #4EC9B0\">seed<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">16<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> t (id, value) <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #DCDCAA\">dbms_random.<\/span><span style=\"color: #4EC9B0\">value<\/span><span style=\"color: #D4D4D4\">(low =&gt; <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, high =&gt; <\/span><span style=\"color: #B5CEA8\">100<\/span><span style=\"color: #D4D4D4\">))<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> new value <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">l_new_value<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #DCDCAA\">dbms_output.<\/span><span style=\"color: #4EC9B0\">put_line<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;Insert: new value &#39;<\/span><span style=\"color: #D4D4D4\"> || <\/span><span style=\"color: #9CDCFE\">l_new_value<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">update<\/span><span style=\"color: #D4D4D4\"> t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> value = value * <\/span><span style=\"color: #B5CEA8\">2<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> id = <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> old value, new value <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">l_old_value<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #9CDCFE\">l_new_value<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #DCDCAA\">dbms_output.<\/span><span style=\"color: #4EC9B0\">put_line<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;Update: old value &#39;<\/span><span style=\"color: #D4D4D4\"> || <\/span><span style=\"color: #9CDCFE\">l_old_value<\/span><span style=\"color: #D4D4D4\"> || <\/span><span style=\"color: #CE9178\">&#39;, new value &#39;<\/span><span style=\"color: #D4D4D4\"> || <\/span><span style=\"color: #9CDCFE\">l_new_value<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">delete<\/span><span style=\"color: #D4D4D4\"> t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> id = <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> old value <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">l_old_value<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #DCDCAA\">dbms_output.<\/span><span style=\"color: #4EC9B0\">put_line<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&#39;Delete: old value &#39;<\/span><span style=\"color: #D4D4D4\"> || <\/span><span style=\"color: #9CDCFE\">l_old_value<\/span><span style=\"color: #D4D4D4\">); <\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">end<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\/<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"Table T dropped.\n\nTable T created.\n\nInsert: new value 21\nUpdate: old value 21, new value 42\nDelete: old value 42\n\nPL\/SQL procedure successfully completed.\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Table T dropped.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Table T created.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Insert: new value 21<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Update: old value 21, new value 42<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Delete: old value 42<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">PL\/SQL procedure successfully completed.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">DEFAULT ON NULL for UPDATE Statements<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/CREATE-TABLE.html#GUID-F9CE0CC3-13AE-4744-A43C-EAC7A71AAAB6__CEGEDHJE\">column_definition<\/a><\/code> clause in the <code>create table<\/code> statement has been extended.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"549\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-3-1024x549.png\" alt=\"column_definition clause railroad diagram\" class=\"wp-image-13229\" style=\"width:532px\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-3-1024x549.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-3-300x161.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-3-768x411.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-3-140x75.png 140w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-3-480x257.png 480w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-3.png 1064w\" sizes=\"auto, (max-width:767px) 480px, (max-width:1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Finally, it&#8217;s possible to enforce the <code>default on null<\/code> expression also for <code>update<\/code> and <code>merge<\/code> statements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The next SQL script demonstrates this.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">6) default on null for insert and update<\/span><span role=\"button\" tabindex=\"0\" data-code=\"drop table if exists t;\ncreate table t (\n   id    integer not null primary key,\n   value varchar2(10 char) default on null for insert and update 'my default'\n);\n\ninsert into t(id, value)\nvalues (1, 'value1'),\n       (2, null);\nselect * from t order by id;\n\nupdate t set value = case id\n                        when 1 then\n                           null\n                        when 2 then\n                           'value2'\n                     end;\nselect * from t order by id;\n\nmerge into t\nusing (values \n         (1, 'value3'),\n         (2, null),\n         (3, null)\n      ) s (id, value)\n   on (t.id = s.id)\n when matched then\n      update\n         set t.value = s.value\n when not matched then\n      insert (t.id, t.value)\n      values (s.id, s.value);\nselect * from t order by id;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> t;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> t (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   id    <\/span><span style=\"color: #569CD6\">integer<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">primary key<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   value <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">char<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">default<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">for<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">and<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">update<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #CE9178\">&#39;my default&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> t(id, value)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;value1&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">       (<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">order by<\/span><span style=\"color: #D4D4D4\"> id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">update<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> value = <\/span><span style=\"color: #C586C0\">case<\/span><span style=\"color: #D4D4D4\"> id<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #569CD6\">when<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">then<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">                           <\/span><span style=\"color: #569CD6\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                        <\/span><span style=\"color: #569CD6\">when<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                           <\/span><span style=\"color: #CE9178\">&#39;value2&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">                     <\/span><span style=\"color: #569CD6\">end<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">order by<\/span><span style=\"color: #D4D4D4\"> id;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">merge<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">using<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         (<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;value3&#39;<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         (<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         (<\/span><span style=\"color: #B5CEA8\">3<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      ) s (id, value)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">on<\/span><span style=\"color: #D4D4D4\"> (t.id = s.id)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">when<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">matched<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">update<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> t.value = s.value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">when<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">matched<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> (t.id, t.value)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      <\/span><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (s.id, s.value);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> t <\/span><span style=\"color: #569CD6\">order by<\/span><span style=\"color: #D4D4D4\"> id;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"Table T dropped.\n\nTable T created.\n\n2 rows inserted.\n\n        ID VALUE     \n---------- ----------\n         1 value1    \n         2 my default\n\n2 rows updated.\n\n        ID VALUE     \n---------- ----------\n         1 my default\n         2 value2    \n\n3 rows merged.\n\n        ID VALUE     \n---------- ----------\n         1 value3    \n         2 my default\n         3 my default\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Table T dropped.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Table T created.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">2 rows inserted.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ID VALUE     <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         1 value1    <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         2 my default<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">2 rows updated.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ID VALUE     <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ----------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         1 my default<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         2 value2    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">3 rows merged.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        ID VALUE     <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ----------<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">         1 value3    <\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         2 my default<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">         3 my default<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Lock-Free Reservation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The new <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/CREATE-TABLE.html#GUID-F9CE0CC3-13AE-4744-A43C-EAC7A71AAAB6__GUID-7F2337CB-EDAF-4C7C-B710-170A2EB7E75F\">datatype_domain<\/a><\/code> clause comes with a <code>reservable<\/code> keyword.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-4.png\"><img loading=\"lazy\" decoding=\"async\" width=\"792\" height=\"358\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-4.png\" alt=\"\" class=\"wp-image-13236\" style=\"width:396px\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-4.png 792w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-4-300x136.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-4-768x347.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-4-150x68.png 150w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/image-4-480x217.png 480w\" sizes=\"auto, (max-width:767px) 480px, (max-width:792px) 100vw, 792px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can update <code>reservable<\/code> columns without locking a row. As a result, updating such a column is possible from multiple sessions in a transactional way. However, only numeric columns can be declared as <code>reserveable<\/code>. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s make an example.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(2 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">7.1) Create and populate table with reservable column<\/span><span role=\"button\" tabindex=\"0\" data-code=\"drop table if exists e;\ncreate table e (\n   empno number(4,0)  not null primary key, \n   ename varchar2(10) not null,\n   sal   number(7,2)  reservable not null\n);\ninsert into e(empno, ename, sal)\nvalues (7788, 'SCOTT', 3000),\n       (7739, 'KING',  5000);\ncommit;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">drop<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">if<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">exists<\/span><span style=\"color: #D4D4D4\"> e;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">create<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">table<\/span><span style=\"color: #D4D4D4\"> e (<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   empno <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">4<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">)  <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">primary key<\/span><span style=\"color: #D4D4D4\">, <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">   ename <\/span><span style=\"color: #569CD6\">varchar2<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">10<\/span><span style=\"color: #D4D4D4\">) <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><span style=\"color: #D4D4D4\">,<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   sal   <\/span><span style=\"color: #569CD6\">number<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">7<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #B5CEA8\">2<\/span><span style=\"color: #D4D4D4\">)  reservable <\/span><span style=\"color: #569CD6\">not<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">null<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">insert<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">into<\/span><span style=\"color: #D4D4D4\"> e(empno, ename, sal)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">values<\/span><span style=\"color: #D4D4D4\"> (<\/span><span style=\"color: #B5CEA8\">7788<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;SCOTT&#39;<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #B5CEA8\">3000<\/span><span style=\"color: #D4D4D4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">       (<\/span><span style=\"color: #B5CEA8\">7739<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&#39;KING&#39;<\/span><span style=\"color: #D4D4D4\">,  <\/span><span style=\"color: #B5CEA8\">5000<\/span><span style=\"color: #D4D4D4\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #DCDCAA\">commit<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"Table E dropped.\n\nTable E created.\n\n2 rows inserted.\n\nCommit complete.\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Table E dropped.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Table E created.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">2 rows inserted.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">Commit complete.<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">After the setup, we run two database sessions in parallel.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">7.2) Session A &#8211; update sal of empno 7788<\/span><span role=\"button\" tabindex=\"0\" data-code=\"update e\n   set sal = sal + 100\n where empno = 7788;\n \nselect * from e;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">update<\/span><span style=\"color: #D4D4D4\"> e<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> sal = sal + <\/span><span style=\"color: #B5CEA8\">100<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> empno = <\/span><span style=\"color: #B5CEA8\">7788<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> e;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"1 row updated.\n\n     EMPNO ENAME             SAL\n---------- ---------- ----------\n      7788 SCOTT            3000\n      7739 KING             5000\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">1 row updated.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">     EMPNO ENAME             SAL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ---------- ----------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      7788 SCOTT            3000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      7739 KING             5000<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">7.3) Session B &#8211; update sal of empno 7788<\/span><span role=\"button\" tabindex=\"0\" data-code=\"update e\n   set sal = sal + 500\n where empno = 7788;\n \nselect * from e;\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">update<\/span><span style=\"color: #D4D4D4\"> e<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">   <\/span><span style=\"color: #569CD6\">set<\/span><span style=\"color: #D4D4D4\"> sal = sal + <\/span><span style=\"color: #B5CEA8\">500<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">where<\/span><span style=\"color: #D4D4D4\"> empno = <\/span><span style=\"color: #B5CEA8\">7788<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> e;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"1 row updated.\n\n     EMPNO ENAME             SAL\n---------- ---------- ----------\n      7788 SCOTT            3000\n      7739 KING             5000\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">1 row updated.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">     EMPNO ENAME             SAL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ---------- ----------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      7788 SCOTT            3000<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      7739 KING             5000<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ve updated the same record in two sessions. The transactions are pending and the changes are not yet visible in the target table. Let&#8217;s complete the pending transactions.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">7.4) Session A &#8211; commit changes<\/span><span role=\"button\" tabindex=\"0\" data-code=\"commit;\n\nselect * from e; \" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">commit<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> e; <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"Commit complete.\n\n     EMPNO ENAME             SAL\n---------- ---------- ----------\n      7788 SCOTT            3100\n      7739 KING             5000\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Commit complete.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">     EMPNO ENAME             SAL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ---------- ----------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      7788 SCOTT            3100<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      7739 KING             5000<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#D4D4D4;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#2b2b2b;color:#c7c7c7\">7.5) Session B &#8211; commit changes<\/span><span role=\"button\" tabindex=\"0\" data-code=\"commit;\n\nselect * from e; \" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #DCDCAA\">commit<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">select<\/span><span style=\"color: #D4D4D4\"> * <\/span><span style=\"color: #569CD6\">from<\/span><span style=\"color: #D4D4D4\"> e; <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * .875rem);--cbp-line-highlight-color:rgba(234, 191, 191, 0.2);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"Commit complete.\n\n     EMPNO ENAME             SAL\n---------- ---------- ----------\n      7788 SCOTT            3600\n      7739 KING             5000\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D4D4D4\">Commit complete.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\"><\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">     EMPNO ENAME             SAL<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">---------- ---------- ----------<\/span><\/span>\n<span class=\"line cbp-line-highlight\"><span style=\"color: #D4D4D4\">      7788 SCOTT            3600<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">      7739 KING             5000<\/span><\/span><\/code><\/pre><\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">After committing, the changes are visible in the target table. The changes from both sessions have been applied. Concurrent updates of the same row without locking. Pure magic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">How is that possible? Quite simple. Behind the scenes, the Oracle Database creates a reservation journal table named <code>SYS_RESERVJRNL_&lt;object_id_of_table&gt;<\/code> for every table with a <code>reservable<\/code> column. This table stores the pending changes per session and applies them on commit. You can query this table, to better understand the process.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See the <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/adfns\/using-lock-free-reservation.html#GUID-60D87F8F-AD9B-40A6-BB3C-193FFF0E60BB\">Database Development Guide<\/a> for more information about lock-free reservations.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">More New Features<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">More features are applicable in DML statements. For example, using <code><a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/sqlrf\/sys_row_etag.html#GUID-46D84F68-2E6E-40B9-81CD-2701E300E417\">sys_row_etag<\/a><\/code> for optimistic locking or when working with JSON-relational duality views. The <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/jsnvu\/overview-json-relational-duality-views.html#GUID-CE7227BF-B4AF-4024-A578-ED52795F4525\">JSON-Relational Duality Developer&#8217;s Guide<\/a> explains this new feature in detail. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For a complete list see <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/23\/nfcoa\/introduction-23.3.html#GUID-9D773861-5C48-4FD6-9A88-BAED8A82A7F7\">Oracle Database New Features<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Outlook<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For the next episode, the IslandSQL grammar will be extended to cover the PostgreSQL 16 grammar for the current statements in scope. This means all DML statements. I&#8217;m sure I will be able to show some interesting differences between the Oracle Database and PostgreSQL. Stay tuned.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction The IslandSQL grammar now covers all DML statements. This means call, delete, explain plan, insert, lock table, merge, select and update. In this episode, we will focus on new features in the Oracle Database 23c that can be used in insert, update, delete and merge statements. For the select statement see<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/p>\n","protected":false},"author":1,"featured_media":13235,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[139,86,137,140,85],"class_list":["post-13198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle","tag-antlr","tag-code-analysis","tag-islandsql","tag-oracle-26ai","tag-sql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>IslandSQL Episode 6: DML Statements in Oracle Database 23c - Philipp Salvisberg&#039;s Blog<\/title>\n<meta name=\"description\" content=\"In this episode, we will focus on new features in the Oracle Database 23c that can be used in DML statements. INSERT, UPDATE, DELETE &amp; MERGE.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"IslandSQL Episode 6: DML Statements in Oracle Database 23c - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"In this episode, we will focus on new features in the Oracle Database 23c that can be used in DML statements. INSERT, UPDATE, DELETE &amp; MERGE.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-30T00:17:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-17T09:06:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL6.png\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Philipp Salvisberg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:site\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Philipp Salvisberg\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/\"},\"author\":{\"name\":\"Philipp Salvisberg\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"headline\":\"IslandSQL Episode 6: DML Statements in Oracle Database 23c\",\"datePublished\":\"2024-01-30T00:17:39+00:00\",\"dateModified\":\"2024-06-17T09:06:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/\"},\"wordCount\":861,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/IslandSQL6.png\",\"keywords\":[\"ANTLR\",\"Code Analysis\",\"IslandSQL\",\"Oracle 26ai\",\"SQL\"],\"articleSection\":[\"Oracle\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/\",\"name\":\"IslandSQL Episode 6: DML Statements in Oracle Database 23c - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/IslandSQL6.png\",\"datePublished\":\"2024-01-30T00:17:39+00:00\",\"dateModified\":\"2024-06-17T09:06:22+00:00\",\"description\":\"In this episode, we will focus on new features in the Oracle Database 23c that can be used in DML statements. INSERT, UPDATE, DELETE & MERGE.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/IslandSQL6.png\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/01\\\/IslandSQL6.png\",\"width\":500,\"height\":500,\"caption\":\"IslandSQL Episode 6 - DML Statements in Oracle Database 23c\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/2024\\\/01\\\/30\\\/islandsql-episode-6-dml-statements-in-oracle-database-23c\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"IslandSQL Episode 6: DML Statements in Oracle Database 23c\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg&#039;s Blog\",\"description\":\"Database-centric development\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\",\"name\":\"Philipp Salvisberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"width\":400,\"height\":400,\"caption\":\"Philipp Salvisberg\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.salvis.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"IslandSQL Episode 6: DML Statements in Oracle Database 23c - Philipp Salvisberg&#039;s Blog","description":"In this episode, we will focus on new features in the Oracle Database 23c that can be used in DML statements. INSERT, UPDATE, DELETE & MERGE.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/","og_locale":"en_US","og_type":"article","og_title":"IslandSQL Episode 6: DML Statements in Oracle Database 23c - Philipp Salvisberg&#039;s Blog","og_description":"In this episode, we will focus on new features in the Oracle Database 23c that can be used in DML statements. INSERT, UPDATE, DELETE & MERGE.","og_url":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_published_time":"2024-01-30T00:17:39+00:00","article_modified_time":"2024-06-17T09:06:22+00:00","og_image":[{"width":500,"height":500,"url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL6.png","type":"image\/png"}],"author":"Philipp Salvisberg","twitter_card":"summary_large_image","twitter_creator":"@phsalvisberg","twitter_site":"@phsalvisberg","twitter_misc":{"Written by":"Philipp Salvisberg","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/#article","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/"},"author":{"name":"Philipp Salvisberg","@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"headline":"IslandSQL Episode 6: DML Statements in Oracle Database 23c","datePublished":"2024-01-30T00:17:39+00:00","dateModified":"2024-06-17T09:06:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/"},"wordCount":861,"commentCount":1,"publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL6.png","keywords":["ANTLR","Code Analysis","IslandSQL","Oracle 26ai","SQL"],"articleSection":["Oracle"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/","url":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/","name":"IslandSQL Episode 6: DML Statements in Oracle Database 23c - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/#primaryimage"},"image":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/#primaryimage"},"thumbnailUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL6.png","datePublished":"2024-01-30T00:17:39+00:00","dateModified":"2024-06-17T09:06:22+00:00","description":"In this episode, we will focus on new features in the Oracle Database 23c that can be used in DML statements. INSERT, UPDATE, DELETE & MERGE.","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/#primaryimage","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL6.png","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2024\/01\/IslandSQL6.png","width":500,"height":500,"caption":"IslandSQL Episode 6 - DML Statements in Oracle Database 23c"},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/2024\/01\/30\/islandsql-episode-6-dml-statements-in-oracle-database-23c\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"IslandSQL Episode 6: DML Statements in Oracle Database 23c"}]},{"@type":"WebSite","@id":"https:\/\/www.salvis.com\/blog\/#website","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg&#039;s Blog","description":"Database-centric development","publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.salvis.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515","name":"Philipp Salvisberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","width":400,"height":400,"caption":"Philipp Salvisberg"},"logo":{"@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg"},"sameAs":["http:\/\/www.salvis.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/13198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/comments?post=13198"}],"version-history":[{"count":41,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/13198\/revisions"}],"predecessor-version":[{"id":13427,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/posts\/13198\/revisions\/13427"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media\/13235"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=13198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/categories?post=13198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/tags?post=13198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}