Why I don't like Oracle's Database
Oracle is fast (especially if you throw enough hardware at it) and has a lot of great features, but what I really hate about it is their error messages. Looking at my résumé I guess that I first encountered Oracle around 1995. At that time I was writing the connectivity to several databases like IBM's DB and Sybase's DB-Library when I got to Oracle I thought it would be a breeze. What I found was that their DLLs didn't have version information so I would have to write extra code looking at the date and size to guess the version of the DLL. And at the time, if there was an error you would just get an error number. You needed to look up a file to find out what that error meant. There was a way of pointing Oracle to the write error file so that it would look it up, but I never bothered. Obviously, some client wanted a way to get their database errors in their language and Oracle set up this system or error numbers and files to point to.
The side effect of this was a lazyness of the Oracle developers to helpful error messages. I spent a day searching for ORA-01438: "value larger than specified precision allows for this column". The question was which of the 38 columns was too small? What was the value it was trying to insert? If Oracle had bothered to give me this information I would have been done in 5 minutes. Intead I had to write 266 lines of Python to perform the select (which was a 165 line undecipherable monster) and attempt the inserts one by one. After 100,000 inserts I found the problem, the the line_number column for the destination table was only 5 characters and after 99,999 lines it failed. But a whole day lost because of a lousy error message.
My suggestion? Use PostgreSQL.
The side effect of this was a lazyness of the Oracle developers to helpful error messages. I spent a day searching for ORA-01438: "value larger than specified precision allows for this column". The question was which of the 38 columns was too small? What was the value it was trying to insert? If Oracle had bothered to give me this information I would have been done in 5 minutes. Intead I had to write 266 lines of Python to perform the select (which was a 165 line undecipherable monster) and attempt the inserts one by one. After 100,000 inserts I found the problem, the the line_number column for the destination table was only 5 characters and after 99,999 lines it failed. But a whole day lost because of a lousy error message.
My suggestion? Use PostgreSQL.
Comments