[HN Gopher] Problems with Oracle SQL
       ___________________________________________________________________
        
       Problems with Oracle SQL
        
       Author : thunderbong
       Score  : 313 points
       Date   : 2021-09-10 15:55 UTC (7 hours ago)
        
 (HTM) web link (codingtofreedom.com)
 (TXT) w3m dump (codingtofreedom.com)
        
       | halz wrote:
       | Oracle spelled backwards, "El Caro", is Spanish for "expensive".
       | I can never forget this tidbit when dealing with Oracle.
        
       | capitainenemo wrote:
       | I have a special level of hate for oracle full text searches as
       | well, which requires embedding an additional complex search
       | syntax into a text string, so you can't use binds in any reliable
       | way without sanitisation.
       | 
       | There is no interface that I can see that takes a temp table or
       | set of parameters.
       | 
       | I've also grown to dislike their (+) syntax. Super convenient but
       | mixing the left joins into the WHERE clauses makes them get lost
       | pretty easily.
       | 
       | I've also spent a ton of time with mystery crashes in large
       | queries in PHP and Java where the crash only seemed to occur if
       | the prepared statements had \r\n instead of \n, or went away on
       | clearing statement cache until next time a set of statements were
       | loaded.
       | 
       | Oh, and the annoying VARCHAR limits - thankfully higher than the
       | 4000 it was at for a long time, but still irritating even now.
       | Trivial example: select listagg(level,',') from dual connect by
       | level <= 8000
        
       | recursivedoubts wrote:
       | Looks like it might be getting hugged, here's an archive if you
       | can't load it:
       | 
       | https://archive.is/MS2lJ
        
       | worik wrote:
       | So many comments here about MS and Oracle. Meh! I have an
       | intellectual affinity for the suffering. But it has been 20 years
       | since I wrestled with the Beast from Seattle.
       | 
       | Most of those twenty years were spent doing my own things in
       | Linux, Perl, and R. In glorious ivory tower isolation from the
       | real world consequences of serving a master who's goal was to
       | extract revenue...
       | 
       | Here I am for the last year serving Apple (the Beast from
       | Cupertino?).
       | 
       | The problems are the same with documentation. Yesterday I found
       | an example in some Apple documentation. It saved me half a day,
       | and I almost dies from shock. I have never before seen an actual
       | example...
       | 
       | Their main documentation is videos. Fucking videos. Videos of
       | what looks like actors pretending to be developers, that go on
       | for ages, have no transcripts....
       | 
       | And then the tools: At least the MS and Oracle tools work! (Do
       | they?) In Apple you cannot believe what the debugger tells you
       | about the state of your programme with out double checking in at
       | least two other ways, because their tool chain is very buggy, and
       | they will not fix it.
       | 
       | There is no money in fixing tools. We developers pay them SFA
       | money, brighter colours on the App store, deeper dark arts in
       | getting you to fork over $XX for shiny apps that is where their
       | development resources are going.
       | 
       | SO... They are all the same: APple, MS, Oracle, Google.... We
       | developers are their bitches, we will crawl over broken glass to
       | get things done, so there is no need to spend any resources on
       | us....
       | 
       | Come back RMS!! All is forgiven!!!
        
         | zionic wrote:
         | The best HN posts really do start around 5PM EST
        
       | hyperpape wrote:
       | I share the author's opinion, though I haven't used other DBs in
       | anger much, so I don't know if they're better. When I think about
       | why it works this way, I'm sure product decisions and backwards
       | compatibility are issues, but I also remember an amazing comment
       | on writing code for Oracle:
       | 
       | https://news.ycombinator.com/item?id=18442941
        
       | uberman wrote:
       | From a security perspective, keep in mind the errors like "access
       | denied" or "password invalid" are typically bad not good when
       | compared to more generic "table does not exist" or "failed logon
       | attempt".
       | 
       | These errors tell you something positive about the existence of
       | something you don't have the rights to know about and that is a
       | defect in my opinion.
       | 
       | I not saying good error messages are not valuable or that
       | Oracle's are fine, but the answer should never be that error
       | messages tell you information about something you don't have
       | permission to know about.
        
         | ntoshev wrote:
         | Came here to find the thread discussing this. You stated what
         | I'd think is the conventional wisdom and I expected this to be
         | the top thread.
         | 
         | However, this thinking comes at the cost of UX (or Developer
         | eXperience). Much more mundane instance of the same thinking is
         | hiding elements of the UI you are not allowed to use. This
         | often gets me thinking - is there a way to do this that I'm not
         | allowed to see, or is it just that I can't find the function in
         | the UI?
         | 
         | A solution for the DX issue is logging the _real_ error
         | somewhere only accessible for an admin. Has this been
         | implemeted anywhere in the wild? For UIs, just be honest and
         | show the menu items disabled.
        
         | lixtra wrote:
         | Unless "table does not exist" does take precisely the same time
         | as "access denied" you still leak the same information by
         | replacing the latter.
         | 
         | For logged in users I would prefer logging with explicit error
         | messages. Like that you can tell if someone is poking around or
         | was hacked. And still get clear error messages.
        
           | uberman wrote:
           | Sure, if "table does not exist" actually means that, which it
           | does not. It means you have no access to such a table if it
           | exists or not
        
         | kristjansson wrote:
         | That assumes developers with access to the database are a
         | _threat_, which is not exactly the posture one might expect or
         | prefer.
         | 
         | If your database error messages are exposed to users that
         | actually are a threat ... that already seems like a world of
         | pain.
        
       | mormegil wrote:
       | My "favorite" Oracle experience (not):
       | 
       | > select count(*) from mytbl;
       | 
       | ORA-12986: columns in partially dropped state. Submit ALTER TABLE
       | DROP COLUMNS CONTINUE
       | 
       | Well, OK then...
       | 
       | > ALTER TABLE mytbl DROP COLUMNS CONTINUE;
       | 
       | SQL Error: ORA-00604: error occurred at recursive SQL level 1
       | ORA-01654: unable to extend index SYS.I_OBJ4 by 128 in tablespace
       | SYSTEM
       | 
       | The table was completely unusable, we needed to restore the DB
       | from backup.
        
       | Someone wrote:
       | _"But how in the world is it okay for Oracle to throw me for a
       | loop as I try to pinpoint why the existing grants aren't
       | sufficient, debugging the whole program to see which user
       | credentials are used - only to find out that it was neither a
       | table nor a view, but rather the SEQUENCE used to increment the
       | ID column that needed grants for the user?"_
       | 
       | Probably a security issue. If you tell a user _"table T exists,
       | but you don't have rights to write to it because you can't
       | increase sequence S"_ , you're leaking the information that a
       | sequence with that name exists.
       | 
       | It's the same reason a good login system will say _"invalid
       | username or password"_ instead of _"invalid password"_ and its
       | recovery screen _"if that's a valid user name, a mail has been
       | sent to the address associated with it"_.
        
       | Someone wrote:
       | _"But how in the world is it okay for Oracle to throw me for a
       | loop as I try to pinpoint why the existing grants aren't
       | sufficient, debugging the whole program to see which user
       | credentials are used - only to find out that it was neither a
       | table nor a view, but rather the SEQUENCE used to increment the
       | ID column that needed grants for the user?"_
       | 
       | Probably a security issue. If you tell a user" _"table T exists,
       | but you don't have rights to write to it because you can't
       | increase sequence S"_ , you're leaking the information that a
       | sequence with that name exists.
       | 
       | It's the same reason a good login system will say _"invalid
       | username or password"_ instead of _"invalid password"_ and its
       | recovery screen _"if that's a valid user name, a mail has been
       | sent to the address associated with it"_.
        
       | JaggerFoo wrote:
       | Oracle SQL is not the devil.
       | 
       | I can code up SQL easily and find errors. I use sqldeveloper and
       | granted It's not as helpful as say coding Dart on Android Studio
       | IDE in pinpointing where a problem is and making suggestions. But
       | I've been able maintain single sql statements 800 lines long,
       | perform knapsack in a single sql statement, and develop complex
       | packages in Oracle.
       | 
       | If you really want to see super complexity, download and create
       | an Oracle EBS 12.2 virtualbox instance and checkout the PL/SQL
       | packages in the APPS schema and the schemas themselves of which
       | there are over 200.
       | 
       | I've used NoSQL and other SQL databases, each which had their
       | challenges. I like the free tooling that Oracle provides - The
       | APEX app builder and XE database are nice, if not hosted on
       | Oracle Cloud - try the libvirt instance to evade Oracle's cloud
       | grip.
       | 
       | I think the problem here is developer experience and a negative
       | bias toward Oracle, which is understandable and prevalent in the
       | developer community.
       | 
       | Cheers
        
         | irrational wrote:
         | You really should try Postgres. I was a professional Oracle
         | developer for 15 years, then we had to move to Postgres since
         | we simply couldn't afford the Oracle licensing fees anymore. It
         | took 2 years to move our database over - mainly because we had
         | to rewrite thousands of queries from Oracle sql syntax into
         | standard-compliant sql syntax. Anyway, I truly expected
         | Postgres to by worse than Oracle. I was wrong. The performance
         | has been equal to or greater than Oracle. The documentation in
         | Postgres is so good it almost makes me weep. I had no idea the
         | Oracle documentation was so bad until I had something to
         | compare it with. Installing and managing Postgres is so much
         | easier. Backups, replication, etc. are far far easier and less
         | error prone than Oracle. I've literally not found a single
         | thing to complain about in Postgres. Now I wish we had moved
         | years earlier.
        
         | robertlagrant wrote:
         | APEX just exists to lock people even further into the database.
         | A literal antipattern of a product.
        
           | zip1234 wrote:
           | That is completely true, but the product is actually very
           | cool. I wish there was a database agnostic version of the
           | product as it is such a great concept for many business apps.
        
       | ryanmarsh wrote:
       | The author looks young (judging from his picture). I'm honestly
       | sorry to the younger generation that we didn't do a better job of
       | passing down what we learned.
       | 
       | Yes Virginia, Oracle is the Devil.
        
       | approxim8ion wrote:
       | So I've used MySQL at a very basic level but for the last couple
       | of years almost solely been on Oracle because that's what my org
       | uses. I sporadically dabble in the db stuff but am mostly working
       | on front end. What's the db most people use now, Postgres? Could
       | someone point me towards a good resource for it?
        
         | JoeOfTexas wrote:
         | PostGres is fine I guess, but MySQL setup is streamlined
         | better. If MySQL is fine for big corps its fine for me too.
        
         | kiliancs wrote:
         | The official documentation is exceptionally good
         | https://www.postgresql.org/docs/
        
       | winrid wrote:
       | The thing that kills me about Oracle is that since the license
       | does not allow benchmarking, we (or at least I) don't know how it
       | actually stacks up to the competition. Of course, that's the
       | idea, but it would be cool to have that data.
        
         | SCLeo wrote:
         | What?! How do they disallow people from benchmarking it? Do
         | they just forbid people from benchmarking in legal terms? That
         | sounds so fishy.
        
           | ufmace wrote:
           | Seems it's in the license agreement. What's unusual is that
           | actually matters here. If someone tried to prevent
           | benchmarking Postgresql by licensing terms, someone else
           | would promptly ignore them and do it anyways, since
           | Postgresql is free to download. Oracle licenses are very
           | expensive, so anybody who has access to it also has money and
           | a lot to lose by flouting license terms.
        
           | winrid wrote:
           | That is my understanding. [0]
           | 
           | [0] https://www.brentozar.com/archive/2018/05/the-dewitt-
           | clause-...
        
           | sbierwagen wrote:
           | Both Microsoft and Oracle prohibit benchmarking:
           | https://danluu.com/anon-benchmark/
           | 
           | Wikipedia article: https://en.wikipedia.org/wiki/David_DeWitt
           | #The_%22DeWitt_Cla...
           | 
           | It's plainly illegal, but nobody who has built their business
           | on Oracle DB wants to piss off Oracle the company with a
           | lawsuit, and it doesn't appear any legal activists want to
           | either.
        
           | aeyes wrote:
           | You can benchmark it, the license agreement only prohibits
           | you from publishing the benchmark.
        
         | Longhanks wrote:
         | Someone who has performance worth the money would not inhibit
         | the benchmarking of it.
        
       | munk-a wrote:
       | I've worked with databases for a while now and I've never
       | advocated for moving to Oracle (I _have_ advocated for postgres
       | though). The long term organizational costs is a big factor - but
       | an almost equally large factor is the fact that
       | 
       | 1. I have never actually used their dialect and have heard
       | absolutely terrible things about it
       | 
       | 2. There is no non-enterprise DBMS available that uses something
       | close to their dialect so I figure actually hiring Oracle DBAs
       | would be a nightmare.
       | 
       | These two factors combine to make me absolutely baffled at how
       | completely Oracle has seemed to dominate every market but the
       | private one (i.e. government, especially defense and
       | educational). Have I been missing something about ways to
       | actually get real world experience with Oracle?
        
         | [deleted]
        
         | vbezhenar wrote:
         | Back in the day MS SQL was Windows-only and Postgres was not
         | mature, so the choice was Oracle or DB2. And Oracle was more
         | popular, because it used more progressive model (versions vs
         | DB2 locks). Plenty of people who don't closely follow recent
         | trends associate database with Oracle, so when they have a
         | word, they'll choose it.
         | 
         | Oracle it not that bad anyway, it's just stupidly expensive.
         | I'd choose Postgres any day, but I worked with Oracle a lot and
         | it never was a main culprit in my work. It has its issues,
         | sure, but they're solvable.
        
           | zabzonk wrote:
           | > so the choice was Oracle or DB2
           | 
           | Sybase, Ingres
        
             | tracker1 wrote:
             | Worth noting, that Microsoft SQL Server started life as a
             | Sybase fork.
        
             | icedchai wrote:
             | Don't forget about Informix. Early 2000's had several
             | commercial databases.
             | 
             | I worked at both a Sybase shop and an Oracle shop. I far
             | preferred Sybase.
        
             | briffle wrote:
             | Our Vendor offered Sybase in the mid 200x's as a choice for
             | our college middleware, but they used 'case-insensitive'
             | sort, which the linux version of Sybase did not work with.
        
             | myohmy wrote:
             | Potato Patahto
        
           | marcosdumay wrote:
           | > Oracle it not that bad anyway, it's just stupidly
           | expensive.
           | 
           | Full of bugs, some that destroy speed, some that destroy
           | data, some that just make a feature that you need unusable.
           | More heavyweight than lead (although it gets fast after you
           | throw enough hardware). Lacking any capable or usable
           | management interface (but then, that excludes everyone except
           | for postgres and mysql). Impossible to program. Impossible to
           | predict how your program will run.... And my favorite,
           | absolutely fragile, any wrong code you run there can take
           | everything out of the air.
           | 
           | And yeah, stupidly expensive and comes with the Oracle legal
           | team.
        
             | 35fbe7d3d5b9 wrote:
             | > comes with the Oracle legal team
             | 
             | This would've been sufficient, honestly.
        
               | marcosdumay wrote:
               | That's a problem for the people working with contracts.
               | I'm personally more concerned about the fragility, and
               | the bugs.
               | 
               | Did I say it has bugs?
        
               | [deleted]
        
           | laumars wrote:
           | There were more than just Oracle or DB2. Informix, SyBase, 4D
           | and I'm pretty sure there was something with the word "fox"
           | in its name too. Plus of course MySQL, though that was many
           | taken seriously until relatively recently.
        
         | metadata wrote:
         | Postgres has Oracle layer, available as a commercial variant by
         | EnterpriseDB. I don't think MariaDB implementation can compete,
         | but EDB Postgres is solid. Basically a native implementation of
         | Oracle in Postgres.
        
           | garenp wrote:
           | Does it replicate the same kind of "evil" bugs as in the
           | article, or does it provide an improvement?
        
         | Joeri wrote:
         | Oracle is free to download and try out. It's only when you want
         | to use it in production that you get to know the heart of their
         | business: the oracle sales team. They are pushy, and devious,
         | and they never give up.
         | 
         | I spent about a decade working on a large system built on top
         | of oracle. Once you get used to its idiosyncracies it is not
         | actually that bad. It has a good query optimizer, so even badly
         | written queries tend to perform ok. And if there is any DB
         | feature you want, it probably has it. Whether you can afford
         | that feature is a different matter.
        
         | irrational wrote:
         | The problem is the Oracle dialect was created BEFORE the SQL
         | standard was written. For backwards compatibility they never
         | changed it after the SQL standard was written. Personally, I
         | think they should have had a flag so you could choose whether
         | to use standard SQL or Oracle SQL.
        
           | thornygreb wrote:
           | Exactly, and many features that are in the standard now and
           | we take for granted were invented by Oracle in the first
           | place.
        
         | indigo945 wrote:
         | Point 2 is no longer true. MariaDB has an Oracle compatibility
         | layer now.
        
         | zip1234 wrote:
         | Oracle is a decent product with all the features that you could
         | want if you are an Enterprise and in addition they have the
         | support for all that. Postgres has most if not all of them at
         | this point, but if you want support you have to pick from one
         | of many vendors.
         | 
         | Having used many RDBMS, one thing I very much liked about
         | Oracle was the bitmap index. Very very useful for some
         | performance issues that a b-tree cannot solve.
        
         | namdnay wrote:
         | > but the private on
         | 
         | Oracle was massive in the private sector 10 years ago, and it
         | probably still is once you dig past the surface layer of nosql
         | 
         | Don't forget that for a long term it was either Oracle or DB2
        
           | munk-a wrote:
           | I haven't ever worked at a giganto company myself - even
           | though I've worked with largeish amounts of data... from
           | multi-teribyte pyradmically stored JPEG2000s to 50GB tables
           | of raw rows parsed from ridiculously long documents. I
           | suspect some big places are indeed using Oracle - but notably
           | large companies are still using MySQL or Postgres to great
           | effect (i.e. Facebook).
        
         | ericbarrett wrote:
         | Oracle sells to executives, not technical staff.
         | 
         | Training on Oracle tech is via certified classes, provided
         | "free" by your employer as part of their licensing deal; not
         | online discovery.
         | 
         | Source: sold to and worked with Oracle Inc. for several years,
         | got a front row seat at the sausage factory.
        
           | oldsecondhand wrote:
           | I've got to attend some free Oracle classes at uni (taught by
           | Oracle employees), they were horribly boring. I don't think
           | they'd have any chance at selling to technical staff even if
           | they tried.
        
           | MangoCoffee wrote:
           | >Oracle sells to executives, not technical staff.
           | 
           | agree. i have a year or two with Oracle Apex. at a pervious
           | job, we were using Java to develop a web app but a executive
           | saw how fast you can create a web page/app with Oracle Apex.
           | we switch over since we already using Oracle for database.
           | 
           | Enterprise software is not targeting you (techies). its for
           | CxOs.
        
             | piyh wrote:
             | We kludged together an apex reporting solution to replace
             | an old payroll UI. It was quick to work with in relation to
             | the number of reports we were able to publish.
        
           | gvenzl wrote:
           | Besides training for Oracle University, Oracle has a couple
           | of free learning and training resources out there on the web
           | too.
           | 
           | https://livesql.oracle.com --> A SQL scratchpad that also
           | includes scripts and tutorials.
           | 
           | Oracle Live Labs
           | (https://apexapps.oracle.com/pls/apex/dbpm/r/livelabs/home)
           | --> Granted, while it's easier googled as "Oracle Live Labs"
           | than to remember that URL, it does, however, provide free
           | Hands-On Labs for users.
           | 
           | https://oracle.github.io/learning-library/ --> The
           | instructions for the Hands-On Labs above and more can be
           | found in the learning-library
           | 
           | asktom.oracle.com --> I fully free Q&A portal where you can
           | ask Oracle Database employees for help. Furthermore, it
           | offers regular "Office Hours" live webinars and an entire
           | course of learning Oracle Database:
           | https://asktom.oracle.com/databases-for-developers.htm
        
           | laumars wrote:
           | It's more than that. Oracle is sold off the back of its
           | middleware applications. Which equally suck too...but at
           | least they're solving difficult problems that most other
           | database vendors don't both with.
        
             | revscat wrote:
             | Such as?
        
       | croes wrote:
       | Shouldn't it be "Oracle is the Devil"?
        
       | kbsspl wrote:
       | Just someone who wants Oracle to be something else without
       | understanding it's nature.
       | 
       | Vehemently disagree with the 'access denied' error message. Why
       | would you want some one who does not have access to a table to
       | know it exists.
        
       | the_Devil wrote:
       | Rude!
        
       | ivolimmen wrote:
       | It is also the only database that has a precision parameter when
       | calling spacial functions. Like 1 and 1 can sometimes be 1.9.
       | Never again.
        
       | ndm000 wrote:
       | The biggest problems I've had with Oracle databases are getting
       | CDC data out of it. There's conflicting technologies with their
       | own tradeoffs - LogMiner vs. Flashback, neither of which cover
       | all use cases well, licensing is ambiguous, and docs are
       | conflated with information you don't need.
        
       | orf wrote:
       | The biggest WTF for me is that you can't put parameters in
       | `EXPLAIN` queries. This killed support for `Queryset.explain()`
       | on Oracle in Django.
       | 
       | Seems like such a weird limitation, and the error messages
       | definitely where not helpful.
        
       | pdkl95 wrote:
       | > Oracle hates giving error details
       | 
       | > Oracle even prints malicious error messages
       | 
       | From the ancient humorous internet textfile _hacktest.text_ [1]
       | ("THE HACKER TEST - Version 1.0")                   0241 Is your
       | job secure?         0242 ... Do you have code to prove it?
       | 
       | [1] http://www.hungry.com/~jamie/hacker-test.html
        
       | thornygreb wrote:
       | Oracle has quirks, yes. Oracle the company is...yes. We all get
       | it. Oracle RDBMS has been around for longer than most of us have
       | been alive and has amazing backwards compatibility. It has
       | features I wish PostgreSQL had and vice versa. Nothing is
       | perfect.
        
       | roflc0ptic wrote:
       | I think I've found 5 bugs in the Oracle database in the last 4
       | months, including multiple queries that returned incorrect
       | results.
       | 
       | They end up being in weird edge cases - one was... you needed to
       | be casting something as JSON, parsing it, and have a WHERE clause
       | that included a compound predicate. A similar but slightly
       | different query simply threw an error. I made a full reproduction
       | and everything. Got bounced around between a couple of
       | departments until we finally reached an engineer who said, and I
       | lightly paraphrase: "um, that seems weird. I don't see anything
       | in the docs about it."
       | 
       | The solution to that was updating from oracle 19.3 to 19.12. But
       | _that_ broke our INSERT IF NOT EXISTS style queries. We were
       | using this "hint" they have, "ignore_row_on_dupkey_index", which
       | is a comment that goes before your query which actually affects
       | the code execution (WTF?).
       | 
       | Batch queries via JDBC return an array of integers: the length is
       | how many different queries you batched together, and each element
       | represents how many rows were affected by each batch.
       | 
       | Unfortunately, when using this ignore_row_on_dupkey_index, the
       | array sometimes both 1. has the wrong length, and 2. has invalid
       | integers: stuff like -1203214.
       | 
       | So we switched over to using MERGE INTO WHEN NOT MATCHED style
       | syntax, and everything was hunky dory, right? Wrong. We started
       | getting UNIQUE CONSTRAINT VIOLATED errors. As near as we can
       | tell, MERGE INTO WHEN NOT MATCHED can still run into a race
       | condition - if you have two queries that try to insert the same
       | non-existent row, the database will check that the row doesn't
       | exist, execute the queries, and then blow up one of them. But as
       | far as we can tell, only on batch queries. As I'm not paid to
       | figure out WTF is wrong with oracle, just get it to work, I
       | didn't end up doing a full repro of this stuff. But there's a
       | couple of weeks I'm not getting back.
        
       | jwitthuhn wrote:
       | This is missing my favorite oracle quirk: Empty strings are
       | equivalent to null. Trying to insert an empty string into a NOT
       | NULL column will fail, which took me a while to understand the
       | first time I saw it happen.
        
         | 5e92cb50239222b wrote:
         | So how do you insert an empty string into a NOT NULL column?
         | Please don't tell me that it's not possible.
        
           | zzzeek wrote:
           | its...
           | 
           | ....
           | 
           | sorry
           | 
           | not possible (can't store empty string in a NULL col either)
           | 
           | for reals
        
             | robertlagrant wrote:
             | Just store the string "empty" and hope there are no
             | nihilists who've changed their names to match. Simple!
        
               | munk-a wrote:
               | Real programmers encode emptiness as ZZZ...
               | 
               | (I once worked maintaining a MUD that used internal
               | memory management and marked block terminals (which were
               | unnecessary since it stored the length of blocks it had
               | allocated) with ZZZ)
        
               | tracker1 wrote:
               | Use vertical tab, or another whitespace or field
               | separator character, like EOF etc. Generally something a
               | modern keyboard won't be entering, and won't generally be
               | transmitted over the wire.
        
           | gmfawcett wrote:
           | Either make the column nullable, or apply local workarounds
           | and folklore. E.g. I've seen "person" records with surname =
           | '.' in certain databases, for people who don't have one.
        
           | postalrat wrote:
           | First you accept that null and an empty string are the same
           | thing. Then you insert a null.
        
             | adamzochowski wrote:
             | But they are not. Empty string means "we know this is
             | empty", Null means "We don't know".
             | 
             | For example, I have a second name. Some people don't have
             | second names. And some records we might not even know if
             | such exists. Null means "unknown". Empty string cannot be
             | equal to null.
        
               | tux3 wrote:
               | Bad software punishes you for doing things right.
        
               | spywaregorilla wrote:
               | Somebody hasn't learned how to love big brother yet.
        
               | Brian_K_White wrote:
               | It's like how at one time, "0" was not yet invented and
               | had to be invented and explained, and it was a revolution
               | for math. It's a quantity just like 5 or 244, but for
               | when the amount happens to be none.
               | 
               | We need that again, another new 0 concept to add to 0, to
               | distinguish between "set-to-0" and "not-yet-set".
               | 
               | Maybe 2 new concepts, since null is also different from
               | 0. 0 is a value, null is the absense of a value.
               | 
               | Not just as an idiom or implementation detail in a
               | programming language, but as a general concept that may
               | be used anywhere in life.
               | 
               | Without it, we have exactly these confusions and
               | ambiguities and differences of opinion about how to do
               | something or what something means or what something
               | should mean.
        
           | myohmy wrote:
           | Honestly that's bad db design anyways. If empty string is a
           | valid value then you don't want NOT NULL anyways. This is a
           | table structure constraint, not a variable declaration. NOT
           | EMPTY would have been a better syntax imo but that's a whole
           | can of worms.
        
             | MrStonedOne wrote:
             | Empty string means "we know its blank" null means "we don't
             | know".
             | 
             | When it comes to datatyping, (the whole point of data types
             | in a db), null is its own datatype, so forcing the
             | allowance of nulls to get blank strings is kinda stupid and
             | only causes software/application level bugs.
        
             | jhgb wrote:
             | An empty string is a perfectly valid neutral element of the
             | free monoid over the alphabet in question. It's also _not_
             | a NULL value for this reason. If a NOT NULL column of
             | strings allows for all strings except for a very important
             | one, then that 's a very weirdly special-cased design of
             | the RDBMS.
        
           | jhgb wrote:
           | Obviously you prefix every string with a space and when
           | reading, strip the leading space. Then " " is your empty
           | string. ;)
           | 
           | For real though, no idea. I'm glad that I never had to touch
           | Oracle.
        
         | marcosdumay wrote:
         | > Empty strings are equivalent to null.
         | 
         | No, they are not. Empty strings are completely different from
         | null, and if you go returning them or testing for equality,
         | everything will break by random some single-digit percent of
         | the time. The same for concatenating, taking the length or
         | iterating.
         | 
         | I imagine there's some deterministic procedure to decide what
         | leads to an empty string and what leads to null. The one thing
         | I know is that if you insert it on a table, you will always get
         | null.
        
           | tux3 wrote:
           | Fascinating. Of course it would be too easy if they were
           | strictly the same!
           | 
           | It seems like reading the tale of a greek programmer cursed
           | by the gods to work with madness itself.
        
         | GordonS wrote:
         | It was years ago I first came across this, after I'd already
         | spent a lot of time with MySQL and MSSQL, and some time with
         | PostgreSQL and Firebase. But I still remember having a massive
         | WTF moment!
        
         | vbezhenar wrote:
         | One of oracle quirks for me is varchar2. What happened to
         | varchar1? Nobody knows.
        
           | tgv wrote:
           | TIMESTAMP WITH LOCAL TIMEZONE. Never again.
        
             | beamatronic wrote:
             | Let me guess, did you get hit with more than one 3:00am?
        
               | tmd83 wrote:
               | Let's not forget that Oracle DB uses the system timezone
               | as the datatype storage (not sure what other database do
               | to be honest) so unless you were running your DB machine
               | as UTC by default their timestamp storage would be
               | ambiguous for DST shift and that's their default. Why
               | wouldn't they store everything in UTC and use the system
               | timezone for parse/formatting I have no clue.
        
               | tracker1 wrote:
               | I've been pushing to run _ALL_ servers as UTC for a few
               | decades now... always store /transmit date+time as UTC as
               | well. If it's mapped to a locale, pair it with that
               | locale... let the client translate to/from local.
        
               | [deleted]
        
           | icedchai wrote:
           | varchar1 was varchar. I should say "is", since varchar is
           | still supported, they just recommend varchar2 since varchar
           | "might change" (probably not...)
        
           | SketchySeaBeast wrote:
           | Oh sorry, are you looking to insert 4001 characters in your
           | varchar2? Buckle up kids, things are gonna get rough.
        
             | kubanczyk wrote:
             | Or maybe 3999 chars, of which a couple are two-byte. More
             | fun.
        
               | gvenzl wrote:
               | Oracle supports up to 32k VARCHARs since 12.1 released
               | back in 2013.
               | 
               | It just needs to be enabled: https://docs.oracle.com/data
               | base/121/REFRN/GUID-D424D23B-093...
        
       | irrational wrote:
       | How can he write that long of a blog post about Oracle SQL and
       | not mention the number one sin? Null is equal to empty string.
        
         | q-big wrote:
         | > Null is equal to empty string.
         | 
         | marcosdumay disagrees:
         | 
         | https://news.ycombinator.com/item?id=28484963
         | 
         | NULL and empty string are often equal, but sometimes not. Life
         | would be boring otherwise.
        
       | submeta wrote:
       | The title should rather be: ,,Oracle Is the Devil".
        
       | smartmic wrote:
       | A completely prejudiced and highly reduced view on SQL
       | implementations, but one that could reflect the general mood: in
       | the camp of the good: PostgreSQL, SQLite; in that of the bad:
       | Oracle SQL, MSSQL. Somewhere in between with a tendency to good:
       | MariaDB
        
         | tracker1 wrote:
         | I'm not sure I'd include SQLite as particularly good... Same
         | goes for mySQL/MariaDB, too many oddities.
         | 
         | I do like PostgreSQL. MSSQL neutral to positive (nice to
         | administer/setup).
        
       | trollied wrote:
       | The main gripe the author has is him overlooking how DBMS_OUTPUT
       | works. He's better off either logging to a table, or using
       | UTL_FILE.
        
       | JacKTrocinskI wrote:
       | I have worked with the Oracle database for six years and haven't
       | had any major issues with error messages, in fact I'd say Oracle
       | did a really great job building an amazing database.
        
         | mrweasel wrote:
         | We run a large number of Oracle database for customers. I
         | mostly help manage the application running on top of the
         | database, and we have a DBA team handling the databases.
         | 
         | It's amazing to see how calmly they handle managing Oracle, but
         | their argumentation is also very Oracle-like: It's not a
         | database problem, you're just using it wrong. Which would be a
         | terrible answer, if they weren't right. I think most of us
         | forget that for all the terribleness of Oracle, they actually
         | do build a very stable and performant database, assuming you
         | can afford it.
        
         | _ZeD_ wrote:
         | you have been _really_ lucky, then.
        
           | robertlagrant wrote:
           | Really lucky on commission on Oracle sales :-)
        
         | collaborative wrote:
         | Oracle was the first DB I did major work with (12 yrs ago). I
         | have fond memories of that time. I created an automated
         | warehouse management system with it
         | 
         | Pros:
         | 
         | - pl/sql (I like it more than other flavors of sql, maybe
         | because it was the first one I used a lot)
         | 
         | -pl sql developer. Not the java one (sql developer). I loved
         | that you could see tabs in a list and in general it was smooth.
         | I still keep a thin client in my spare drive and use it with
         | delight from time to time
         | 
         | Cons:
         | 
         | -Installing and maintaining Oracle. But it wasn't terrible
         | either
         | 
         | -Having to read Burleston posts. Not sure if this has improved
         | 
         | I know I am biased by my experience, I've heard many horror
         | stories. I wouldn't choose Oracle today, but having to develop
         | for it wouldn't scare me either
        
           | dragonwriter wrote:
           | > pl/sql (I like it more than other flavors of sql, maybe
           | because it was the first one I used a lot)
           | 
           | pl/sql is not a flavor of SQL, it is a name for the separate
           | SQL-based "procedural" (imperative) language (hence the "pl")
           | supported by Oracle. The Oracle SQL dialect is usually
           | referred to as "Oracle SQL" if there is a need to distinguish
           | it.
        
         | neilsimp1 wrote:
         | I disagree with you but I'm not sure why you were downvoted.
        
         | NoGravitas wrote:
         | I'm not a DBA, but as a developer who's worked with Oracle off
         | and on for the last 15 years, I can say that the error messages
         | are frequently misleading, and do, indeed, sometimes appear to
         | be actively malicious. With other databases, they're at worst
         | useless.
        
       | r00tanon wrote:
       | Oh yeah. Been there and still have faded T's.
       | 
       | But then there's the licensing and the sales guys. Talk about
       | pure evil.
        
       | 29athrowaway wrote:
       | There are 2 types of technologies: the ones that people complain
       | about and the ones that nobody uses.
        
         | ok123456 wrote:
         | No. Some technologies are hostile to the people forced to use
         | them.
        
           | edgriebel wrote:
           | That's pretty much what OC is saying, any technology good
           | enough to be commonly used is going to suck and/or have sharp
           | edges
        
       | vjust wrote:
       | It seems to be the general rule of thumb that, when you want to
       | google for an oracle error message, then exclusion of both oracle
       | documentation site, and developer forums is your first criteria
       | on the search bar. Same applies to Microsoft (large parts of
       | MSDN), and now Amazon Web Services documentation (at least some
       | parts of it).
       | 
       | That's the reason StackOverflow works - it really solves
       | programmer's problems, instead of the strange dialects of English
       | and style that flourish on MS and Oracle and Java docs.
        
         | onlyrealcuzzo wrote:
         | I think the problem stems from 2 major parts.
         | 
         | A lot of times the people writing the code & designing the APIs
         | for the complex parts of AWS, Java, .NET, Spanner, etc... are
         | highly-technical and not exactly highly articulate.
         | 
         | And even the ones that are highly articulate usually have
         | trouble figuring out who exactly their audience is and what
         | their audience knows and to what degree they need to explain
         | things.
         | 
         | And even the select few programmers who are good at this, run
         | into another set of problems. The language they use amongst
         | themselves is usually highly technical (because it reduces
         | confusion and speeds up communication). However, many of the
         | readers of the documentation aren't going to understand a lot
         | of these terms or concepts. The language needs dumbed down.
         | 
         | Because this is time consuming and requires a lot of thought -
         | the documentation is usually written by technical writers.
         | While these people are usually good at figuring out the
         | audience and how best to communicate with the audience - they
         | have their own unique way of writing (for clarity) that usually
         | causes the documentation they produce to feel non-concise and
         | sometimes not even clear.
         | 
         | I think a good example of this is the Apigee documentation:
         | https://cloud.google.com/apigee
         | 
         | After reading the page - I only have the vaguest idea of what
         | it actually does and I have almost no idea when I should use it
         | and when I shouldn't or how it actually works (which, tbf,
         | probably isn't important at this stage).
        
         | punnerud wrote:
         | A lot of the good errors is gone when you switch from (Oracle)
         | SQL Developer to DataGrip.
         | 
         | So many reasons to use DataGrip, but often enough (>once a
         | month) I have to fire up SQL Developer to get line number
         | errors.
        
         | zaat wrote:
         | In my experience both Oracle and Microsoft documentation is
         | usually good to excellent,I actually want google to search
         | specifically on ms docs site most of the time. I do find AWS
         | docs to be lengthy and incomprehensible.
         | 
         | StackOverflow is mostly useful to quickly (and often dirtly)
         | solve issues that are burning now, without getting deeper
         | understanding of the subject. This isn't universally true, some
         | answers are exceptionally good.
        
           | cyberbanjo wrote:
           | Somewhat unrelated, the case where I want to "Google search
           | some specific site" is well suited to duckduckgo bangs, if
           | there is a bang for that site.
           | 
           | !msdn will search MS's developer network
        
             | zaat wrote:
             | Just like site:msdn.microsoft.com, just more convenient and
             | with worse results
        
         | rtkaratekid wrote:
         | I'm currently taking my first foray into the world of MS
         | applications for work. Have to write something that interacts
         | with an EWS server and I've been... overwhelmed with not only
         | the disorganization of their docs, but also the super strong
         | push to do everything in C# instead of just telling me which
         | SOAP (yes that soap) parameters/documents to use for certain
         | actions. If anyone here wants to defend MS and tell me I'm
         | horribly wrong and point me to some fantastic docs somewhere I
         | would be so delighted to be proven wrong.
        
           | pjungwir wrote:
           | Yes, pretty much everything is like that: explained in terms
           | of their web services wrapper, not the actual messages sent
           | on the wire. And if you want to log the SOAP messages going
           | back & forth, you have to implement a weird listener class to
           | get them. Microsoft came late to TCP/IP and the web because
           | of their contempt for open, text-based network protocols, and
           | you can _still_ sense it in their products. For instance the
           | C# web client is able to upload mime-encoded files, but the
           | form data name _must_ be `file`. It can 't be `photo`. Let
           | alone `photo1` in the same request as `photo2` or a bunch of
           | photos named `user[photos][]`. And you should try reading the
           | Stack Overflow answers for making Powershell print a raw HTTP
           | conversation the way `curl -v` can.
           | 
           | On the other hand, if you _do_ understand the underlying
           | network protocols and can read them (and find ways to view
           | what is happening), it is like a super power.
        
         | torginus wrote:
         | I'm not sure why the hate against MSDN - at least for .NET, I
         | found the documentation to be one of the best in the business
         | -even a decade ago. I'd only put Go's docs ahead in terms of
         | helpfulness. I cut my teeth writing .NET code, then switched to
         | Java writing apps on Android - the step down in doc quality was
         | quite significant.
        
           | habeebtc wrote:
           | Win32 and .Net docs are great!
           | 
           | Azure and Powershell docs leave a lot to be desired. A lot of
           | the time parameters are vaguely documented, return values
           | completely undocumented. You have to inspect the object
           | returned by a lot of things to get to understand what members
           | and methods it has, and what they mean.
           | 
           | Examples illustrating what formats it expects inputs in?
           | Forget it.
        
             | p1necone wrote:
             | Azure powershell docs are the _worst_. All you get told is
             | the name of fields, no indication of what they mean, or the
             | expected inputs /outputs.
        
               | krylon wrote:
               | I assume you have not encountered SharePoint. The
               | SharePoint documentation I could get my hands on - even
               | in books I paid for - was so bad it was like I was living
               | inside some David Lynch interpretation of Ancient Greek
               | myths of divine punishments unleashed upon the worst
               | sinners.
               | 
               | More than once, the "solution" to my problem was a blog
               | post by a SharePoint consultant from India describing
               | some undocumented flag to pass to some obscure command,
               | "but of course, you should never do this on a production
               | system". (I bear no ill will towards Indian SharePoint
               | consultants, to be clear. I just find it really creepy
               | they seem to enjoy this kind of torment.)
        
             | userbinator wrote:
             | The newest stuff tends to have the worst docs, since they
             | haven't had time to "mature" with corrections and such yet.
             | 
             | In contrast, Win32 which has been around for over 25 years
             | is mostly stable now.
        
           | danschuller wrote:
           | Links of MSDN pages seem like they have a life in weeks. They
           | can be helpful to stumble across but never as a longer term
           | reference.
        
           | Spooky23 wrote:
           | I don't work with Microsoft stuff as much anymore, but my big
           | beefs with Microsoft product documentation are:
           | 
           | - It is was often unclear what version of the "thing" was in
           | scope. An article from product version X will reference X-1
           | documention.
           | 
           | - Microsoft will gaslight you. If you interact with them on a
           | significant issue, you need to snapshot their product docs.
           | I've worked with Premier on issues when pushing products to
           | the edge of their limits, and the product group will edit the
           | product specs in near real-time.
        
             | tasogare wrote:
             | Microsoft is a complex and big entity. While most of it is
             | doing a bad job whatever it is, some parts are quite good.
             | In particular now that the C# stack is fully open, it's
             | very easy to report a bug (on GitHub) and developers are
             | reactive from my experience (submitted a bug impacting the
             | dotnet SDK).
        
               | Spooky23 wrote:
               | Agreed.
               | 
               | That issue left a sour taste in my mouth. As a customer,
               | I don't really need to be in the middle of corporate
               | politics, I have my own poisonous politics to deal with!
               | 
               | I share it because many folks can't conceive that sort of
               | thing being possible.
        
               | kiklion wrote:
               | I found the same. C# being on GitHub combined with the
               | Microsoft documentation has made working with it a
               | breeze. If I ever have any doubt, I just step into the
               | code itself and figure it out.
        
               | NicoJuicy wrote:
               | Even before that. A problem in EF, got fixed in 2 minor
               | versions later.
               | 
               | This was during .net 4.5 fyi, ages ago by now.
        
             | trevorishere wrote:
             | Most Docs have public repos on GitHub, so you can see the
             | PRs if the docs change.
        
             | initplus wrote:
             | The thing I find most annoying about Microsoft
             | documentation is that many old versions are still locked
             | behind an msdn paywall.
        
           | liversage wrote:
           | It's weird to read all the complaints about how bad
           | https://msdn.microsoft.com/ is. For quite some time all the
           | documentation including what was known as MSDN is now on
           | https://docs.microsoft.com/.
           | 
           | While I'm sure the complaints are valid (or was in the MSDN
           | days) I believe Microsoft is putting a lot of effort behind
           | these pages. You can provide feedback on pages that will
           | result in a GitHub issue being created. You can even make
           | pull requests.
           | 
           | While it's possible to provide feedback not all areas seem to
           | process this feedback in a timely manner which of course is
           | frustrating. However, the good parts (like .NET) are very
           | good.
        
             | initplus wrote:
             | This just isn't the case. Docs for many older releases are
             | still stuck behind a paywall on msdn, or even available
             | offline only.
        
             | userbinator wrote:
             | MSDN was great, Docs is not. There are still lots of
             | inexplicable errors from the migration of content, and they
             | seem content to outsource the labour of finding and fixing
             | them --- errors they themselves created --- to the
             | "community".
        
           | hangonhn wrote:
           | MSDN and the whole ecosystem around it is a gem. MSFT isn't
           | great at some (or even many) things but I've always felt MSFT
           | really put a lot of effort into developer experience. I don't
           | miss much about moving away from the MSFT orbit except for
           | MSDN and their development tooling. I kind of got some of it
           | back with Visual Studio Code but I still really miss the
           | Visual Studio level of experience.
        
             | gjvc wrote:
             | this guy came to the same conclusion
             | https://www.youtube.com/watch?v=KMU0tzLwhbE
        
             | pas wrote:
             | Well, PowerShell docs are next to useless. Maybe the other
             | parts are better. But I think this mythos of great docs for
             | proprietary MS stuff is just that, a myth.
        
               | fiddlerwoaroof wrote:
               | Yeah, I've tried a handful of Microsoft products and
               | MSFT's docs are ok for tutorials, but I've often found it
               | hard to find useful reference documentation: e.g. the
               | tutorial bits of Appcenter's Codepush and UI Testing
               | documentation are ok, but the reference documentation for
               | both is ambiguous and/or incomplete.
        
               | radicalbyte wrote:
               | With Microsoft, generally the documentation around the
               | edges isn't great. The edges being the "Microsoft
               | condoned solutions and generally anything coming from the
               | Office/Enterprise side. On the Enterprise side they often
               | have fantastic documentation but they have an amazing
               | talent for making it unfindable.
               | 
               | It's like they hire an army of noob-level interns who
               | churn out "getting started" articles, with the end result
               | being that you have to dig 5 pages deep into Google
               | result to get meaningful documentation (4 of those pages
               | are of people asking questions on Microsoft Connect or
               | the-site-that-shall-not-be-named or something).
        
               | omnicognate wrote:
               | They're not as good as they were. The win32 docs are a a
               | thing of beauty. I used to actively enjoy writing win32
               | code, in stark contrast to my experiences with Core Audio
               | which is a similar sort of C API but documented by Apple,
               | which is to say not at all. It is hell on earth.
               | 
               | Powershell, though. I don't know how you _could_ even
               | document powershell. It 's insane.
        
               | andix wrote:
               | I learned a lot of different programming languages. But
               | I've never seen something as cryptic as power shell.
               | 
               | Sometimes I write the same script as PS and as bash
               | script. For PS I usually need 3x more characters than for
               | bash.
               | 
               | There are some features though that are really useful.
               | But most of the time you won't know about them when you
               | need them.
        
               | zaphar wrote:
               | Character count is not generally a good measure of the
               | quality here. I think the biggest issues aren't the
               | verbosity but how complex it can be to express some of
               | the most common operations.
               | 
               | Filter is harder than it should be[0]. Same thing for map
               | 
               | [0]:
               | https://www.concurrency.com/blog/august-2018/powershell-
               | basi...
        
           | S_A_P wrote:
           | As far as OEM notes go ms is probably among the best but it's
           | not saying a lot. I find that most MS notes rarely explain
           | the how very well if at all. They usually just explain the
           | what. Sometimes that is enough, but usually I want to see
           | examples of how to use code to perform a task. For me at
           | least seeing examples of real world use helps infinitely more
           | than here is an object. Here are its public methods. Here are
           | its public fields and properties.
           | 
           | Stack Overflow excels at showing implementation examples
           | which, while the best way is not always highly rated, at
           | least shows a way. When I was more junior I would sometimes
           | take SO answers verbatim but I think now it at least gives me
           | something to think about improving.
        
           | Akronymus wrote:
           | It isn't a bad site per se.
           | 
           | Just most links seem to be broken.
        
           | HideousKojima wrote:
           | MSDN isn't terrible, but for answers.microsoft.com 90% of
           | questions are some outsourced foreign support rep telling the
           | user to run sfc /scannow and not looking into the issue any
           | further. Which makes it a huge pain for sysadmin type stuff,
           | their developer documentation is much better.
        
             | Philip-J-Fry wrote:
             | Yeah that site is terrible. Spent a few days digging for
             | solutions to fix an issue, always ended up back on that
             | site. Always same old useless information.
             | 
             | I had to go to like page 10 of Google results to find some
             | random sysadmin's blog which looked like it came straight
             | out of 2005 and guess what? Problem is explained clearly,
             | steps to fix it are laid out, sorted and wish I found the
             | website 2 days earlier.
        
             | segfaultbuserr wrote:
             | > _outsourced foreign support rep telling the user to run
             | sfc /scannow_
             | 
             | Sysadmin story. Recently I had a really strange problem
             | after a disk migration - defrag.exe simply would not run no
             | matter what (I needed it to TRIM the SSD), it just quits
             | without any messages, as if it's /bin/false. GUI had the
             | same problem.
             | 
             | The first search result was a thread at
             | answers.microsoft.com, they give the same canned "sfc
             | /scannow, dism /restorehealth, chkdsk /f" response. But OP
             | finally solved the problem on their own, the "Optimize
             | Drives" service was somehow been stopped, restarting it
             | solved the problem. I tried it, it didn't work. Having no
             | options, I decided to give the seemingly useless solution a
             | shot (why did I bother to try? This was after a disk
             | migration, I felt filesystem corruption could be real). It
             | finally worked after "chkdsk /f"...
             | 
             | I was genuinely impressed. It was the _first time ever_
             | that it actually fixed a real problem for me. Presumably
             | defrag.exe detected a filesystem anomaly and refused to
             | run.
        
             | m-p-3 wrote:
             | That's why you don't go there, you go on ServerFault and
             | SuperUser on StackExchange instead.
        
             | zaat wrote:
             | answers.microsoft.com accepted answers are mostly accepted
             | by the poor foreign support rep after OP have left
             | disappointed. It is somewhat similar in quality to yahoo
             | answers. Microsoft should be ashamed this pile of useless
             | bits is public.
        
               | ChrisMarshallNY wrote:
               | _> It is somewhat similar in quality to yahoo answers._
               | 
               | "How is babby formed?"
               | 
               |  _[EDIT] Corrected quote_
        
               | sk5t wrote:
               | "How is babby formed" - for those not participating in
               | the zeitgeist of 2006.
        
               | ChrisMarshallNY wrote:
               | Thanks for the correction.
               | 
               | I actually missed the original.
        
               | aksss wrote:
               | Let me make sure I understand the problem you're having
               | trouble getting answers from answers.microsoft.com, is
               | that correct? Please open the site answers.microsoft.com
               | in Microsoft Edge web browser and once the page loads,
               | look for answers there. This should solve the issue. Can
               | you also please run the windows memory diagnostic tool
               | and paste in the output in a reply to this message? Once
               | you have done that, please open your computer and make
               | sure that your CPU is firmly seated in its socket. That
               | will be required to help further. If this has helped
               | solve the problem finding answers on
               | answers.microsoft.com please mark it as correct.
        
               | tdeck wrote:
               | This is excellent and very representative.
        
           | mrweasel wrote:
           | Microsofts documentation is a mixed bag, but mostly rather
           | good, if you know how to read it.
           | 
           | An example of a place where it's bad is the Python API for
           | Azure. I needed to call some service, I forget which, and
           | everything was clearly just translated from C#. There's a
           | function which takes a string as an input, except it doesn't,
           | it takes one of three string, neither of which is mentioned.
           | I assume that in C# it's an enum, and Visual Studio will just
           | list the option for you.
        
             | dragonwriter wrote:
             | > Microsofts documentation is a mixed bag, but mostly
             | rather good, if you know how to read it.
             | 
             | "if you know how to read it" is...not a ringing endorsement
             | of documentation. But, its true that MS documentation is
             | less likely to be wrong once you understand what it is
             | trying to say than, say, Amazon's (though have glaring
             | omissions or things concealed by opaque organization is
             | quite common.)
        
           | puppet-master wrote:
           | The actual MSDN docs sections are uniformly reasonable in my
           | experience, but some galaxy brains decided to nest at least 2
           | (if not 3?) user support forums (think "my printer is
           | broken") under the microsoft.com domain. Searching their docs
           | usually requires a bunch of excludes
        
         | [deleted]
        
         | tialaramex wrote:
         | So spoiled by Rust now when using one of these "documented"
         | APIs.
         | 
         | * Rust's examples work, because the default behaviour of Rust's
         | automated testing is to test your documented examples (as well
         | as any unit tests you wrote), so, it's actually _more_ effort
         | to write examples that don 't work. If you're too lazy for
         | that, you're going to not write any examples, so then I at
         | least know I'm in uncharted territory.
         | 
         | * The relevant Rust source code is linked. Mostly. Rust's
         | source links don't chase macros, so it's conceivable your link
         | tells you that foo(X) is just the result of the macro
         | make_thing!(foo,X) and you need to chase how make_thing!() is
         | defined which is annoying. But 99% of the time you discover
         | immediately what's actually going on.
         | 
         | This week I would say about half of my time was spent fighting
         | with the C# library for talking to the Microsoft Graph API.
         | Both of which are, in theory, "documented" and yet I repeatedly
         | ended up cribbing from Stack Overflow answers or, after beating
         | my head against a wall, pasting URLs (which I already know will
         | go stale in a year or two) and Microsoft's uselessly bland
         | explanations for the obviously broken stuff as the excuse for
         | why we can't do things you would obviously anticipate being
         | possible.
         | 
         | Today I particularly liked: There are five documented ways to
         | make an educationClass. Most of them simply don't work
         | (unanswered Issues on github), and the error responses for
         | these methods are undocumented and lead nowhere. But one of
         | them does work. However the C# library drops the _output_ of
         | the API call for that method on the floor, presumably because
         | coping with this case was hard, and so the best option (as a
         | Stackoverflow post explains) is to reach inside the library,
         | dredge out the HTTP request it 's about to do, and perform that
         | request yourself, then do all the heavy lifting they couldn't
         | be bothered to do with the HTTP response to get what you
         | actually wanted (including a polling loop because apparently
         | nothing after the 1980s happened for Microsoft).
         | 
         | However, in the months since that Stackoverflow post was
         | written, the C# library API has changed, enough that the
         | example code wouldn't even build.
         | 
         | The change is undocumented (of course) and involves an
         | enumeration (also undocumented) which was auto-generated for
         | some reason. This feels like somebody was hoping it wouldn't
         | matter if they changed it, and that somebody was wrong. But if
         | they'd been forced to _document_ it then maybe they 'd have
         | either decided it wasn't worth it (still works as before) _or_
         | I 'd have saved ten minutes guessing how the API now works.
         | 
         | But now it's the weekend and I'm going to write Rust.
        
           | Zababa wrote:
           | A thing that helps with Rust, in my opinion, is that the
           | language is statically typed and people mostly write
           | functions. That makes it easy to glue the pieces together in
           | my head. So even if the documentation isn't great, I can find
           | a way to do what I want.
        
             | TheCoelacanth wrote:
             | Also, people don't overuse polymorphism like they do in
             | Java and C#.
        
               | tialaramex wrote:
               | There's still lots of polymorphism in Rust. Take for
               | example the way reqwest handles HTTP headers. Reqwest
               | cares that it's technically possible (albeit a bad idea)
               | to write arbitrary bytes into an HTTP header name _even
               | though those bytes are ASCII case crushed_. This being
               | understood, and Rust 's strings _necessarily_ being UTF-8
               | and not arbitrary bytes, a header 's name might not be a
               | string in Rust (though of course the vast majority are)
               | and so Reqwest carries around a whole marker type for
               | things-that-might-be-plausible-header-names, knowing that
               | all any non-bad-guys will care about is a few simple
               | ASCII strings but needing to correctly handle much more.
               | 
               | The two obvious things work, if you say the name of a
               | header, you get that header, and there are constants like
               | HOST defined for the most common headers to avoid typos,
               | but you _can_ do crazy stuff, and importantly if a
               | hostile peer sends you crazy stuff Reqwest promises to
               | cope.
               | 
               | Maybe it's that Rust's polymorphism is more explicit
               | through Traits.
               | 
               | If Pigeon, Duck and Emu are all Birds, and further more
               | Animals in C++ it's unclear what exactly this Bird
               | superclass does for me, still less Animal or when I,
               | knowing I have a Pigeon here, should consult the
               | documentation for Bird and/or Animal rather than or in
               | addition to that for Pigeon.
               | 
               | Whereas not only does the Emu not implement Fly, I can
               | feel comfortable guessing that the code implementing Fly
               | generically or for my Pigeon is unlikely to be related to
               | my problem that this Pigeon says "quack" and I should
               | instead look closely at the AnimalSound trait, given away
               | by the fact I had to explicitly name that trait to get
               | the "quack" noise from the pigeon.
        
         | FpUser wrote:
         | Win32 along with DirectX, Media Framworks etc. etc has one of
         | the best docs and examples ever from my experience.
        
         | justplay wrote:
         | also applies to salesforce.
        
         | Rd6n6 wrote:
         | The aws docs aren't concise, but they have a lot of good
         | information in them if you want to go in depth. I learned a lot
         | back when I was an intern by reading them
         | 
         | Iirc, the postgres docs were also good reading in a similar
         | way: not concise, but a lot of good information
        
         | throwaway675309 wrote:
         | Honestly I wouldn't mind the MSDN documentation so much or the
         | Microsoft forums if it didn't feel like it was constantly doing
         | this super tedious redirection hot potato because of their SSO
         | Microsoft live account bull crap.
        
         | NeutralForest wrote:
         | I can't agree with the Java one, there are great examples and
         | docs out there.
        
           | lubonay wrote:
           | Well, he said Java for Android. The Android SDK is a
           | capricious beast and the documentation is often outdated or
           | sub-par.
        
       | tartoran wrote:
       | Beside the regular complaints or praises I find oracle extremely
       | ugly, unaesthetic and inconsistent. I understand it is old and
       | has backwards compatibility but why would anyone choose oracle
       | over a newer modern RBDMS such as PostgreSQL or MSSQL for a new
       | project? Besides, Oracle is very expensive and very hard to get
       | rid of.
       | 
       | It is also a bit of an issue that they don't have a default IDE,
       | I worked with Rapid SQL which is a clunky, slow and riddled with
       | bugs IDE. I think the Rapid part of its name is pure gaslighting.
        
         | pas wrote:
         | There's Oracle SQL Developer :D
         | 
         | but as others mentioned, it's sold to executives, not to
         | technical personnel.
        
           | zip1234 wrote:
           | I actually like SQL Developer, though I haven't used it in
           | quite awhile. Remember it making my life a lot easier though!
        
         | cygned wrote:
         | > MSSQL
         | 
         | T-SQL is just so a weirdly ugly language and the feature set of
         | SQL Server is super weird.
         | 
         | If we can, we go with Postgres or MySQL.
        
           | tracker1 wrote:
           | There are definitely aspects of MSSQL I don't like... for the
           | most part I don't mind it. I will say, if you're willing to
           | pay the cost, getting advanced features setup and running in
           | MSSQL is easier than any other RDBMS I've ever tried.
           | 
           | That said, still inclined to use PostgreSQL. I do not like
           | MySQL at all, and every single time I've used it, I feel
           | cringes of absolute pain... starting with "utf8" isn't UTF8,
           | "utf8mb4" is. Or that indexing a binary field isn't case-
           | insensitive (ie, binary) by default.
        
       | nimbius wrote:
       | fun fact: if youve ever wondered why performance benchmarks dont
       | really seem to exist between things like mysql or postgres and
       | Oracle, its because this is expressly forbidden in your license.
        
       | forinti wrote:
       | Oracle SQL and PL/SQL is the better side of Oracle.
       | 
       | Having to install and maintain Oracle software is the real hell.
       | You sometimes need a patch for the installer (I kid you not, the
       | OAM 12.2.1.4 installer needs a patch to work on Oracle Linux).
       | The syntax for Advanced Rules in OAM is not completely described
       | in the manual, the examples are wrong, and you have to disable
       | the parser in version 12.2.1.4 because it is doesn't work.
       | 
       | It seems every little task turns into an investigation into a
       | series of bugs, errors, and undocumented features.
        
         | sebazzz wrote:
         | We had an extra optional curriculum on university, and to pass
         | you had to successfully install Oracle.
        
         | tracker1 wrote:
         | I hate that you have to install the Oracle Client, which is
         | its' own byzantine exercise in frustration to _use_ an
         | application that talks to Oracle.
         | 
         | Most other databases, the application includes a library that
         | communicates to the DB via a protocol implementation... Oracle
         | doesn't want this kind of use case.
        
       | edgriebel wrote:
       | That old Burleson Computing guy lives in my nightmares...
        
       | btilly wrote:
       | In theory, Oracle is able to store timestamps down to the
       | microsecond.
       | 
       | In practice it rounds off to the nearest second if you try to
       | touch it in any way, or even look at it slightly funny. So much
       | so that the microseconds are practically unusable.
        
         | elygre wrote:
         | With which data type do you experience this?
        
           | btilly wrote:
           | TIMESTAMP WITH TIME ZONE when I tried to do some date
           | arithmetic on an ETL job to load into Postgres.
           | 
           | Eventually I gave up, and fetched it back into Python and did
           | the arithmetic there before sending it on.
           | 
           | It may have been that there is an obvious answer which I
           | simply failed to find due to the fact that I hadn't used
           | Oracle in a decade. But I went down a number of dead ends
           | before coming up with an approach that worked. (And the
           | person before me had simply not noticed the problem...)
        
       | TruthWillHurt wrote:
       | I remember automating the deployment of Oracle DB to OpenStack
       | using Ansible. Finished playbook took 45 minutes to run, and
       | that's starting from a pre-configured snapshot!
       | 
       | Plus, Oracle charges per-cpu core used, so we had to license an
       | entire portion of our datacenter...
        
       | bgidley wrote:
       | My favourite oracle issue was an older version would not install
       | on Linux if you had number lock key on!
        
       | godshatter wrote:
       | I've been working with Oracle SQL for years, and it definitely
       | has it's idiosyncrasies. Part of their problem is (in my opinion)
       | an unwillingness to upgrade older programs and processes. I do a
       | lot of work in Pro*C, which is C with pre-compiled Oracle SQL and
       | PL/SQL embedded in normal C code. The SQL you can use in that
       | tool, for some reason, is a small subset of what you can use in
       | an SQL tool like PL/SQL Developer. You can't bring back
       | subselects in the select list, and you can't use inline views,
       | among others. Which baffles me, because it should all be SQL once
       | you hit their database.
       | 
       | Their sqlplus command-line tool for linux program was written in
       | 1982 it says, and it still doesn't allow for use of the up arrow
       | to retrieve history, and is very quirky with how it handles
       | editing of code. Their Oracle Forms product is very klunky, too.
       | I'm happy I don't need to set up Web Logic servers, because that
       | looks like a nightmare, too.
       | 
       | A little work on tooling would go a long way.
       | 
       | I am partial to using joins in where clauses instead of ansi sql
       | join statements, so I guess there's that.
        
       | woodgrainz wrote:
       | Drop the 'SQL', it's cleaner.
        
         | encryptluks2 wrote:
         | Came here to say the same
        
       | treypitt wrote:
       | Anecdotal, but wanted to mention positive experience with Oracle
       | support. I have posted questions on SO relating to Oracle SQL and
       | SqlDeveloper, and Oracle staff responded quickly with a solution
       | I accepted.
       | 
       | Shoutout to ThatJeffSmith for contributing to the community!
        
       | [deleted]
        
       | mypastself wrote:
       | Oh man, the infamous "Missing Right Parenthesis". Many an hour
       | has been spent trying to decipher Oracle's passive-aggressive -
       | and even actively misinformative - error messages.
        
       | kunagi7 wrote:
       | Well, I used to work with Oracle Databases and that "old man"
       | (Donald Burleson) website has saved me quite a few times.
       | 
       | I even remember the "Learn Oracle at the Sea" advertisement.
       | 
       | But that's the state of affairs and I try to avoid them as much
       | as I can. Amazon seems to think similar [0].
       | 
       | [0] https://www.youtube.com/watch?v=9yBP5gnnZi4
        
         | qsort wrote:
         | To be really fair, have you ever seen SQL error messages that
         | don't suck? I do agree that Oracle's are the worst by far
         | though.
        
           | kunagi7 wrote:
           | On Oracle most of the error messages are bad, not precise
           | enough or plainly wrong. Basic things like a wrong error line
           | (failure is on line 3, displays 5 or 6), messages that aren't
           | related to the real issue. You're pretty much on your own.
           | 
           | Also, I had to switch to DBeaver since Oracle SQL Developer
           | made things worse with random crashes and freezes. Back when
           | I used it, an easy way to freeze the editor was connecting to
           | a DB via VPN and then suddenly disconnect. The connection
           | gets stuck, parts of the UI get frozen and after a while the
           | whole thing freezes.
           | 
           | MySQL/MariaDB and Postgres are better.
        
             | mypastself wrote:
             | To be fair, I had to switch to DBeaver for Postgres as
             | well, as pgAdmin's usability has been steadily decreasing
             | since the first release of version 4. The lack of quality
             | GUI is essentially my only problem with Postgres, though.
        
           | tomrod wrote:
           | I feel Postgres and SQL Server are easier to grok error
           | states. Oracle seems to want to be an application platform
           | more than a datastore
        
             | yyyk wrote:
             | I don't have the experience to compare them to Oracle, but
             | SQL Server and Postgres do have their own issues.
             | 
             | The infamous MSSQL "string or binary data will be
             | truncated" error (fixed a while ago[0]), or the way either
             | deals with unqualified access to columns which leads to
             | surprises (e.g. in MSSQL subqueries or in Postgres's
             | SECURITY DEFINER procedures).
             | 
             | [0] https://docs.microsoft.com/en-us/sql/t-sql/database-
             | console-...
        
               | tomrod wrote:
               | Oh indeed, they all have quirks.
               | 
               | Oracle seems to have more than most, IMO.
               | 
               | I have a journeyman data engineering level experience
               | with each. Rare combo I guess, Data Scientist focus.
        
             | ptrwis wrote:
             | Exactly, Oracle should be chosen when business logic is
             | written in sql/plsql
        
         | thornygreb wrote:
         | My goto was Tom Kyte (https://asktom.oracle.com) for learning
         | the 'why'. Burleson is an interesting character, but not always
         | correct either.
        
           | msluyter wrote:
           | Tom Kyte books were great and beyond Oracle, I learned a lot
           | about databases generally from them.
        
             | pantulis wrote:
             | My SO was a Oracle DBA and she swore by Kyte's books.
        
           | kubanczyk wrote:
           | Last I've heard of Tom Kyte: https://archive.is/2015092814401
           | 1/http://www.oracle.com/tech...
           | 
           | His answers were sometimes prime examples of what is today
           | known as seriously unwelcoming. But I remember I un-learned
           | the "best practices" meme reading one of his answers. In fact
           | it was just one sentence, some concise version of "if the
           | 'best' setting existed, nobody would bother to make it a
           | configurable option". But it clicked.
           | 
           | Burleson's more advanced answers were of limited usefulness,
           | because they have never mentioned the exact oracle version.
           | They often have been only valid for antiques like Oracle 7.
        
         | edgriebel wrote:
         | Tom Kite is/was great, but his answers are the equivalent of
         | "I'm glad you asked, pull up a chair and let me tell you a
         | story about a white whale..."
        
       | dragosion wrote:
       | We need simple 2 line explainers with 10 lines of explainer
       | codes. Show the codes enough fluff and padding. Give the juice.
       | 
       | A wall of text with options and no actual code example that you
       | can try isn't going to help so much.
       | 
       | Options and parameters everywhere.
        
       | simonw wrote:
       | There was a comment on here a few years ago from a developer with
       | experience working on the Oracle database codebase which put me
       | off it for life: https://news.ycombinator.com/item?id=18442941
        
         | abledon wrote:
         | > https://news.ycombinator.com/item?id=18442941
         | 
         | thats quite beautiful in its scale of monstrousness
        
         | sschueller wrote:
         | OMG, comment right after would explain why we have a chip
         | shortage....
         | 
         | "Sounds like ASML, except that Oracle has automated tests.
         | 
         | (ASML makes machines that make chips. They got something like
         | 90% of the market. Intel, Samsung, TSMC etc are their
         | customers)
         | 
         | ASML has 1 machine available for testing, maybe 2. These are
         | machines that are about to be shipped, but not totally done
         | being assembled yet, but done enough to run software tests on.
         | This is where changes to their 20 million lines of C code can
         | be tested on. Maybe tonight, you get 15 minutes for your team's
         | work. Then again tomorrow, if you're lucky. Oh but not before
         | the build is done, which takes 8 hours.
         | 
         | Otherwise pretty much the same story as Oracle.
         | 
         | Ah no wait. At ASML, when you want to fix a bug, you first
         | describe the bugfix in a Word document. This goes to various
         | risk assessment managers. They assess whether fixing the bug
         | might generate a regression elsewhere. There's no tests,
         | remember, so they do educated guesses whether the bugfix is too
         | risky or not. If they think not, then you get a go to manually
         | apply the fix in 6+ product families. Without automated tests.
         | 
         | (this is a market leader through sheer technological
         | competence, not through good salespeople like oracle. nobody in
         | the world can make machines that can do what ASML's machines
         | can do. they're also among the hottest tech companies on the
         | dutch stock market. and their software engineering situation is
         | a 1980's horror story times 10. it's quite depressing, really)"
        
           | abledon wrote:
           | sheer dominance in their tech space using 0 tests, absolute
           | CDD
        
           | eloff wrote:
           | Where do they find people willing to put up with that. Some
           | people have a high threshold for job pain versus uncertainty
           | around job hunting pain. I'd much rather the latter.
        
         | tux3 wrote:
         | Oh no. What fresh biblical hell is this codebase.
        
         | isoprophlex wrote:
         | Malbolge: the enterprise edition
        
       ___________________________________________________________________
       (page generated 2021-09-10 23:01 UTC)