{"id":7456,"date":"2017-02-19T10:44:12","date_gmt":"2017-02-19T09:44:12","guid":{"rendered":"https:\/\/www.salvis.com\/blog\/?page_id=7456"},"modified":"2025-04-04T12:52:40","modified_gmt":"2025-04-04T10:52:40","slug":"home-2","status":"publish","type":"page","link":"https:\/\/www.salvis.com\/blog\/","title":{"rendered":"Philipp Salvisberg&#8217;s Blog"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">Philipp Salvisberg&#8217;s Blog<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Database-centric development<\/p>\n\n\n<div class=\"column_filters\"><div class=\"blog_wrapper isotope_wrapper clearfix\"><div class=\"posts_group lm_wrapper element_classes col-2 classic\"><article class=\"post post-item isotope-item clearfix category-5 post-21049 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-javascript tag-sql-developer tag-sqlcl\" style=\"\"><div class=\"date_label\">2026-07-25<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/07\/25\/the-return-of-sqlcls-script-command\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/07\/sqlcl-script-command-featured-concept-3-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/07\/sqlcl-script-command-featured-concept-3-1024x538.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2026\/07\/25\/the-return-of-sqlcls-script-command\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2026-07-25<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/07\/25\/the-return-of-sqlcls-script-command\/\">The Return of SQLcl&#8217;s SCRIPT Command<\/a><\/h2><\/div><div class=\"post-excerpt\">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, file access, better control of host commands and access to Java classes and JavaScript libraries. JDK 8 was the<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"icon-comment-empty-fa\" aria-label=\"number of comments\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/07\/25\/the-return-of-sqlcls-script-command\/#comments\" class=\"post-comments\">2<\/a><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/07\/25\/the-return-of-sqlcls-script-command\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-19914 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-antlr tag-apexlang tag-code-analysis tag-dblinter\" style=\"\"><div class=\"date_label\">2026-06-29<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/29\/detecting-security-vulnerabilities-with-the-apexlang-parser\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/06\/APEXlang-Parser-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/06\/APEXlang-Parser-1024x538.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/29\/detecting-security-vulnerabilities-with-the-apexlang-parser\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2026-06-29<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/29\/detecting-security-vulnerabilities-with-the-apexlang-parser\/\">Detecting Security Vulnerabilities With the APEXlang Parser<\/a><\/h2><\/div><div class=\"post-excerpt\">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 perform static code analysis, convert code, generate documentation, and visualise different aspects of an APEX application. A linter, for example,<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"icon-comment-empty-fa\" aria-label=\"number of comments\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/29\/detecting-security-vulnerabilities-with-the-apexlang-parser\/#respond\" class=\"post-comments\">0<\/a><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/29\/detecting-security-vulnerabilities-with-the-apexlang-parser\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-19515 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-apexlang tag-dblinter\" style=\"\"><div class=\"date_label\">2026-06-19<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/19\/syntax-diagrams-for-apexlang\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/06\/apexlang-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/06\/apexlang-1024x538.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/19\/syntax-diagrams-for-apexlang\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2026-06-19<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/19\/syntax-diagrams-for-apexlang\/\">Syntax Diagrams for APEXlang<\/a><\/h2><\/div><div class=\"post-excerpt\">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 APEXlang grammar is available as EBNF, it can be used to generate syntax diagrams. These diagrams (also known<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"icon-comment-empty-fa\" aria-label=\"number of comments\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/19\/syntax-diagrams-for-apexlang\/#comments\" class=\"post-comments\">3<\/a><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/06\/19\/syntax-diagrams-for-apexlang\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-16264 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-oracle-26ai tag-sql tag-sql-assertions tag-temporal-database tag-valid-time\" style=\"\"><div class=\"date_label\">2026-03-09<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/03\/09\/using-sql-assertions-to-enforce-temporal-data-integrity\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/03\/using-sql-assertions-to-enforce-temporal-data-integrity-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/03\/using-sql-assertions-to-enforce-temporal-data-integrity-1024x683.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2026\/03\/09\/using-sql-assertions-to-enforce-temporal-data-integrity\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2026-03-09<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/03\/09\/using-sql-assertions-to-enforce-temporal-data-integrity\/\">Using SQL Assertions to Enforce Temporal Data Integrity<\/a><\/h2><\/div><div class=\"post-excerpt\">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 constraints, temporal joins, and temporal aggregations. These features are still missing today. However, in the latest version of Oracle AI<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/03\/09\/using-sql-assertions-to-enforce-temporal-data-integrity\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-15957 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-oracle-26ai tag-sql tag-sql-assertions\" style=\"\"><div class=\"date_label\">2026-02-23<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/02\/23\/enforcing-acyclic-hierarchies-with-sql-assertions\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/02\/sql-assertions-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/02\/sql-assertions-1024x683.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2026\/02\/23\/enforcing-acyclic-hierarchies-with-sql-assertions\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2026-02-23<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/02\/23\/enforcing-acyclic-hierarchies-with-sql-assertions\/\">Enforcing Acyclic Hierarchies With SQL Assertions<\/a><\/h2><\/div><div class=\"post-excerpt\">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 integrity rules that span multiple rows or tables. Check constraints are similarly limited, as they can only validate conditions on the columns of a single<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/02\/23\/enforcing-acyclic-hierarchies-with-sql-assertions\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-14289 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-code-analysis tag-dblinter tag-plsql tag-sql tag-vscode\" style=\"\"><div class=\"date_label\">2026-01-02<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/01\/02\/fighting-bad-pl-sql-sql-with-vs-code\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/01\/fighting-bad-plsql-and-sql-with-vscode-knight-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2026\/01\/fighting-bad-plsql-and-sql-with-vscode-knight-1024x683.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2026\/01\/02\/fighting-bad-pl-sql-sql-with-vs-code\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2026-01-02<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2026\/01\/02\/fighting-bad-pl-sql-sql-with-vs-code\/\">Fighting Bad PL\/SQL &amp; SQL with VS Code<\/a><\/h2><\/div><div class=\"post-excerpt\">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 defects from entering production? In addition to testing, code analysis plays a central role. These days, code can be<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/01\/02\/fighting-bad-pl-sql-sql-with-vs-code\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-14035 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-plsql tag-sql\" style=\"\"><div class=\"date_label\">2025-10-15<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/10\/15\/is-sysdate-deterministic-joelkallmanday\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/09\/sysdate-deterministic-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"Is SYSDATE deterministic?\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/09\/sysdate-deterministic-1024x683.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2025\/10\/15\/is-sysdate-deterministic-joelkallmanday\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2025-10-15<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/10\/15\/is-sysdate-deterministic-joelkallmanday\/\">Is SYSDATE Deterministic? #JoelKallmanDay<\/a><\/h2><\/div><div class=\"post-excerpt\">TL;DR No, SYSDATE is not deterministic. However, it behaves very similarly to a deterministic function within an Oracle Database SQL statement. Background On a customer site, we used faketime on the OS to change the date and time for testing purposes. As long as you only travel forward in time, the Oracle<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2025\/10\/15\/is-sysdate-deterministic-joelkallmanday\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-13988 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-code-analysis tag-dblinter tag-sql\" style=\"\"><div class=\"date_label\">2025-07-12<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/07\/12\/outer-joining-with-ansi-sql-89-and-sql-92\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/07\/outer-joining-with-ansi-sql-89-and-sql-92-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"Outer Joining With ANSI SQL-89 and SQL-92\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/07\/outer-joining-with-ansi-sql-89-and-sql-92-1024x683.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2025\/07\/12\/outer-joining-with-ansi-sql-89-and-sql-92\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2025-07-12<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/07\/12\/outer-joining-with-ansi-sql-89-and-sql-92\/\">Outer Joining With ANSI SQL-89 and SQL-92<\/a><\/h2><\/div><div class=\"post-excerpt\">Introduction I recently implemented a quick fix for the rule G-3130 to transform queries to ANSI SQL-92 syntax. One of the challenges was to handle Oracle&#8217;s outer-join syntax (+). In ANSI SQL-89, join and filter criteria are part of the WHERE clause. It&#8217;s not easy to distinguish them. In this blog post,<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2025\/07\/12\/outer-joining-with-ansi-sql-89-and-sql-92\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-13951 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-sql-developer tag-vscode\" style=\"\"><div class=\"date_label\">2025-07-05<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/07\/05\/installing-sql-developer-in-ides-implementing-the-vs-code-extension-api\/\"><div class=\"mask\"><\/div><img wpfc-lazyload-disable=\"true\" loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/07\/installing-sql-dev-in-cursor-1-5-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"Installing Oracle SQL Developer Extension for VSCode in Cursor\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/07\/installing-sql-dev-in-cursor-1-5-1024x683.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2025\/07\/05\/installing-sql-developer-in-ides-implementing-the-vs-code-extension-api\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2025-07-05<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/07\/05\/installing-sql-developer-in-ides-implementing-the-vs-code-extension-api\/\">Installing SQL Developer in IDEs Implementing the VS Code Extension API<\/a><\/h2><\/div><div class=\"post-excerpt\">Introduction The Oracle SQL Developer team is working on bringing the essential functionality built over the last 20 years in the classic SQL Developer IDE\u2014a JDeveloper extension running as a standalone application\u2014to the modern VS Code IDE. The integration with the VS Code ecosystem greatly enhances the developer experience. Is it time<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2025\/07\/05\/installing-sql-developer-in-ides-implementing-the-vs-code-extension-api\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-13856 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-code-analysis tag-dblinter tag-plsql tag-sql\" style=\"\"><div class=\"date_label\">2025-03-18<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/03\/18\/dblinter-rules-repository\/\"><div class=\"mask\"><\/div><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/dbLinter-logo-color2-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"dbLinter logo\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/dbLinter-logo-color2-300x225.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/dbLinter-logo-color2-768x576.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/dbLinter-logo-color2-100x75.png 100w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/dbLinter-logo-color2-480x360.png 480w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/dbLinter-logo-color2.png 866w\" sizes=\"auto, (max-width:767px) 300px, 300px\" wpfc-lazyload-disable=\"true\" \/><\/a><div class=\"image_links double\"><a class=\"zoom \"  rel=\"prettyphoto\" href=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/dbLinter-logo-color2.png\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><circle cx=\"11.35\" cy=\"11.35\" r=\"6\" class=\"path\"><\/circle><line x1=\"15.59\" y1=\"15.59\" x2=\"20.65\" y2=\"20.65\" class=\"path\"><\/line><\/svg><\/a><a class=\"link \"  href=\"https:\/\/www.salvis.com\/blog\/2025\/03\/18\/dblinter-rules-repository\/\"><svg viewBox=\"0 0 26 26\"><defs><style>.path{fill:none;stroke:#333;stroke-miterlimit:10;stroke-width:1.5px;}<\/style><\/defs><g><path d=\"M10.17,8.76l2.12-2.12a5,5,0,0,1,7.07,0h0a5,5,0,0,1,0,7.07l-2.12,2.12\" class=\"path\"><\/path><path d=\"M15.83,17.24l-2.12,2.12a5,5,0,0,1-7.07,0h0a5,5,0,0,1,0-7.07l2.12-2.12\" class=\"path\"><\/path><line x1=\"10.17\" y1=\"15.83\" x2=\"15.83\" y2=\"10.17\" class=\"path\"><\/line><\/g><\/svg><\/a><\/div><\/div><\/div><div class=\"post-desc-wrapper bg- has-custom-bg\" style=\"\"><div class=\"post-desc\"><div class=\"post-head\"><div class=\"post-meta clearfix\"><div class=\"author-date\"><span class=\"date\"><i class=\"icon-clock\"><\/i> <span class=\"post-date updated\">2025-03-18<\/span><\/span><\/div><div class=\"category\"><span class=\"cat-btn\">Categories <i class=\"icon-down-dir\" aria-hidden=\"true\"><\/i><\/span><div class=\"cat-wrapper\"><ul class=\"post-categories\">\n\t<li><a href=\"https:\/\/www.salvis.com\/blog\/category\/oracle\/\" rel=\"category tag\">Oracle<\/a><\/li><\/ul><\/div><\/div><\/div><\/div><div class=\"post-title\"><h2 class=\"entry-title \" itemprop=\"headline\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/03\/18\/dblinter-rules-repository\/\">dbLinter Rules Repository<\/a><\/h2><\/div><div class=\"post-excerpt\">Introduction Today I proudly announce that the Joint Venture between United Codes and Grisselbav released the initial version of the dbLinter Rules Repository website. This is the first publicly available component of the dbLinter tool suite. What is dbLinter? dbLinter is a suite for checking and improving the quality of database applications.<span class=\"excerpt-hellip\"> [\u2026]<\/span><\/div><div class=\"post-footer\"><div class=\"button-love\"><span class=\"love-text\">Do you like it?<\/span><\/div><div class=\"post-links\"><i class=\"read-more-icon icon-doc-text\" aria-hidden=\"true\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2025\/03\/18\/dblinter-rules-repository\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><\/div><div class=\"column one pager_wrapper\"><div class=\"pager\"><div class=\"pages\"><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/\" class=\"page active\">1<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/2\/\" class=\"page\">2<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/3\/\" class=\"page\">3<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/4\/\" class=\"page\">4<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/5\/\" class=\"page\">5<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/6\/\" class=\"page\">6<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/7\/\" class=\"page\">7<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/8\/\" class=\"page\">8<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/9\/\" class=\"page\">9<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/10\/\" class=\"page\">10<\/a><a href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/11\/\" class=\"page\">11<\/a><\/div><a rel=\"next\" class=\"next_page\" href=\"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/page\/2\/\">Next page<i class=\"icon-right-open\" aria-hidden=\"true\"><\/i><\/a><\/div><\/div>\n<\/div>\n<\/div>\n\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Philipp Salvisberg&#8217;s Blog Database-centric development<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-7456","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Philipp Salvisberg&#039;s Blog - Philipp Salvisberg&#039;s Blog<\/title>\n<meta name=\"description\" content=\"Software development with JVM languages and the efficient use of relational databases. Focus on Oracle database related technologies and tools.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.salvis.com\/blog\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Philipp Salvisberg&#039;s Blog - Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"Software development with JVM languages and the efficient use of relational databases. Focus on Oracle database related technologies and tools.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.salvis.com\/blog\/\" \/>\n<meta property=\"og:site_name\" content=\"Philipp Salvisberg&#039;s Blog\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-04T10:52:40+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@phsalvisberg\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg's Blog - Philipp Salvisberg&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\"},\"datePublished\":\"2017-02-19T09:44:12+00:00\",\"dateModified\":\"2025-04-04T10:52:40+00:00\",\"description\":\"Software development with JVM languages and the efficient use of relational databases. Focus on Oracle database related technologies and tools.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Philipp Salvisberg&#8217;s Blog\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/\",\"name\":\"Philipp Salvisberg&#039;s Blog\",\"description\":\"Database-centric development\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/#\\\/schema\\\/person\\\/34352245c48678b1a5a05d4bc1339515\",\"name\":\"Philipp Salvisberg\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"url\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"contentUrl\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\",\"width\":400,\"height\":400,\"caption\":\"Philipp Salvisberg\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.salvis.com\\\/blog\\\/wp-content\\\/uploads\\\/2010\\\/11\\\/phs_trivadis4.jpg\"},\"sameAs\":[\"http:\\\/\\\/www.salvis.com\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Philipp Salvisberg's Blog - Philipp Salvisberg&#039;s Blog","description":"Software development with JVM languages and the efficient use of relational databases. Focus on Oracle database related technologies and tools.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.salvis.com\/blog\/","og_locale":"en_US","og_type":"article","og_title":"Philipp Salvisberg's Blog - Philipp Salvisberg&#039;s Blog","og_description":"Software development with JVM languages and the efficient use of relational databases. Focus on Oracle database related technologies and tools.","og_url":"https:\/\/www.salvis.com\/blog\/","og_site_name":"Philipp Salvisberg&#039;s Blog","article_modified_time":"2025-04-04T10:52:40+00:00","twitter_card":"summary_large_image","twitter_site":"@phsalvisberg","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.salvis.com\/blog\/","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg's Blog - Philipp Salvisberg&#039;s Blog","isPartOf":{"@id":"https:\/\/www.salvis.com\/blog\/#website"},"datePublished":"2017-02-19T09:44:12+00:00","dateModified":"2025-04-04T10:52:40+00:00","description":"Software development with JVM languages and the efficient use of relational databases. Focus on Oracle database related technologies and tools.","breadcrumb":{"@id":"https:\/\/www.salvis.com\/blog\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.salvis.com\/blog\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.salvis.com\/blog\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.salvis.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Philipp Salvisberg&#8217;s Blog"}]},{"@type":"WebSite","@id":"https:\/\/www.salvis.com\/blog\/#website","url":"https:\/\/www.salvis.com\/blog\/","name":"Philipp Salvisberg&#039;s Blog","description":"Database-centric development","publisher":{"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.salvis.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.salvis.com\/blog\/#\/schema\/person\/34352245c48678b1a5a05d4bc1339515","name":"Philipp Salvisberg","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","url":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","contentUrl":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg","width":400,"height":400,"caption":"Philipp Salvisberg"},"logo":{"@id":"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2010\/11\/phs_trivadis4.jpg"},"sameAs":["http:\/\/www.salvis.com\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/comments?post=7456"}],"version-history":[{"count":36,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/revisions"}],"predecessor-version":[{"id":13907,"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/pages\/7456\/revisions\/13907"}],"wp:attachment":[{"href":"https:\/\/www.salvis.com\/blog\/wp-json\/wp\/v2\/media?parent=7456"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}