And the very best kind of stroking for me is when a developer tells me things like:

"Your book changed my life."

"That code you posted on your blog saved me a whole day's work."

and so on. Honestly, I don't think the endorphin flow is from some sort of personal pride. It's more that the enormous chunk of my life that I have devoted to PL/SQL can help other individuals improve their quality of life and personal happiness in some way (I am much less enamored with helping the bottom line of corporations).

In that vein, this morning, I received the following wonderful email:

Subject: Error trapping - THANK YOU

Steven, Your Oracle article about error trapping in PL/SQL saved my bacon this morning. I woke up to a production error with commercial software that we wrote. I had already implemented many aspects of your recommendations. When I started troubleshooting at 0600, I had to…

Have you ever had one of those days when you run your program and it does the impossible?

As in, you stare at the screen and say: "No way, that's impossible. My program couldn't have done that. Couldn't be doing that."

It's a funny thing for a programmer to say, when you think about it.

We are logical people - or at least we are expected to use logic in our jobs.

And that is flat out a most illogical statement - contradictory on the face of it.

Because it wasn't impossible. Obviously. It just happened.

So what's a programmer to do?

Check your assumptions!

You must have made an assumption that is not valid. Assumed that data was in the table that was not - or vice versa. Assumed that you saved a change to your program that you did not. Assumed that you recompiled your program, when you had not. Etc., etc.

Here's an embarrassing true story from my own long, sordid history of programs doing the impossible due to my stubborn refusal to go back and rev…

So the public-facing side of my function is done. Time to dive inside! Of course, as with almost any piece of code, most of the details are very application-specific and not all that critical to the lesson at hand. So I will take liberties will code to focus in on the most relevant aspects, but I will also use this opportunity to suggest some ideas about how best to build such functions to maximize readability and make it easy to maintain.

First, the declaration section; what you see here are the usual constants (mostly, to execute "setup" functionality once and not repeat it) and variables. But then you see a number of nested subprograms. In case you were not aware, you can define functions and procedures within other functions and procedures.

For a table function that constructs a complex dynamic query, it was crucial for me to hide various construction steps behind a function interface to make it easier to see how the pieces fit together.

End of last week, I recorded a series of videos offering tips for giving excellent presentations. I will, of course, let you all know when they are posted on YouTube.

But one of those tips is:

Don't be afraid to take some risks!
And I talk specifically about using humor in our presentations, while also making sure that the humor is directed at oneself or one's product/technology. NEVER MAKE FUN OF YOUR AUDIENCE.

I also suggested, in that same vein, that you should not be afraid to appear ridiculous, silly, whatever. People learn from other people, and the less you are like a robot, the more people will like to listen to and learn from you.

To prove beyond a doubt that I really, truly mean that, on my most recent two minute tech tip with Bob Rubhart of OTN, I decided to sing, live, the lyrics to PLSQLville, sung to the tune of Jimmy Buffet's Margaritaville.

I planned to complete a description of the table function I used in the PL/SQL Challenge rankings report, which I began here.

But then, well, things got in the way. Things like:

Write my next article for Oracle Magazine, only one week past dueWrite five daily tips on PL/SQL via @sfonplsqlProduce two new quizzes for the PL/SQL Challenge.Record a video for ODTUG to promote the YesSQL! Day at Kscope15Record a "train the trainer" video to pass on some tips on how to give excellent (or at least highly entertaining) presentations.Donate a small bucket of white cells and plasma to LifeSource.Waaay too many conference call/meetings and waaaaaay too much email.Finish up work on a root canal. Fun!Cut down a bunch of invasive buckthorn (I so love that the sun sets so late in the day now!).Help design and test some exciting new features for Oracle Learning Library
So my apologies, dear readers. Next week. Next week I …