Skip to main content

Appreciation for Those Who Give of Themselves (#ThanksOGB)

My #ThanksOGB post:

I've been working - and personally benefiting from - Oracle Database technology since 1987. I joined Oracle as a pre-sales consultant, which meant back then I was a techie sidekick for one or more Oracle salespeople. I moved on to various other roles and in 1992 left to become a consultant. Two years later, wrote a book on PL/SQL and have been obsessed with that language ever since. In 1999, I released the first version of utPLSQL - unit test for PLSQL, my version of JUnit. Worked for Quest for many years (bringing Quest Code Tester for Oracle to the market, among other things), and in 2014 rejoined Oracle, where I now lead a team of developer advocates (Blaine Carter, Chris Saxon, Connor McDonald, Dan McGhan).

It's been a great life - and I expect it to keep on being such for a while to come. Part of the point of my little historical review, though, is that I was always paid to provide resources to the community (some of them free, like utPLSQL and my many PL/SQL Scripts, some of them requiring a credit card, like my books and trainings).

But there are many people in our community who give of themselves, freely, who commit a remarkable amount of their "free time" to help others in the community. This help can take many forms: answering questions (with respect and politeness) on forums, offering outstanding technical resources on their websites, creating free plug-ins for tools like SQL Developer and Oracle Application Express.

So I thought I'd use Oracle Groundbreaker Appreciation Day to give a shout-out to some of these generous contributors. There are, of course, many more than you will read about in this post. Please do not take offense if you are not here. Please honor others you know about in the comments on this post. Please feel free to contact me directly ( or via Twitter) to tell me about your projects. I'd love to keep adding to this blog post over time.

Tim Hall and ORACLE-BASE

ORACLE-BASE and Tim Hall likely need no introduction to anyone reading my blog. Tim's website is the de facto go-to resource on most things Oracle Database. He provides easy-to-consume articles on hundreds of topics, which not only explain things in a clear manner, but include scripts designed with the working professional in mind - easy to copy-paste, easy to run, easy to learn from.

Beyond Oracle Base, Tim has been a voice for the community to Oracle for years, and has maintained a level of clarity and integrity on a variety of challenging scenarios that have made us all better.

Thanks, Tim!

Philipp Salvisberg and His Many SQL Developer Plug-Ins

Philipp is a remarkably prolific contributor to the community. With his development and promotion of PinkDB (a pragmatic approach to secure, efficient leveraging of databases in application development), a blog that never ceases to educate deeply, and his long list of plug-ins for SQL Developer (see below), I wonder if his family even remembers what he looks like. :-)

Thanks, Philipp, for all you do!

The utPLSQL v3 Team

As I noted above, I released the first version of utPLSQL in 1999. I believe it was the first (semi)automated testing framework for PL/SQL, but many others have been added over the years. A few years ago, a group of "next generation" developers (younger than me, wiser than me, adept at more than PL/SQL) decided it was time to freshen up that aging framework.

The result if utPLSQL v3, a complete rewrite of the previous two versions, built around an object-oriented approach that is more consistent with other *Unit frameworks for other languages (such as JUnit for Java). They've been rapidly adding all sorts of powerful features, even came up with a logo, t-shirts and an absolutely irresistible enthusiasm for all things testing when it comes to PL/SQL and Oracle Database.

Many developers contribute to utPLSQL, but I would like to give a shout out and thanks to key players, including Jacek Gebal, Pavel Kaplya and Samuel Nitsche, aka, Sith Lord Tester Magnifique.

Juergen Schuster and

Juergen is a legend in the world of Oracle Application Express, not just because of his outsized personality and viewpoints. :-) Juergen is deeply committed to helping APEX developers and is the main brain behind, the #1 community resource for APEX developers (though Juergen will be the first to point out that many others contribute to building and maintaining the site itself). This site offers an active Slack channel, the best site on the planet to find APEX plug-ins, access to other community resources and more.

Thanks, Juergen, for your devotion to fellow-APEX users!

Daniel Hochleitner and APEX Plug-ins

If you are an active user of APEX and looking for ways to enhance your application with some really spiffy functionality, then you might go to and click on the Plug-ins tab. There you will find over 200 plug-ins, a fact that all by itself says a lot about the amazing user community that's grown up around Application Express.

Look closer and you will find that the #1 most exuberant and busy contributor of such plug-ins is a fellow named Daniel Hochleitner. Daniel's plug-ins, support in enhancing, and also his work on APEX Theme Styles make him a standout contributor in the APEX community (though I must confess, there are so many others!).

Many thanks, Daniel!

BluShadow on the SQL-PL/SQL Forum

Long before there was StackOverflow, there was the SQL-PLSQL Forum at the Oracle Technology Network (which has since gone through several re-brandings). In addition to AskTOM, this forum was one of the top places to go to get help from Oracle Database experts. It is still fulfilling that function today.

There are literally dozens of expert users (not Oracle employees) who devote an enormous amount of their time on this forum, and I salute them all!

I give a specific shout-out to BluShadow (who has "only" the 5th highest number of points on this forum!), because I have been so impressed not only by the endless patience and helpfulness of his responses to questions, but also by the documents he contributes to the forum's library, covering a wide variety of topics of interest to many database developers.

Thanks, BluShadow, for sticking by our users for so many years!

Morten Braten and the Alexandria Library

