sql >> Database teknologi >  >> RDS >> Oracle

Oracle SELECT - Dobbelte anførselstegn eller ingen dobbelte anførselstegn?

Svarene og links om casing er korrekte, men din situation går lidt ud over et simpelt sagsproblem, både fordi dit kolonnenavn startede med en understregning, og fordi din klient tilsyneladende normalt skjuler citatet for dig.

Hvis du forsøgte at oprette en tabel med en kolonne kaldet _id , uden at citere det, så vil du få en 'ORA-00911:ugyldigt tegn'-fejl, hvis årsagstekst siger 'identifikatorer må ikke starte med andre ASCII-tegn end bogstaver og tal'; hvilket faktisk også er forkert, da det heller ikke kan starte med et tal (f.eks. 0_id giver 'ORA-00904::ugyldig identifikator'). Dette er sikkerhedskopieret af navngivningsregler for databaseobjekter :

Så det ser ud til, at Aqua Data Studio følger en konvention om at omslutte versionen med store bogstaver af det objektnavn, du angiver, i dobbelte anførselstegn, en praksis nævnt i et af de linkede indlæg.

Fra det du har vist, select _id from ... sendes til Oracle som select "_ID" from ... , hvilket er fint, hvis kolonnenavnet blev oprettet som "_ID" . Det ser ud til, at det er tilfældet for table1 , men table2 blev oprettet som "_id" - så uoverensstemmelsen mellem sager genererer den legitime ORA-00904, du ser.

Din klient ændrer ikke et kolonnenavn, der allerede er omgivet af dobbelte anførselstegn, så select "_id" from ... videregives til Oracle, som det er, og fungerer OK for table2 (men omvendt ville det mislykkes for table1 ).

Oracle kræver, at navnet er omgivet af dobbelte anførselstegn, hvis det ikke følger reglerne for identifikatorer uden anførselstegn, og hvis det er oprettet som citat - medmindre den oprindelige citerede værdi alligevel var gyldig, dvs. følger reglerne uden anførselstegn og blev indtastet med store bogstaver. Da dit kolonnenavn starter med en understregning, skal alle henvisninger til det for Oracles vedkommende stå i dobbelte anførselstegn uanset tilfældet. Din klient gør det bare i baggrunden, hvis du ikke selv har citeret det.

Ved at følge de råd, som andre har givet om at undgå citerede identifikatorer og altid at bruge navne, der er gyldige uden citater, vil problemer som dette undgås.



  1. Send værdier læst fra en fil som input til en SQL-forespørgsel i Oracle

  2. Hvordan finder man ud af fragmenterede indekser og defragmenterer dem i PostgreSQL?

  3. Fejl ved cast-konvertering af SQL

  4. Hash joins på nullable kolonner