Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle SELECT - Guillemets doubles ou pas de guillemets doubles ?

Les réponses et les liens concernant la casse sont corrects, mais votre situation va un peu au-delà d'un simple problème de casse, à la fois parce que le nom de votre colonne a commencé par un trait de soulignement et parce que votre client vous cache apparemment généralement la citation.

Si vous avez essayé de créer une table avec une colonne appelée _id , sans le citer, vous obtiendrez une erreur 'ORA-00911 :caractère non valide', dont le texte de cause indique que 'les identifiants ne peuvent pas commencer par un caractère ASCII autre que des lettres et des chiffres' ; ce qui est également faux puisqu'il ne peut pas non plus commencer par un chiffre (par exemple, 0_id donne 'ORA-00904 ::identifiant invalide'). Ceci est sauvegardé par les règles de dénomination des objets de base de données :

Il semble donc qu'Aqua Data Studio suive une convention consistant à placer la version majuscule du nom d'objet que vous fournissez entre guillemets doubles, une pratique mentionnée dans l'un des articles liés.

À partir de ce que vous avez montré, select _id from ... est transmis à Oracle sous la forme select "_ID" from ... , ce qui est bien si le nom de la colonne a été créé sous la forme "_ID" . Il semble que ce soit le cas pour table1 , mais table2 a été créé en tant que "_id" - afin que cette incompatibilité de casse génère l'ORA-00904 légitime que vous voyez.

Votre client ne modifie pas un nom de colonne qui est déjà entouré de guillemets doubles, donc select "_id" from ... est transmis à Oracle tel quel et fonctionne correctement pour table2 (mais, à l'inverse, échouerait pour table1 ).

Oracle exige que le nom soit entouré de guillemets doubles s'il ne suit pas les règles des identifiants sans guillemets et s'il a été créé avec guillemets - à moins que la valeur entre guillemets d'origine soit valide de toute façon, c'est-à-dire qu'elle suive les règles sans guillemets et ait été saisie en majuscules. Étant donné que le nom de votre colonne commence par un trait de soulignement, en ce qui concerne Oracle, toutes les références à celui-ci doivent être placées entre guillemets, quelle que soit la casse. Votre client fait cela en arrière-plan si vous ne l'avez pas cité vous-même.

Suivre les conseils que d'autres ont donnés pour éviter les identifiants entre guillemets et toujours utiliser des noms valides sans guillemets éviterait des problèmes comme celui-ci.