As the beta testing of the Oracle 23c database release starts in October. I noticed a Twitter thread by Philipp Salvisberg summarizing potential new features in 23c.

If you are interested in Oracle’s beta testing program – More info is here.

Based on Philipp’s thread I made a Linkedin post that got a fair amount of attention, so I thought I might as well turn it into a blog post.

23c is the next planned longterm release and hopefully, we will be able to use all these new features.

This is what caught my interest.

1. SCHEMA level priviliges – Ability to grant priviliges for objects in an entire schema.

GRANT SELECT ANY TABLE ON SCHEMA PROD TO HR;

2. SQL DOMAINS – Domain-specific knowledge can be abstracted into reusable objects.

3. Support up to 4096 columns

4. JSON schema – Validate JSON documents on storage/query and reports.

5. BOOLEAN data type

CREATE TABLE emails(address VARCHAR2(1000), active BOOLEAN)

6. Update via JOIN

UPDATE emp e SET e.salary=e.salary*2
FROM dept d
WHERE e.dept_id = d.dept_id
AND d.name = 'Development';

7. JavaScript Stored Procedures – Store and execute JavaScript inside the database

CREATE MLE MODULE jsmodule LANGUAGE JAVASCRIPT AS...

8. IF[NOT]EXISTS – Control DDL error condition

CREATE TABLE IF NOT EXISTS tests123(id NUMBER);
DROP TABLE IF EXISTS test123;

9. GROUP BY column alias/position.

10. Table Value Constructor accordning to ISO SQL Standard – Generate multiple rows at once.

11. Better RETURNING clause – Return values for update & merge. – Return old and new values.

12. Developer ROLE – Easily give developers what they need.
exec DBMS_DEVELOPER_ADMIN.GRANT_PRIVS(Dev_schema);

13. SELECT without FROM – Goodbye DUAL
SELECT SYSDATE;

14. Annotations – Provide metadata for your data and datamodel.

My two favorites are:

#7 JavaScript Stored Procedures.

Thou already in 21c, but now with simplified syntax. No need for creating context etc. With this in place I hope that I will be able to consolidate all my APEX javascript into stored procedures within the database.

#9 GROUP BY column alias/position.

Group by an column expression using an alias. That will simplify extensively!

Over & Out