Database, SQL and PL/SQL

Time-out and Thanks

Our technologist takes some time and shares some history.

By Tom Kyte

August/September 2015

I’ve just completed 22 years at Oracle as an employee and 29 years as a user of Oracle Database. In another notable milestone, I just reached 2 million flight miles on United Airlines (although that is just a fraction of the miles I’ve traveled, because my travel involves many airlines). Additionally, I reached one of those “magic” age milestones recently.

With the milestones adding up, it’s time for a change. I am going on an extended leave of absence from Oracle—duration unknown—as of the end of August 2015.

I do have some short-term plans. These do not include eating more than 50 percent of my meals in restaurants, sleeping in hotel for more than half the year, and flying 250,000 plus miles a year (I spend more than 10 workweeks a year at 35,000 feet). The plans do include writing some books I’ve been meaning to write—books on Oracle technology, of course. Hopefully you’ll see the results starting sometime in mid to late 2016, on topics that may include Oracle Database 12c Release 2 (the next version of Oracle Database) new features, analytic functions, everything you wanted to know about binds, explaining the explain plan, and maybe more. Time will tell. Moving from my short-term plans to looking back at where I’ve been, it has certainly been an interesting time to be in IT over the last 30 years. I’ve seen so many things change—some for the better. And sometimes, the more things change, the more they stay the same. I know that is very cliché, but it is also very true!

For example, I first learned to program using the PL/I language—an IBM high-level, mainframe programming language. It was a little like Pascal, a tiny bit like COBOL, a little bit like C, and probably still the coolest procedural language in which I’ve programmed. In the 1980s I would program a screen using ISPF (Interactive System Productivity Facility), and the screen would be displayed on a “dumb terminal,” with users tabbing through the fields filling in data. Once the screen was “full”, users would hit F8 on the keyboard to send the data to a TPM (transaction processing monitor) such as CICS (Customer Information Control System) or Tuxedo. This TPM would then use a small number of connections to databases to request a transaction be processed. Once the transaction was complete, the code running in the TPM would decide what to send back and display the next screen.

Now, that wasn’t as flexible as today’s “three-tier” architecture, but it was very similar—exceedingly so. And it was in place more than three decades ago! Add to that the fact that the mainframe programs ran in an LPAR (logical partition)—effectively a virtual machine—decades ago. And just to pile on, one of the ‘databases’ I frequently used was called VSAM (virtual storage access method), and using indexed VSAM files is very analogous to using a NoSQL database.

Yes, in the 1980s I was working on three-tier application server programs in virtual machines using NoSQL databases! It just took three decades for technology to come fully back around again. The names have changed, the languages have changed, and the hardware has really changed, but many of the fundamentals that were true back then are still very true today.

The second language I learned, after PL/I, was SQL. I started programming in SQL on a database called SQL/DS—now known as DB2. I learned SQL on the IBM mainframe using VM/CMS as the operating system, and I programmed embedded SQL in PL/I. My second database after SQL/DS was in fact Oracle Database. I used Oracle Database Release 5.1.5c on an IBM AT computer with a 286 chipset and a whopping 1MB of memory. Believe it or not, that was plenty to run Oracle Database, Oracle Forms, and Oracle Reports back then. It was also pretty easy to buy Oracle Database back in the day. I used an ad I cut from a magazine that offered Oracle Database, Oracle Forms, Oracle Reports—and even SQL*Net—all for $199! The competition Oracle was calling out in the ad at that point in time wasn’t IBM; it wasn’t Microsoft; it wasn’t Informix or even Sybase. It was Ashton-Tate’s dBASE! Things have really changed since then.

After that, I programmed in a series of languages: Rexx, EXEC 2, JCL, Ada, C, C++, PL/SQL, T-SQL, various UNIX scripting languages, and more.

