|  | 2025-06-20 Friday | SQL: JSON_TRANSFORM
With JSON_TRANSFORM you can apply a series of transformation operations, step by step changing pieces of the JSON into what you want, without touching other parts of the JSON. Author: Kim Berg Hansen [58734-10679290] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-06-13 Friday | SQL: Windowing clause
Oracle Database 21c added the window clause. This enables you to define named windows you can use in the over clause of analytic functions. Author: Chris Saxon [58694-10675071] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-06-06 Friday | Oracle PL/SQL: UTL_CALL_STACK
UTIL_CALL_STACK provides an interface for the call stack, backtrace stack and error stack for Pl/SQL program execution. It is important to understand the difference between the call stack dynamic depth, the error stack error_depth and the backtrace backtrace_depth when looking for the original source of an error using UTL_CALL_STACK. Author: Anthony Harper [58594-10675793] | Weekly DB | No New Comments
Last: 2025-05-31 18:12:13 | - |
|  | 2025-05-30 Friday | Oracle PL/SQL: FOR Loop Iterator
From 21c, the FOR loop allows you to specify an iterand as MUTABLE, meaning you can change it's value inside the loop. That gives you very detailed control of how the iterand is incremented, but at the same time opening up for potentially very convoluted logic, so be careful. Author: Kim Berg Hansen [58674-10674085] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-05-23 Friday | Oracle PL/SQL: SQL Macros
You can pass column identifiers to table SQL macros using the columns pseudo operator. For example: select * from <macro_name> ( columns ( <co1>, <col2>, … ) );
The dbms_tf.columns_t parameter is an array starting at one. Author: Chris Saxon [58614-10673376] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-05-16 Friday | SQL: JSON_TABLE
JSON_TABLE or NESTED can both be used to project rows from json arrays. Author: Anthony Harper [58474-10664851] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-05-09 Friday | SQL: UPDATE Statement
From version 23ai, you can use the FROM/USING clause to limit rows and/or provide source data from one or more other tables in an UPDATE statement. Author: Kim Berg Hansen [58574-10670065] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-05-02 Friday | SQL: Windowing clause
Oracle Database 21c added the groups frame for window functions. This includes rows based on the number of unique values for the sort columns. Author: Chris Saxon [58494-10666751] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-04-25 Friday | Oracle PL/SQL: SQL Transpiler
Oracle 23ai introduced the SQL Transpiler, allowing simple PL/SQL functions to be converted to their SQL equivalents. The transpiled function then runs as pure SQL instead of executing in the PL/SQL engine. This reduces the context switching overhead of calling user defined functions from SQL as long as the Transpiler restrictions are met by the function. Author: Anthony Harper [58374-10663330] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-04-18 Friday | SQL: MINUS / EXCEPT Operator
Oracle Database 21c add the all clause to the set operators minus and intersect . It also added the ISO standard except as a synonym for minus . With the all clause, includes extra rows from the first table with the same values in the second Author: Chris Saxon [58534-10667063] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-04-11 Friday | SQL: INSERT Statement
Oracle Database 23ai added enumeration (enum) domains. When you associate an enum with a column, the database adds a constraint that only allows you to add values from the enum. You can insert the values themselves or referencing the associated enum names. Author: Chris Saxon [58414-10665334] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-04-04 Friday | Oracle PL/SQL: Iteration Controls
Loop iteration control enhancements introduced in Oracle 21c allow for more complex logic than simply stepping though a range of numbers. Author: Anthony Harper [58434-10663329] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-03-28 Friday | Oracle PL/SQL: TO_CHAR(boolean)
Using TO_CHAR or CAST to convert a BOOLEAN to a string can only result in the values TRUE and FALSE, there are no format model options to choose different ways of converting. Author: Kim Berg Hansen [58454-10663794] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-03-21 Friday | Oracle PL/SQL: Qualified Expressions for Associative Arrays
From Oracle Database 21c you can initialize arrays using cursors in qualified expressions (type constructors). You can assign columns from the cursor to the indices of the array. Author: Chris Saxon [58234-10659051] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-03-14 Friday | Oracle PL/SQL: Iteration Controls
In 21c, the values of and pairs of iteration controls were added to allow iterating a collection by a value iterand. The value iterand is not a reference to the collection that is used by the iteration control to generate the sequence of iterands. Modifications of the value iterand are not reflected in the collection object. Author: Anthony Harper [58134-10658720] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-03-07 Friday | Oracle PL/SQL: is_Date
The is_Date member function of JSON_ELEMENT_T only returns true if the JSON was constructed manually by PUT'ting a DATE datatype into the JSON. If the JSON_ELEMENT_T stems from parsing a JSON string, then is_Date returns false even if the element has a value that matches the ISO 8601 date formatting. Author: Kim Berg Hansen [58094-10656751] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-02-28 Friday | Database Design: Query Rewrite
From Oracle Database 23ai, the Oracle optimizer can rewrite a join query to use any equivalent materialized view. This can happen regardless of whether the syntax uses Oracle or ISO style joins. Author: Chris Saxon [58074-10656708] | Weekly DB | No New Comments
Last: 2025-03-03 09:07:54 | - |
|  | 2025-02-21 Friday | SQL: JSON_TRANSFORM
Using JSON_TRANSFORM Set Operations introduced in Oracle 23ai create arrays where the array order is indeterminate. The SORT operation has to be used to create a determinate array order. Author: Anthony Harper [57954-10654371] | Weekly DB | No New Comments
Last: 2025-02-19 20:42:58 | - |
|  | 2025-02-14 Friday | SQL: ROUND (interval)
In version 23ai, you can ROUND interval datatypes - before that you would have to transform the interval to something numeric and round the number instead. Author: Kim Berg Hansen [58014-10653745] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-02-07 Friday | SQL: Data Quality Operators
There are many options for finding similar strings in Oracle Database: - The
soundex function - Functions in the
utl_match package - The
fuzzy_match operator (added in Oracle Database 23ai) - The
phonic_encode operator (added in Oracle Database 23ai)
Author: Chris Saxon [58034-10653969] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-02-06 Thursday | Oracle PL/SQL: Scalar Macros
The SQL Transpiler can in some cases automatically do what you yourself would have had to use a scalar SQL macro to do, namely eliminate PL/SQL function calls by injecting the equivalent SQL expression into the query, thereby removing the need for context switching between SQL and PL/SQL engine. Author: Kim Berg Hansen [57994-10653553] | Oracle Database Annual Championship | No Comments Last: No Comments | - |
|  | 2025-02-06 Thursday | Oracle PL/SQL: JSON_TYPE operator
In 23ai the PL/SQL JSON_VALUE operator returning clause can now accept a PL/SQL aggregate type name. Author: Anthony Harper [57814-10650676] | Oracle Database Annual Championship | No Comments Last: No Comments | - |
|  | 2025-02-06 Thursday | SQL: JSON Flex Columns
JSON Flex Columns allows a duality view to accept JSON documents containing attributes that do not map to relational columns and store those unknown attributes as JSON in a single JSON column in the relational table, providing a lot of flexibility for the application developers. Author: Kim Berg Hansen [57934-10653089] | Oracle Database Annual Championship | No Comments Last: No Comments | - |
|  | 2025-02-06 Thursday | Oracle PL/SQL: RETURNING OLD and NEW Column Values
Oracle 23ai adds support for returning OLD and NEW values from UPDATE DML and from MERGE statements. Author: Anthony Harper [57834-10653498] | Oracle Database Annual Championship | No New Comments
Last: 2025-02-09 16:14:04 | - |
|  | 2025-02-06 Thursday | SQL: Domain DDL
Added in Oracle Database 23ai, flexible domains enable you to define subtype/subtype relationships for values. The flexible domain is the supertype. This has a discriminant column in the choose domain using clause. You use this column in a decode or case expression to choose which subdomain to use based on the column's values. Author: Chris Saxon [57914-10653535] | Oracle Database Annual Championship | No Comments Last: No Comments | - |
|  | 2025-02-06 Thursday | SQL: UPDATE Statement
You can only change rows once in update and merge statements; attempting to change a row many times in one execution raises an error. If you need to get values from many rows to set a column in one row, use a subquery to aggregate the rows from the source table. Author: Chris Saxon [57974-10653534] | Oracle Database Annual Championship | No Comments Last: No Comments | - |
|  | 2025-01-31 Friday | Oracle PL/SQL: SYSDATE
The FIXED_DATE system option can be set during the execution of testing code to return repeatable results when the code being tested uses SYSDATE. Author: Anthony Harper [51050-10651083] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-01-24 Friday | SQL: Boolean Datatype
In a column of datatype BOOLEAN you can insert many different expressions that in one form or other implicitly convert to boolean. Author: Kim Berg Hansen [57894-10651206] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-01-17 Friday | SQL: INSERT Statement
Oracle Database 23ai added table values constructors. This enables you to add many rows in a single insert by providing them as a comma-separated list. When inserting many rows in one statement, each row must have the same number of values. If values are unknown for some rows and you want them to use the column's default, use the default keyword for that value. Author: Chris Saxon [57854-10650712] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-01-10 Friday | SQL: Domain Functions
ENUM domains introduced in 23ai support the use of multiple aliases for each enum value. Author: Anthony Harper [57754-10649104] | Weekly DB | No Comments Last: No Comments | - |
|  | 2025-01-03 Friday | Oracle PL/SQL: Scalar Macros
Scalar macros are not simply a matter of text substitution, they need to represent scalar expressions, so you cannot use aggregate functions in the SQL text returned by a scalar macro. Author: Kim Berg Hansen [57774-10649035] | Weekly DB | No New Comments
Last: 2025-01-20 15:58:57 | - |