Morten has been around a while, and boy has he kept busy. He is perhaps best known for the Alexandria PL/SQL Utility Library, now on Github, which offers a wide variety of utilities such as integrating PL/SQL with Amazon, PayPal, Google, Twitter and other external services.

He also has built plug-ins for APEX, offers the Thoth Gateway, and perhaps nearest and dearest to my heart, published an excellent PL/SQL resource: PL/SQL, the Good Parts.

A big thanks to Morten, for all you've done to make PL/SQL a successful part of modern application development!

The StackOverflow Crew

mathguy was kind enough to point out that I'd left out an important part of our community who give back every day:
Think what you wish about StackOverflow, but there are a surprisingly large number of top expert Oracle contributors (not Oracle employees) who volunteer their time there. Some participate both there and on OTN (the SQL and PL/SQL community you mentioned), but many don't. My personal shout-out there would be for a user named Alex Poole; those who visit SO (the Oracle area) will easily recognize the name. But there are many more, and they deserve the same gratitude as the folks you mentioned. 
First of all, I think many fine thoughts about StackOverflow! It's clearly been a key resources for millions of developers around the world.

And I think even finer thoughts about the many excellent Oracle technologists who spend lots of time on SO providing top-notch answers to the many SQL, PL/SQL and Oracle Database questions posted there. Here are the 16 top all-time contributors for questions tagged "plsql".

OK But Now I Feel Bad

By highlighting the above over-the-top contributors, I am immediately reminded of all the people I am not recognizing for all their amazing work with the community. My apologies in advance! But please don't feel offended. You are all appreciated and recognized and thanked on a regular basis (at least I think you are).

Plus, I will be happy to add to this post over the coming months and years, so don't hesitate to contact me with a name, a site, a write-up of what makes that person so special to you, and they will be added to this list.

Clearly, Oracle Database wouldn't be the product it is today, the software that has helped billions of people live better lives, without the amazing team led by Andy Mendelsohn at Oracle HQ. 

But hey that's their (our) job. Even more amazing, more wonderful, more critical, more inspiring are the thousands of people around the world who give of themselves - their time, their hard-won expertise, their code - to help others be more successful.

So let it be known far and wide:


  1. Hi Steven,

    Thank you for your nice post. I was happy to see Tim Hall at the top of your list; you made my day.

    I felt, though, that your enumeration has one glaring hole in it. Think what you wish about StackOverflow, but there are a surprisingly large number of top expert Oracle contributors (not Oracle employees) who volunteer their time there. Some participate both there and on OTN (the SQL and PL/SQL community you mentioned), but many don't. My personal shout-out there would be for a user named Alex Poole; those who visit SO (the Oracle area) will easily recognize the name. But there are many more, and they deserve the same gratitude as the folks you mentioned.


Post a Comment

Popular posts from this blog

Get rid of mutating table trigger errors with the compound trigger

When something mutates, it is changing. Something that is changing is hard to analyze and to quantify. A mutating table error (ORA-04091) occurs when a row-level trigger tries to examine or change a table that is already undergoing change (via an INSERT, UPDATE, or DELETE statement). In particular, this error occurs when a row-level trigger attempts to read or write the table from which the trigger was fired. Fortunately, the same restriction does not apply in statement-level triggers.

In this post, I demonstrate the kind of scenario that will result in an ORA-04091 errors. I then show the "traditional" solution, using a collection defined in a package. Then I demonstrate how to use the compound trigger, added in Oracle Database 11g Release1,  to solve the problem much more simply.

All the code shown in this example may be found in this LiveSQL script.
How to Get a Mutating Table ErrorI need to implement this rule on my employees table:
Your new salary cannot be more than 25x th…

Quick Guide to User-Defined Types in Oracle PL/SQL

A Twitter follower recently asked for more information on user-defined types in the PL/SQL language, and I figured the best way to answer is to offer up this blog post.

PL/SQL is a strongly-typed language. Before you can work with a variable or constant, it must be declared with a type (yes, PL/SQL also supports lots of implicit conversions from one type to another, but still, everything must be declared with a type).

PL/SQL offers a wide array of pre-defined data types, both in the language natively (such as VARCHAR2, PLS_INTEGER, BOOLEAN, etc.) and in a variety of supplied packages (e.g., the NUMBER_TABLE collection type in the DBMS_SQL package).

Data types in PL/SQL can be scalars, such as strings and numbers, or composite (consisting of one or more scalars), such as record types, collection types and object types.

You can't really declare your own "user-defined" scalars, though you can define subtypes from those scalars, which can be very helpful from the perspective…

Table Functions, Part 1: Introduction and Exploration

Please do feel encouraged to read this and my other posts on table functions, but you will learn much more about table functions by taking my Get Started with PL/SQL Table Functions class at the Oracle Dev Gym. Videos, tutorials and quizzes - then print a certificate when you are done!

Table functions - functions that can be called in the FROM clause of a query from inside the TABLE operator - are fascinating and incredibly helpful constructs.

So I've decided to write a series of blog posts on them: how to build them, how to use them, issues you might run into.

Of course, I am not the first to do so. I encourage to check out the documentation, as well as excellent posts from Adrian Billington (search for "table functions") and Tim Hall. Adrian and Tim mostly focus on pipelined table functions, a specialized variant of table functions designed to improve performance and reduce PGA consumption. I will take a look at pipelined table functions in the latter part of this seri…