I’m frequently asked—in person and on Ask Tom—these questions: How did you achieve what you have in IT? How did you get to where you are today? I think the most important contributing factor to my success comes down to one word: mentor. I had an excellent mentor when I first started programming. The story of how I got started begins with my answering an ad posted in the Washington Post by GRC (a small, now-defunct company once located in Vienna, Virginia) that said “PL/I programmers wanted, no experience necessary.“ I was absolutely qualified for that! On the same day I interviewed with GRC, I had an interview with another small company—Quantum Computer Services—in Tysons Corner, Virginia, not far away from GRC. With my BA in math from the University of Pittsburgh, I had two job offers:

  1. GRC. They wanted programmers/analysts writing PL/I on an IBM mainframe.
  2. Quantum Computer Services. They were looking for help desk analysts for a consumer dial-up startup.

The year was 1987. I of course took the cooler of two jobs and became a programmer/analyst. I had no idea what that meant, because I had not really touched a computer in college.

Just for fun, search for Quantum Computer Services on the internet. Go ahead. After I started at GRC and read about how Quantum Computer Services became America Online (AOL), I thought about how I could have been an employee there with a very low employee number. Now ask me if I made the right choice. I think I did.

I took the GRC programmer/analyst job with a bunch of people who were beyond belief—in a good way. I was teamed with a guy who was about 10 years younger than I am now. He taught me lots of stuff—he was my mentor. He taught me how to write code that was understandable, maintainable, debuggable, traceable, and self-diagnosing. He taught me to think before coding. He taught me to test, test, test and never say anything was true without testing and showing it. He taught me more than any school could have. He taught me how to do this computer stuff “right.” I still to this day do the things he taught me almost 30 years ago.

As I developed programming skills, database skills, architecture skills—things that take many, many years—I also cut my teeth on the internet Usenet newsgroups, interacting in more than 10,000 discussions during the years 1994 to 2000. It was there that I developed my style of answering questions—answering factually, using provable numbers, and providing clear and concise examples.

So, how did the Ask Tom website evolve from answering questions on Usenet newsgroups? The genesis of Ask Tom is this Usenet posting from 1999. Someone posted the concept of updating the Oracle Database data dictionary directly, something no one—expert, professional, newbie, whomever—should suggest under any circumstances. The exception to that statement is if something goes horribly wrong and Oracle Support tells you to do it. But for any other reason, sorry, no. The thread on Usenet was asking about how to rename a column before that feature was introduced in Oracle Database (Oracle8i Database was the current release at the time of that posting; the rename column feature was introduced in Oracle9i Database).

There were two simple answers. One was the answer I always gave: create a view, because this is what views are for. You can reorder columns, you can rename them—you can do whatever you want with a view. The other answer was a new idea: add a new column, update it, and null—drop— the old column.

Well, someone followed up with “What do you think about updating sys.col$?” I, definitely having an opinion on this, said “I think it is a hugely *BAD* terrible idea. Words cannot describe how bad it could be.” In an offline talk I discovered the concept for the idea came from content on—, the Oracle Magazine online content on, to be exact. It was in a user-contributed ‘tip’. I got in touch with the Oracle Magazine editor at the time, Kelli Wiseth. It turned out that Oracle Magazine at that point had no one vetting the contributed material. Given that I definitely had some feelings about that, she asked me if I would mind doing the vetting. I agreed. I would accept or reject the tips for each print copy of the magazine and the online edition.

Over the next couple of weeks and months, it came to light that the magazine got questions in addition to tips from readers all over the world. They had no method of answering the questions and couldn’t really do anything with them. Kelli Wiseth asked me if I would like to take a peek at some of them, and as a result, the concept of Ask Tom was born in the year 2000. The very first question ever asked and answered is available in the May/June 2000 issue of Oracle Magazine. As you can see the format has changed a little over time, but the concept is the same.

