{"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>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-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=\"icon-comment-empty-fa\" aria-label=\"number of comments\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/03\/09\/using-sql-assertions-to-enforce-temporal-data-integrity\/#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\/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=\"icon-comment-empty-fa\" aria-label=\"number of comments\"><\/i> <a href=\"https:\/\/www.salvis.com\/blog\/2026\/02\/23\/enforcing-acyclic-hierarchies-with-sql-assertions\/#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\/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><article class=\"post post-item isotope-item clearfix category-5 post-13831 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-plsql tag-pl-sql-unwrapper tag-sql\" style=\"\"><div class=\"date_label\">2025-03-08<\/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\/08\/wrapping-and-unwrapping-pl-sql\/\"><div class=\"mask\"><\/div><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/plsql-unwrapper4-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"PL\/SQL Unwrapper for VS Code\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/plsql-unwrapper4-300x225.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/plsql-unwrapper4-1024x769.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/plsql-unwrapper4-768x577.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/plsql-unwrapper4-100x75.png 100w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/plsql-unwrapper4-1280x964.png 1280w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/plsql-unwrapper4-480x360.png 480w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/03\/plsql-unwrapper4.png 1284w\" 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\/plsql-unwrapper4-1024x769.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\/08\/wrapping-and-unwrapping-pl-sql\/\"><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-08<\/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\/08\/wrapping-and-unwrapping-pl-sql\/\">Wrapping and Unwrapping PL\/SQL<\/a><\/h2><\/div><div class=\"post-excerpt\">Introduction Today I released a PL\/SQL Unwrapper for VS Code. You can find it in the VS Code Marketplace, along with instructions on how to use it. It&#8217;s super easy and works the same way as the extension I wrote 10 years ago for SQL Developer in Java. If you&#8217;re curious about<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\/08\/wrapping-and-unwrapping-pl-sql\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-13804 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-oracle-26ai tag-sql\" style=\"\"><div class=\"date_label\">2025-01-28<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2025\/01\/28\/avoid-implicit-type-conversion-in-json-access\/\"><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\/01\/avoid-implicit-type-conversion-in-json-access-300x225.webp\" class=\"scale-with-grid wp-post-image\" alt=\"Avoid Implicit Type Conversion in JSON Access\" 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\/01\/avoid-implicit-type-conversion-in-json-access.webp\"><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\/01\/28\/avoid-implicit-type-conversion-in-json-access\/\"><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-01-28<\/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\/01\/28\/avoid-implicit-type-conversion-in-json-access\/\">Avoid Implicit Type Conversion in JSON Access<\/a><\/h2><\/div><div class=\"post-excerpt\">Introduction Before comparing two values, the Oracle Database automatically ensures that both values have the same data type. It converts one of the values to match the data type of the other value. The SQL Language Reference manual describes when and how implicit data conversions happen. However, Oracle recommends that you convert<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\/01\/28\/avoid-implicit-type-conversion-in-json-access\/\" class=\"post-more\">Read more<\/a><\/div><\/div><\/div><\/div><\/article><article class=\"post post-item isotope-item clearfix category-5 post-13743 type-post status-publish format-standard has-post-thumbnail hentry category-oracle tag-oracle-26ai tag-sql\" style=\"\"><div class=\"date_label\">2024-12-24<\/div><div class=\"image_frame post-photo-wrapper scale-with-grid image\"><div class=\"image_wrapper\"><a href=\"https:\/\/www.salvis.com\/blog\/2024\/12\/24\/evolution-of-a-sql-domain-for-semantic-versioning\/\"><div class=\"mask\"><\/div><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/04\/xms-tree-plain-decorated-300x225.png\" class=\"scale-with-grid wp-post-image\" alt=\"Evolution of a SQL Domain for Semantic Versioning\" srcset=\"https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/04\/xms-tree-plain-decorated-300x225.png 300w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/04\/xms-tree-plain-decorated-1024x768.png 1024w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/04\/xms-tree-plain-decorated-768x576.png 768w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/04\/xms-tree-plain-decorated-100x75.png 100w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/04\/xms-tree-plain-decorated-480x360.png 480w, https:\/\/www.salvis.com\/blog\/wp-content\/uploads\/2025\/04\/xms-tree-plain-decorated.png 1067w\" 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\/04\/xms-tree-plain-decorated-1024x768.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\/2024\/12\/24\/evolution-of-a-sql-domain-for-semantic-versioning\/\"><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\">2024-12-24<\/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\/2024\/12\/24\/evolution-of-a-sql-domain-for-semantic-versioning\/\">Evolution of a SQL Domain for Semantic Versioning<\/a><\/h2><\/div><div class=\"post-excerpt\">1. Introduction In my current project, I use a SQL domain to implement the formatting and precedence rules for Semantic Versioning. I started with a simple implementation covering only the most basic rules. Getting the sorting right is key in my project. It allows me to identify the latest compatible version of<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\/2024\/12\/24\/evolution-of-a-sql-domain-for-semantic-versioning\/\" 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><\/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 v27.5 - 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}]}}