This page contains all of my posts belonging to the Linux category in chronological order.
Does the MLE SQL Driver respect Virtual Private Database policies?
An interesting question came in today and it’s a great opportunity to elaborate a little on the nature of the Oracle JavaScript SQL Driver. As you may have heard, Oracle AI Database 26ai introduced JavaScript as a first class citizen right next to PL/SQL and Java. Now you’ve got another language to write database lambdas…
Git clone, but a specific branch, please
This is a super quick post mainly to remind myself that it is possible to (git) clone a specific branch, rather than the default branch. And it’s actually quite simple to do so. As per git-clone (1), the command: So, as expected, the repository is now present on disk. What about these branches? The current…
Multiple “for” clauses in dbms_stats’s method_opt
Recently, I encountered some frustration in recalling the correct syntax for the method_opt parameter in DBMS_STATS. This clause is primarily used when creating or deleting histograms. A histogram is a special type of column statistic that provides more detailed information about the data distribution in a table column. A histogram sorts values into “buckets,” as…
More good reasons to use bind variables in cursors in Oracle
Bind variables are a best practice in Oracle database development. They offer significant benefits in performance, security, and maintainability. One of the main reasons to use bind variables is protection against SQL injection, but performance plays an equally important role. This post is concerned with the latter. What are bind variables? As a database developer…
Creating column-level annotations on views
While updating my slides covering “what’s new in Oracle AI Database 26ai” I noticed that examples how to annotate views are currently absent from the SQL Language Reference. While this is getting fixed, here’s a short post how to use annotations with Oracle views. Schema Annotations Schema Annotations are a pretty nice feature, especially in…
Using the MLE PL/SQL Foreign Function Interface in APEX
While preparing a talk for the upcoming annual German Oracle User Group conference, DOAG 2025, I noticed I haven’t yet written anything about the using the MLE PL/SQL Foreign Function Interface (or FFI for short) in APEX. The PL/SQL FFI was introduced in Oracle 23.7 to simplify the way developers (you!) work with PL/SQL. Rather…
Passing JSON PL/SQL types to MLE JavaScript
Recently the MLE team was asked if it was possible to pass JSON PL/SQL types to MLE/JavaScript.Remember that you have multiple options to work with JSON in Oracle Database 26ai: SQL (using the JSON data type), PL/SQL (using the PL/SQL API), JavaScript (did you know that the J in JSON stands for JavaScript?), etc. Shout…
What’s new with MLE 23.26.0 – support for PL/SQL Collections and Records Pt 1
Oracle AI Database has been released! It ships with a whole raft of cool new features, including some the Multilingual Engine (MLE) team integrated for JavaScript. This article discusses one of them, support for PL/SQL Records and Collections. This is a rather wide topic, which is why you find the article broken into a small…
Using Oracle Database Free in your devcontainer and GitHub Codespaces
Dev containers are pretty nifty when it comes to keeping your development environment isolated from the rest of your system. Quoting from the documentation: Development containers, or dev containers, are Docker containers that are specifically configured to provide a fully featured development environment. Whenever you work in a codespace, you are using a dev container…
Java devs, please instrument your code 🥺
While preparing a talk for Java developers I revisited the topic of code instrumentation. Within the database, for example when writing PL/SQL or MLE/JavaScript code, you would use DBMS_APPLICATION_INFO to set module and action plus any other details you care about. This allows your friendly database admin or tuning expert to understand your application better.…
Something went wrong. Please refresh the page and/or try again.