Oracle Database 23ai (and 26ai) introduces table value constructors using the VALUES clause.
This lets you define inline row sets directly in SQL—no DUAL, no UNION ALL, no temporary tables.
You can use VALUES in SELECT, INSERT, UPDATE, MERGE, and WITH clauses.
Lets create some test table
The most simple way to generate data with constructor VALUE
In previous version it required a lot of UNION ALL
SELECT constructor_column1, constructor_column2
FROM (
SELECT
'tomasz10' AS constructor_column1,
17 AS constructor_column2
FROM dual UNION ALL
SELECT 'tomasz20', 22 FROM dual
);
INSERT example
One statement, many rows. Cleaner than INSERT ALL.
UPDATE example
Use VALUES as an inline collection—no PL/SQL types needed.
MERGE example
Perfect for small batch upserts and deployment scripts.
WITH example
Readable inline datasets—finally no SELECT ... FROM dual UNION ALL.
Have a fun 🙂
Tomasz