The standard industry-wide joke-but-not-a-joke traditionally was that the best platform to run Oracle on was a slide projector.
I used to be a R&D coder in an Oracle (engine) competitor in the early 90s. Their marketing was fierce$ and frankly amazing$$ but their engine (and its usability) was crap. Put it this way: Oracle still can't do SQL92 Transactions ("Isolation") last time I checked (~5yrs ago), except at Granularity of Table. Yes, if you want to guarantee data Consistency in a non-singleuser database, you have to tablelock. Everything. Every time. They fudge it for marketing/snowing purposes by redefining Isolation.
Not a joke.
Now, this IS documented in their documentation, but the obfuscation and scattering of it is truly a work of art. (Summary: if you want a multi-user database and you don't want data corruption, you have to toggle a setting (isolation=true iirc) then restart the server and then all non-unsafe+non-readonly locks are Table. No one does this in practice: multiuser Oracle dbs are the data version of Security By Obscurity: "you're mostly all right and if it DOES go wrong, no one's going to notice. Right?"
Sybase/SQLServer had the same design/architecture issues but competed on speed, which it achieved by having separate codebases for each query plan.
Not a joke.
BIG problem: many nontrivial query plans' codebases were buggy. And you could only discover this by experimentation then result-set data-crawling. I distinctly remember discovering this on first use: a simplistic 3 (4?) table join produced Cartesian Products. Unless you re-ordered the table list. Only one of the list orders worked. I banned Sybase use in the Australian office immediately; switched to SAS's SQL. In current-$ terms, I was quant trading A$2bn and joint head of research on half a US$trillion, so more than happy to pay away 10-20% performance for 100% Correctness.