Philipp Salvisberg
banner
salvis.com
Philipp Salvisberg
@salvis.com
Focused on database-centric development. Chat is open.
https://www.salvis.com/blog/about
When writing a formatter, you must handle edge cases. Sometimes there's no good solution. For example:

select 'a' | /* comment */ | 'b';

The comment is clearly misplaced, but a formatter should only change whitespace between tokens. So I leave it as is.

BTW: works in OracleDB, not in PostgreSQL.
October 31, 2026 at 10:41 AM
Reposted by Philipp Salvisberg
blogs.oracle.com
October 22, 2026 at 3:26 PM
Reposted by Philipp Salvisberg
You can't pass parameters to views

But with macros in Oracle AI Database you can create view-like objects that do have parameters

These received a big upgrade in 23.26.4 with macro objects:

CREATE MACRO ... IS SELECT ...

@chrisrsaxon.bsky.social shows how buff.ly/9U00Fuy
How to create views with parameters in Oracle AI Database
buff.ly
October 21, 2026 at 11:00 AM
The docs for RU 23.26.4 of the Oracle AI Database is now available: docs.oracle.com/en/database/...

Again tons of changes, including some small neat features such as (ASCII) bar_chart:
October 20, 2026 at 7:23 PM
Joel Kallman's talk at APEX World 2019 stayed with me. For #JoelKallmanDay, I reflect on that memory, AI and what makes our work our own.

www.salvis.com/blog/2026/10...
Some Thoughts About Joel and AI #JoelKallmanDay
Where I Saw Joel for the First Time I remember Joel Kallman’s talk on the boat at APEX World 2019 in Rotterdam very well. I was sitting in the front row on the right, about two metres away from Joel, ...
www.salvis.com
October 14, 2026 at 2:19 AM
Started a new experiment at tweet.app.
October 13, 2026 at 9:40 AM
Reposted by Philipp Salvisberg
If you use uc-local-apex-dev you need one command to get to #orclAPEX 26.2: local-26ai.sh upgrade-apex (takes a few mins but runs without you having to do anything).

Run local-26ai.sh shrink-space to remove 26.1 after you validated everything works fine.
October 6, 2026 at 2:11 PM
Reposted by Philipp Salvisberg
I tested three models across 69 user turns in an APEX AI Agent. My latest post compares cost, correctness, and tool use; and explains why growing context matters when estimating agent costs. #orclAPEX #AIAgents
blog.cloudnueva.com/apex-ai-agen...
APEX AI Agents: Comparing Cost, Quality, and Models
Results from 69 Oracle APEX AI Agent turns comparing three models, token costs, tool use, and correctness, with practical design lessons.
blog.cloudnueva.com
September 17, 2026 at 12:06 PM
TIL that the ChatGPT app on macOS has a pet. And it is activated by Ctrl-Space... 😱. If you still work with IDEs like I do, you might want to show the pet where it belongs.
September 3, 2026 at 5:37 AM
Oracle AI Database makes outer joins the default in Join-to-One because inner joins may filter rows unintentionally.

Here is why I think the join type should be explicit.

www.salvis.com/blog/2026/08...
Implicit Outer Joins in Join-to-One: Feature or Flaw?
Background As you probably know, I’m maintaining a parser for grammars used in SQL files for Oracle AI Database and PostgreSQL. As a result, I check for new statements and clauses in every version of ...
www.salvis.com
August 29, 2026 at 8:19 AM
The new #dbLinter "Allow Insecure TLS" setting helps when corporate TLS inspection is difficult to bypass. But what are the risks?
A mitmproxy experiment shows what the proxy can and cannot see.
www.salvis.com/blog/2026/08...
The Checkbox That Disables TLS
Introduction The dbLinter clients include a new setting named Allow Insecure TLS. It is disabled by default. As a result, all REST API calls verify the TLS certificate and hostname. The setting allows...
www.salvis.com
August 23, 2026 at 9:34 PM
Reposted by Philipp Salvisberg
It's finally here! The folks at Redgate Simple Talk have published Part 1 of my article series on how to implement Oracle 26ai Deep Data Security (DeepSec for short). Have a look at this intriguing new feature set. More to come soon! www.red-gate.com/simple-talk/...
August 20, 2026 at 5:10 PM
After returning from a lovely, relaxing weekend in the Black Forest, I found a few Oracle ACE Program swag waiting for me at a DHL collection point. Thank you so much, @oracleace.bsky.social!
August 3, 2026 at 7:45 AM
Remember SQLcl’s SCRIPT command?
Why did it disappear from modern environments, and how can we bring it back? Both in standalone SQLcl and in the SQLcl embedded in SQL Developer for VS Code?
www.salvis.com/blog/2026/07...
The Return of SQLcl’s SCRIPT Command
Introduction The script command was introduced with SQLcl 4.2. It is based on JSR 223, the Java Scripting API, and makes it possible to run JavaScript from SQLcl. This adds client-side control flow, f...
www.salvis.com
July 25, 2026 at 2:15 PM
Reposted by Philipp Salvisberg
You can use assertions in Oracle AI Database to enforce temporal data integrity

