sql >> Databáze >  >> RDS >> Oracle

Oracle SELECT – dvojité uvozovky nebo žádné uvozovky?

Odpovědi a odkazy týkající se velkých a malých písmen jsou správné, ale vaše situace jde trochu za hranice jednoduchého případu, protože název vašeho sloupce začínal podtržítkem a protože váš klient před vámi zjevně obvykle skrývá citaci.

Pokud jste se pokusili vytvořit tabulku se sloupcem nazvaným _id , aniž byste to citovali, pak byste dostali chybu 'ORA-00911:neplatný znak', jejíž text příčiny říká 'identifikátory nesmí začínat žádným znakem ASCII jiným než písmeny a číslicemi'; což je ve skutečnosti také špatně, protože ani nemůže začínat číslem (například 0_id dává 'ORA-00904::neplatný identifikátor'). To je podpořeno pravidly pojmenovávání objektů databáze :

Zdá se tedy, že Aqua Data Studio se řídí konvencí uzavírání velké verze názvu objektu, který zadáte, do dvojitých uvozovek, což je praxe zmíněná v jednom z propojených příspěvků.

Z toho, co jste ukázali, select _id from ... bude předán Oracle jako select "_ID" from ... , což je v pořádku, pokud byl název sloupce vytvořen jako "_ID" . Zdá se, že to je případ table1 , ale table2 byl vytvořen jako "_id" - takže tento nesoulad velkých a malých písmen vygeneruje legitimní ORA-00904, který vidíte.

Váš klient neupravuje název sloupce, který je již uzavřen ve dvojitých uvozovkách, takže select "_id" from ... je předán Oracle tak, jak je, a funguje správně pro table2 (ale naopak by selhal pro table1 ).

Oracle vyžaduje, aby jméno bylo uzavřeno do dvojitých uvozovek, pokud nesplňuje pravidla pro identifikátory neuvedené v uvozovkách a pokud bylo vytvořeno jako v uvozovkách – pokud původní hodnota v uvozovkách stejně nebyla platná, tj. neřídila se pravidly v uvozovkách a byla zadána velkými písmeny. Protože název vašeho sloupce začíná podtržítkem, pokud jde o Oracle, všechny odkazy na něj musí být uzavřeny do dvojitých uvozovek bez ohledu na velikost písmen. Váš klient to jen dělá na pozadí, pokud jste to sami necitovali.

Pokud se budete řídit radami ostatních, abyste se vyhnuli identifikátorům v uvozovkách a vždy používali jména, která jsou platná bez uvozovek, takovým problémům se vyhnete.



  1. Drupal hook_submit zápis do db

  2. Kdy je čas upgradovat na SQL?

  3. Oznámení ClusterControl 1.7.5:Pokročilá údržba a podpora clusteru pro PostgreSQL 12 a MongoDB 4.2

  4. Chování sql::SQLString