Skip to content
Keep Learning Keep Living
Keep Learning Keep Living
Keep Learning Keep Living

2 of Most Practical New Features on 23.9

Mustafa, 2025-08-09

Hi,

with 23.9 I saw 2 beautiful enhancement in SQL. These are not “exceptional” things but their practical usage is a lot to me as a both developer and dba. 23.9 is already available on cloud base database systems.

First, INSERT SET is here! one of my biggest complains in plsql objects was huge insert statements. problem is it is a torture sometimes if you have 50 columns with 50 values from different variables. Your end version of sql is like:

1
2
3
4
Insert into TMP_O
  (OWNER,OBJECT_NAME,SUBOBJECT_NAME,OBJECT_ID,DATA_OBJECT_ID,OBJECT_TYPE,CREATED,LAST_DDL_TIME,TIMESTAMP,STATUS,TEMPORARY,GENERATED,SECONDARY,NAMESPACE,EDITION_NAME,SHARING,EDITIONABLE,ORACLE_MAINTAINED,APPLICATION,DEFAULT_COLLATION,DUPLICATED,SHARDED,CREATED_APPID,CREATED_VSNID,MODIFIED_APPID,MODIFIED_VSNID)
  values
  ('SYS','TS$',null,16,6,'TABLE',to_date('2019-04-17 00:56:11','YYYY-MM-DD HH24:MI:SS'),to_date('2019-04-17 01:46:57','YYYY-MM-DD HH24:MI:SS'),'2019-04-17:00:56:11','VALID','N','N','N',1,null,'METADATA LINK',null,'Y','N','USING_NLS_COMP','N','N',null,null,null,null);

so there is a value in this insert statement “‘METADATA LINK'” so into which column it will be inserted? you need to count the orders and find it. if you count it wrong (which is quite possible) then you will be spending so much times.

Overcome this issue insert set can be used and it is so easy to use.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Insert into TMP_O set
OWNER                = 'SYS',
OBJECT_NAME          = 'TS$',
SUBOBJECT_NAME       = null,
OBJECT_ID            = 16,
DATA_OBJECT_ID       = 6,
OBJECT_TYPE          = 'TABLE',
CREATED              = to_date('2019-04-17 00:56:11','YYYY-MM-DD HH24:MI:SS'),
LAST_DDL_TIME        = to_date('2019-04-17 01:46:57','YYYY-MM-DD HH24:MI:SS'),
TIMESTAMP            = '2019-04-17:00:56:11',
STATUS               = 'VALID',
TEMPORARY            = 'N',
GENERATED            = 'N',
SECONDARY            = 'N',
NAMESPACE            = 1,
EDITION_NAME         = null,
SHARING              = 'METADATA LINK',
EDITIONABLE          = null,
ORACLE_MAINTAINED    = 'Y',
APPLICATION          = 'N',
DEFAULT_COLLATION    = 'USING_NLS_COMP',
DUPLICATED           = 'N',
SHARDED              = 'N',
CREATED_APPID        = null,
CREATED_VSNID        = null,
MODIFIED_APPID       = null,
MODIFIED_VSNID       = null ;

it is so practical. just like an update statement and now we know easily which value is going into which columns.

Second is “GROUP BY ANY” statement. again this is not a performance enhancement etc but it is an easy development for developers. you don’t have write all the columns in the select list into group by clause one by one. instead, you can just type ALL. if you are using large number of columns or big expressions like case when etc, copy and paste all of them into group by is just making your sql bigger and bigger.

1
2
3
4
5
6
7
8
select owner, object_type,
       case
         when object_type in ('TABLE', 'INDEX') then 'data segment' -- I know there are more data segments :)
         else 'other object'
       end object_kind,
       count(*)
from   dba_objects
group by all;

that is it. I don’t have copy owner, object_type and case statement into group by anymore. So, there are 2 more reasons to upgrade 23 ai and patch to 23.9

Wish you healthy, happy days.

 

23ai Administration Development SQL / PLSQL 23.923aigroup by allinsert into setinsert setnew features

Post navigation

Previous post
Next post

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Using MFA While Logging into the Oracle Database
  • 2 of Most Practical New Features on 23.9
  • Milliseconds are lost after date to tz conversion on 19c
  • DDL Generation Failed with ORA-65047: Object SYS.KUPUTIL is invalid
  • How to call HTTPS Url Without SSL Wallet in 19c
  • Is Table Unnecessary for Pipelined Function
  • Password Rollover Time in Seconds
  • PDB Syncronization Issue

Recent Comments

  • Mustafa on How to call HTTPS Url Without SSL Wallet in 19c
  • Накрутка авито on How to call HTTPS Url Without SSL Wallet in 19c
  • Mustafa on Cloud Base Database Service
  • Raja on Cloud Base Database Service
  • Mustafa on Refreshable PDB and ORA-17627: ORA-12578: TNS:wallet open failed

Categories

  • 11g
  • 12c
  • 18c
  • 19c
  • 21c
  • 23ai
  • Administration
  • Cloud
  • Compression
  • Development
  • Materialized View
  • Multi-tenant
  • Performance
  • Security
  • SQL / PLSQL
  • Uncategorized
  • Undocumented
  • Useful Scripts

Archives

  • August 2025
  • July 2025
  • June 2025
  • April 2025
  • November 2024
  • July 2024
  • April 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • October 2021
  • September 2021
  • August 2021
  • April 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • July 2019
  • June 2019
  • May 2019
  • March 2019
  • February 2019
  • June 2018

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

RSS Follow This Blog

  • Using MFA While Logging into the Oracle Database
  • 2 of Most Practical New Features on 23.9
  • Milliseconds are lost after date to tz conversion on 19c
  • DDL Generation Failed with ORA-65047: Object SYS.KUPUTIL is invalid
  • How to call HTTPS Url Without SSL Wallet in 19c
  • Is Table Unnecessary for Pipelined Function
  • Password Rollover Time in Seconds
  • PDB Syncronization Issue
  • How to limit DB Link Connection Timeout
  • Cloud Base Database Service

Archives

  • August 2025
  • July 2025
  • June 2025
  • April 2025
  • November 2024
  • July 2024
  • April 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • May 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • July 2022
  • June 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • October 2021
  • September 2021
  • August 2021
  • April 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • July 2019
  • June 2019
  • May 2019
  • March 2019
  • February 2019
  • June 2018

RSS Follow This Blog

  • Using MFA While Logging into the Oracle Database
  • 2 of Most Practical New Features on 23.9
  • Milliseconds are lost after date to tz conversion on 19c
  • DDL Generation Failed with ORA-65047: Object SYS.KUPUTIL is invalid
  • How to call HTTPS Url Without SSL Wallet in 19c
  • Is Table Unnecessary for Pipelined Function
  • Password Rollover Time in Seconds
  • PDB Syncronization Issue
  • How to limit DB Link Connection Timeout
  • Cloud Base Database Service
RSS Error: A feed could not be found at `http://www.mywebsite.com/feed/`; the status code is `406` and content-type is `text/html`
©2025 Keep Learning Keep Living | WordPress Theme by SuperbThemes