@salvis.com shows how to use these to:

Prohibit overlapping periods
Define temporal foreign keys => the parent row must be valid while the child is valid
Using SQL Assertions to Enforce Temporal Data Integrity - Philipp Salvisberg's Blog
Learn how SQL assertions enforce temporal integrity in Oracle AI Database by preventing overlaps and detecting gaps in temporal relationships.
buff.ly
July 23, 2026 at 11:01 AM
Reposted by Philipp Salvisberg
Undocumented SYS_CONTEXT parameters:

t.ly/822eR
Undocumented SYS_CONTEXT Parameters
Undocumented SYS_CONTEXT Parameters
t.ly
July 15, 2026 at 10:09 AM
Reposted by Philipp Salvisberg
Coding agents write a lot of PL/SQL, but is it good PL/SQL?

I wrote up how I hand #dbLinter 's CLI to Claude Code and make a clean lint report part of "done".

Stay in control in the age of AI-generated code. 👇 #orclAPEX

hartenfeller.dev/blog/dblinte...
Letting Coding Agents Lint Their Own PL/SQL with dbLinter
Coding agents write plenty of PL/SQL, but they need a feedback loop to write it well. Here's how to hand dbLinter to Coding Agents and teach it to check its own work.
hartenfeller.dev
July 14, 2026 at 10:57 AM
Oracle provides an APEXlang compiler, but not a public parser for building custom tooling. Grisselbav’s APEXlang Parser fills that gap.

In this blog post, I show how it enables static code analysis by detecting a security vulnerability in an Oracle APEX app.

www.salvis.com/blog/2026/06...
Detecting Security Vulnerabilities With the APEXlang Parser
Introduction A parser for the APEXlang grammar enables the development of tools beyond the scope of the APEXlang compiler included in SQLcl, SQL Developer for VS Code, and ORDS. These tools can perfor...
www.salvis.com
June 29, 2026 at 12:23 PM
Making progress with APEXlang support. The ANTLR4-based grammar can now parse the dbLinter APEX app without errors. Next step: more tests and integration into dbLinter’s language server.
June 21, 2026 at 3:12 PM
Can syntax diagrams be generated from the APEXlang EBNF grammar? Yes!

This post shows the conversion to W3C EBNF, the tooling used, and the resulting railroad diagrams.

www.salvis.com/blog/2026/06...
Syntax Diagrams for APEXlang
Introduction The APEXlang API Reference documentation went live a few days ago. You can also download the APEXlang EBNF grammar. In this post, Kris Rice explains the value of having an EBNF. Since the...
www.salvis.com
June 19, 2026 at 2:30 PM
Reposted by Philipp Salvisberg
Last part of my blog series about Implementing Multi-Temporality with Data Vault

danischnider.wordpress.com/2026/05/16/i...
Implementing Multi-Temporality with Data Vault (Part 3)
In the last part of this blog series, we will look at how to load Slowly Changing Dimension (type SCD1 and SCD2) from the Current Views we created in our multi-temporal Data Vault schema.
danischnider.wordpress.com
May 18, 2026 at 7:44 AM
Reposted by Philipp Salvisberg
New PWOW webinar on Unit Testing & code REUSE is coming!
To celebrate, we have a special treat: an exclusive interview with Jacek Gębal, the driving force behind modern utPLSQL (originally founded by Steven Feuerstein). Trade "hope-it-works" for automation! 👇
how2ora-en.blogspot.com/2026/05/who-...
Who Shook Up the World of PL/SQL Testing? A Conversation with Jacek Gębal
A new PWOW webinar is approaching, focusing on a topic often—unfairly—neglected: Unit Testing . 🧪 The key to success isn't just wri...
how2ora-en.blogspot.com
May 12, 2026 at 1:10 PM
Reposted by Philipp Salvisberg
A marvellous LinkedIn post (no really) from a colleague of mine on one of the promises of AI. Those of you who know my sense of humour, or have ever engaged with the old Oak Table folks, will probably appreciate it. www.linkedin.com/pulse/2-mill...
www.linkedin.com
May 8, 2026 at 12:46 PM
The new features guide for Oracle AI Database 23.26.2 is out:
docs.oracle.com/en/database/...

One interesting addition is the join_to_one clause, which uses integrity constraints to simplify joins.
May 1, 2026 at 9:50 PM
Reposted by Philipp Salvisberg
When integrating systems, we often talk about anti-corruption layers in application code. But what about the database layer?

medium.com/@jasminfluri...
@oracleace.bsky.social
What is an Anti-Corruption Layer in the Database and When Do You Need It?
Without an Anti-Corruption-Layer (ACL), direct database table access leads to tight coupling, increased risk of breakage on schema changes…
medium.com
April 21, 2026 at 7:48 AM