Sign in

Philipp Salvisberg

@salvis.com
523 followers 157 following 195 posts

Focused on database-centric development. Chat is open. www.salvis.com/blog/about

PostsRepliesMedia
Reposted by Philipp Salvisberg
Jon Dixon @jon.cloudnueva.com · 17/09/2026
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...
blog.cloudnueva.com
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.
033
Philipp Salvisberg @salvis.com · 03/09/2026
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.
000
Philipp Salvisberg @salvis.com · 29/08/2026
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...
salvis.com
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 ...
031
Philipp Salvisberg @salvis.com · 23/08/2026
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...
salvis.com
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...
000
Reposted by Philipp Salvisberg
JimTheWhyGuy @jimthewhyguy.bsky.social · 20/08/2026
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/...
021
Philipp Salvisberg @salvis.com · 03/08/2026
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!
My Oracle ACE Program swag package contained the following items: a black laptop sleeve, a black pen, a white T-shirt, a black cap, a beige cotton bag, a steel mug and a black Ocean bottle.
151
Philipp Salvisberg @salvis.com · 25/07/2026
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...
salvis.com
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...
111
Reposted by Philipp Salvisberg
SQLDaily @sqldaily.bsky.social · 23/07/2026
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
buff.ly
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.
021
Reposted by Philipp Salvisberg
Christoph Lutz @christophlutz.bsky.social · 15/07/2026
Undocumented SYS_CONTEXT parameters: t.ly/822eR
t.ly
Undocumented SYS_CONTEXT Parameters
Undocumented SYS_CONTEXT Parameters
063
Reposted by Philipp Salvisberg
Philipp Hartenfeller @hartenfeller.dev · 14/07/2026
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...
hartenfeller.dev
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.
242
Philipp Salvisberg @salvis.com · 29/06/2026
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...
salvis.com
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...
041
Philipp Salvisberg @salvis.com · 21/06/2026
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.
IntelliJ IDEA showing development of an ANTLR4-based parser for APEXlang. The editor contains an APEXlang page definition, an ANTLR Preview window displays the corresponding parse tree, and the test runner shows 96 passing tests, including successful parsing of dbLinter APEX application files.
011
Philipp Salvisberg @salvis.com · 19/06/2026
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...
salvis.com
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...
011
Reposted by Philipp Salvisberg
Dani Schnider @danischnider.bsky.social · 18/05/2026
Last part of my blog series about Implementing Multi-Temporality with Data Vault danischnider.wordpress.com/2026/05/16/i...
danischnider.wordpress.com
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.
021
Reposted by Philipp Salvisberg
Monika Lewandowska @monikalewandowska.bsky.social · 12/05/2026
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-...
how2ora-en.blogspot.com
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...
053
Reposted by Philipp Salvisberg
Niall Litchfield @nlitchfield.bsky.social · 08/05/2026
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...
linkedin.com
075
Philipp Salvisberg @salvis.com · 01/05/2026
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.
joining emp to dept using join_to_one clause
262
Reposted by Philipp Salvisberg
Jasmin Fluri @jasminfluri.bsky.social · 21/04/2026
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
medium.com
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…
071
Reposted by Philipp Salvisberg
Kim Berg Hansen: SQL ♠ 🤓 👨‍🍳 🍺 @kibeha.dk · 22/04/2026
💯 percent truth! You >must< learn #SQL
021
Reposted by Philipp Salvisberg
Tim Hall @oraclebase.bsky.social · 13/04/2026
Growing void between enterprise and frontier AI puts open weights models in the spotlight www.theregister.com/2026/04/12/a... I keep saying this...
theregister.com
The AI divide putting open weights models in spotlight
FEATURE: Most customers don't need the biggest baddest models, just ones that work, are cheap, and won't pirate their proprietary data
052
Reposted by Philipp Salvisberg
Kamil Stawiarski @ora600pl.bsky.social · 09/04/2026
Beautiful! hackingpassion.com/gpubreach-at...
hackingpassion.com
GPUBreach Attack Gives Hackers a Root Shell on NVIDIA GPUs
Three research teams found it at the same time. NVIDIA GPUs with GDDR6 can be used to take full system control, bypassing IOMMU. No fix for consumer GPUs.
022
Reposted by Philipp Salvisberg
Toon Koppelaars @toonkoppelaars.bsky.social · 29/03/2026
youtube.com/watch?v=mD1g... My favorites: #10 and #1. But all are spot on.
youtube.com
10 Relational Database Mistakes, Ranked
YouTube video by Decomplexify
132
Reposted by Philipp Salvisberg
SQLDaily @sqldaily.bsky.social · 26/03/2026
Loops in hierarchical data are a pain Easy to add Hard to prevent @salvis.com shows Oracle AI Database 23.26.1 gives a simple solution Create an assertion limiting the maximum depth to N Do this by joining the hierarchy N+1 times in the assertion
buff.ly
Enforcing Acyclic Hierarchies With SQL Assertions - Philipp Salvisberg's Blog
Explore SQL Assertions in Oracle AI Database and learn how to enforce hierarchy integrity by detecting cycles with declarative constraints.
011
Reposted by Philipp Salvisberg
Philipp Hartenfeller @hartenfeller.dev · 25/03/2026
New blog post on how to use the color mix function to create new colors that are derived from the Universal Theme colors. #orclAPEX hartenfeller.dev/blog/apex-mi...
hartenfeller.dev
Mixing APEX Universal Theme Colors with the mix-color function
Lighten or darken APEX Universal Theme colors with the mix-color function to create custom colors for your APEX applications.
052
Reposted by Philipp Salvisberg
Chris Saxon @chrisrsaxon.bsky.social · 23/03/2026
Congrats to the winners of the #OracleACE assertions bounty! 1st Enforcing Acyclic Hierarchies With Assertions @salvis.com 2nd Temporal Assertions @anthony-harper.bsky.social 3rd Assertions for data integrity on a less-than-ideal data model @kibeha.dk Details at blogs.oracle.com/sql/assertio...
blogs.oracle.com
052
Reposted by Philipp Salvisberg
Markus Eisele @myfear.com · 16/03/2026
Your Java CLI runs locally. But can someone install it with one command? Here’s how to ship it properly: Maven → Fat JAR → JReleaser → GitHub Release → JBang install End-to-end tutorial: buff.ly/TaWDWkK #Java #DevTools #OpenSource #CLI
0115
Reposted by Philipp Salvisberg
Tanel Poder @tanelpoder.com · 13/03/2026
Reasons why SELECT * is bad for SQL performance: An old blog (with Oracle-specific examples) with a whole range of reasons why. It's not only about network traffic and SQL plan execution, but client side processing and memory usage as well. tanelpoder.com/posts/reason...
4215
Philipp Salvisberg @salvis.com · 11/03/2026
Started almost 10 minutes late due to projector issues. They were solved for the next session. Luckily most participants had their laptops ready so I could share my screen via an adhoc Teams conference. Was fun.
140
Reposted by Philipp Salvisberg
Martin Berger @martinberger.bsky.social · 11/03/2026
Great to see Mister #Oracle 26ai Autoupgrade @dohdatabase.com at the @soug.ch Swiss Oracle Group Meeting in #Switzerland #Bern // @salvis.com - it‘s all about community! @oracleace.bsky.social
1101
Philipp Salvisberg @salvis.com · 09/03/2026
How do you enforce temporal data integrity? With SQL Assertions in Oracle AI Database, we can now implement constraints such as: ✅ Non-overlapping validity periods ✅ Temporal referential integrity Here's a practical example using an extended DEPT-EMP model. www.salvis.com/blog/2026/03...
salvis.com
Using SQL Assertions to Enforce Temporal Data Integrity
Introduction More than twelve years ago, I described the multi-temporal features of Oracle Database in this blog post. In the conclusion, I wrote that I missed a temporal DML API, temporal integrity c...
053
Reposted by Philipp Salvisberg
Kim Berg Hansen: SQL ♠ 🤓 👨‍🍳 🍺 @kibeha.dk · 06/03/2026
Assertions for data integrity on a less-than-ideal data model. www.kibeha.dk/2026/03/asse... Or "How I could have used assertions 25 years ago when I worked with Concorde XAL"... #OrclDB #SQL #Assertions #OracleACE
kibeha.dk
Assertions for data integrity on a less-than-ideal data model
25-30 years ago I worked a lot with the Danish developed ERP system called Concorde XAL. It ran on top of a database (choice of several, mos...
275
Reposted by Philipp Salvisberg
Chris Saxon @chrisrsaxon.bsky.social · 27/02/2026
We're still looking for interesting assertions use cases Just over two weeks left for #OracleACE to get your entries in Bounty closes 15th March For full details read blogs.oracle.com/sql/assertio...
SQL statement:
select use_cases from assertions where creator = 'Oracle ACE'
order by real_world_applicability + complexity + novelty desc
fetch first 3 rows only
243
Philipp Salvisberg @salvis.com · 23/02/2026
Hierarchies should be trees and not loops. Learn how SQL Assertions in Oracle AI Database 23.26.1 can help prevent cycles in hierarchical data. www.salvis.com/blog/2026/02...
salvis.com
Enforcing Acyclic Hierarchies With SQL Assertions
Introduction Referential integrity constraints have been available since version 7 of the Oracle Database. While these constraints ensure that referenced rows exist, they cannot express more complex i...
083
Reposted by Philipp Salvisberg
Piet de Visser @pdevisser.bsky.social · 19/02/2026
SQL-Assertions... I could not resist experimenting. simpleoracledba.blogspot.com/2026/02/draf...
simpleoracledba.blogspot.com
Assertions used in arc-relationship
TL;DR: A simple use-case for SQL-Assertions: Adding a data-related constraint to an arc-relation. Demo using the Emp-Dept schema. Summary u...
083
Reposted by Philipp Salvisberg
Chris Saxon @chrisrsaxon.bsky.social · 19/02/2026
The recording for this session is now avaiable www.youtube.com/watch?v=ulLy...
youtube.com
What will fourth normal form fix in your database?
YouTube video by Oracle Developers
021
Reposted by Philipp Salvisberg
Andres Almiray @andresalmiray.com · 18/02/2026
Java CLIs in 2026: - scaffold with PicoCLI picocli.info - style with Tamboui tamboui.dev - launch with JBang www.jbang.dev - release with JReleaser jreleaser.org
0157
Reposted by Philipp Salvisberg
Chris Antognini @chris.antognini.ch · 14/02/2026
After a decade of planning, editing, delays due to my own busyness, further editing and waiting for 23c, the release of 26ai and my pre-retirement finally unblocked the situation. I have agreed with Apress to publish the third edition of Troubleshooting Oracle Performance in 2026. #TOP3
7335
Reposted by Philipp Salvisberg
Nicholas C. Zakas @humanwhocodes.com · 13/02/2026
Finally! Very excited that GitHub is now letting us have controls over who can open PRs on repos. github.blog/chan...
0172
Reposted by Philipp Salvisberg
Simon Späti 🏔️ @ssp.sh · 11/02/2026
I wrote part 2 about what I learned from eight months with Omarchy, especially after switching from macOS after 15 years. I documented which apps I use now on Linux compared to before. Maybe it helps someone here, too. www.ssp.sh/blog/linux-...
ssp.sh
Arch Linux (Omarchy) — 8 Months Later: The Good, the Bad, and the Fixable
After 15 years on macOS, I switched to Arch Linux with Omarchy. 8 months in, here's what replaced my Apple apps, which hardware I chose, and what actually broke — and how I fixed it.
491
Reposted by Philipp Salvisberg
Gerald Venzl @gvenzl.bsky.social · 07/02/2026
Another successful Saturday morning build... :) #Oracle #AI #Database #26ai #Free #Docker
071
Reposted by Philipp Salvisberg
Chris Saxon @chrisrsaxon.bsky.social · 05/02/2026
Preventing overlapping start-end dates in history tables is a common challenge Oracle AI Database gives you two ways to do this: Guarantee consecutive ranges with foreign keys Stop overlapping ranges with assertions Find out how in my latest post blogs.oracle.com/sql/how-to-s...
Examples of valid and invalid time periods when checking for overlapping ranges with respect to a reference period
161
Philipp Salvisberg @salvis.com · 03/02/2026
Playing with OracleDB assertions. Learning new error messages. ORA-08673: Equijoin "E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID" found does not meet the criteria to do a FAST validation. Good explanation on docs.oracle.com/en/error-hel...
docs.oracle.com
ORA-08673 - Database Error Messages
This page describes the ora-08673 Oracle Database Error Messages, also known as ora08673, ora-8673 or ora8673
111
Reposted by Philipp Salvisberg
Toon Koppelaars @toonkoppelaars.bsky.social · 27/01/2026
www.youtube.com/watch?v=dNvI...
youtube.com
Cross table constraints with SQL assertions
YouTube video by Oracle Developers
074
Reposted by Philipp Salvisberg
Philipp Hartenfeller @hartenfeller.dev · 21/01/2026
Rules always have exceptions. In this video I show how to use the --dblinter ignore directive to suppress rule violations for different scopes. youtu.be/5vWUv-jAM14 @united-codes.com #orclAPEX #oracle #plsql #dblinter
youtu.be
How to Suppress dbLinter Violations Using Inline Comments
YouTube video by United Codes
022
Reposted by Philipp Salvisberg
SQLDaily @sqldaily.bsky.social · 20/01/2026
Want to improve the quality of your Oracle #SQL and PL/SQL? @salvis.com has built the automatic rule checking suite, dbLinter This defines 187 rules you can apply to check your code Philipp has picked out 14 to always run Do you agree with his list? buff.ly/Nc5t1Qd
Screenshot of 14 essential rules in dbLinter
031
Philipp Salvisberg @salvis.com · 09/01/2026
I've updated my local APEX development environment to Oracle AI Database 26c. @hartenfeller.dev makes it easy! Thanks!
010
Reposted by Philipp Salvisberg
Nicholas C. Zakas @humanwhocodes.com · 06/01/2026
I did a lot of thinking about the npm supply chain attacks over my break. I wrote up my thoughts, along with some proposed solutions, in my latest post: humanwhocodes.co...
1101
Reposted by Philipp Salvisberg
Gerald Venzl @gvenzl.bsky.social · 06/01/2026
Timely for the 🎄 Christmas break, I've put together a more detailed 🛠️ "under the hood" post about extended VARCHARs (VARCHAR2 (32k)) and their often misunderstood 🔢 storage behavior.
geraldonit.com
Oracle Database 32k VARCHAR2 storage
Not too long ago, I responded to an email list regarding the storage of Oracle Database's extended VARCHAR2 data types, which allow you to store up to 32 KB of data. Because the LOB layer is used to store the data, it is often misunderstood that extended VARCHAR2s are nothing but tiny CLOBs and fall under the same semantic rules as&hellip;
072
Philipp Salvisberg @salvis.com · 02/01/2026
I see the dbLinter rules as a large buffet. You choose what you like and what is healthy. But not too much at once. In any case, some rules should be enforced in every project. Do you agree with my top 14? www.salvis.com/blog/2026/01...
salvis.com
Fighting Bad PL/SQL & SQL with VS Code
The success of a project or product depends largely on the quality of the code. But how can I improve security, maintainability or performance? More importantly, how can I prevent code with quality de...
020
Philipp Salvisberg @salvis.com · 31/12/2025
Closed a long-running action item from August 2023. The “Coming Soon” page on the Grisselbav website is gone. Replaced with real content. Meet the Grisselbav team virtually at www.grisselbav.com. Happy New Year!
grisselbav.com
Database Code Quality & Engineering Practices | Grisselbav
We help teams establish reliable and repeatable engineering practices around their databases, without unnecessary complexity.
160