In conjunction with the print column, we took the Ask Tom website online in February/March of that year. It started as a Perl application running on Oracle Technology Network that used e-mail. A reader would navigate to the site’s “ask a question” form, type in a question, press submit, and the question would end up in my inbox. That lasted about six weeks. When I started coming into work and having 40 or more questions in my e-mail inbox every day, the concept of sending me an e-mail for every submitted question ended. I had no way to control the influx of questions; I had no way to turn it off when I didn’t have the time to answer questions.

That’s how the website was born. I wrote, by hand, Ask Tom “version 1.0.” It used a black and blue color scheme (I wish I had kept a static page or two; the wayback machine on the internet archives doesn’t have a copy from early 2000) and had about four or five pages. I used PL/SQL (of course) and at the time the Oracle Web Agent cartridge, a precursor to mod_plsql.

Shortly thereafter, a fellow known as Joel Kallman got in touch with me. He was working internally on a new project—a tool called HTML DB, now known as Oracle Application Express. When it was almost ready for prime time—but still before we would let it outside of Oracle—Joel offered to rewrite the Ask Tom site in Oracle Application Express to test and prove the power of the tool. Since I had all of the APIs done—the APIs to save a question, update a question, ask for more information from the person submitting the question, and so on—this would be a test of the HTML DB environment to build a user interface and handle all of the security, navigation, and so on. The site blossomed from essentially 5 pages to more than 40 today simply because of this switch. There is no way I would have hand-coded 40-plus pages—certain features would not have come about within Ask Tom had the site not been rewritten using HTML DB and then migrated to Oracle Application Express.

So that’s it, that’s the story behind the story. Over the last 15 years, I’ve taken tens of thousands of questions on Ask Tom, written a series of books on Oracle, spoken at probably close to 1,000 or more user group events, met people from around the world, and traveled around the world many times. I’m not leaving the Oracle community, but I will be less visible—for a while, at least. You might not see me at conferences anymore, but hopefully you will see me on and other book stores!

I’ll close up with an observation I made recently regarding questions about Oracle Database. In my experience answering these questions, I’ve come to realize that there are really only five questions about the database.

The answer to the first three questions is “use bind variables.”

The answer to the fourth question is “do not use bind variables.”

The answer to the fifth question is “it depends.”

If you know those five answers, you can answer any question about the database!

Actually, if you just remember the answer to question number five—“it depends”—you can answer any question.

That is probably the most important thing I’ve learned in almost 30 years in IT: there is no single “best” way, there is no single ‘best’ approach for every problem. The real challenge in IT is not learning the best way, but rather learning as many ways as you can and learning how to evaluate which way is best given your current circumstances. I’m looking forward to interacting with the Oracle community going forward through future writing efforts, and I fully intend for those efforts to help you find the right ways.

And if I may borrow from Douglas Adams: “I may not have gone where I intended to go, but I think I have ended up where I intended to be.”

Thanks and the Future of Ask Tom

We thank Tom Kyte for his years of outstanding contributions to the Oracle Database user community, in particular on, which receives visits from tens of thousands of developers every week. We wish him the very best on his leave of absence and look forward to his new books.

In the meantime, Oracle Database developers continue to need answers to their tough questions, so I am also very pleased to announce that—with Tom Kyte’s blessing!—Connor McDonald and Chris Saxon, Oracle Developer Advocates for SQL, will be answering questions on Ask Tom going forward.

Sure, nobody else can ever be Tom Kyte. But Connor and Chris are both deeply experienced in Oracle Database and have been helping developers (and DBAs) for years. We think you will be very pleased with their work and the updated Ask Tom website.

Andy Mendelsohn

Next Steps

Tom Kyte has answered your most difficult technology questions since 2000. Oracle Developer Advocates for SQL take over for Tom and start answering questions in September 2015.

more Tom
Expert Oracle Database Architecture, Third Edition

DOWNLOAD Oracle Database 12c

LEARN more about Oracle Database 12c

FOLLOW Oracle Database
on Twitter
on Facebook

Photography by Unsplash