Comment échapper à un mot réservé dans Oracle?


134

Dans TSQL, je pourrais utiliser quelque chose comme Select [table] from tablenamepour sélectionner une colonne nommée "table".

Comment faire cela pour les mots réservés dans oracle?

Edit: J'ai essayé des accolades, des guillemets doubles, des guillemets simples et des guillemets, ils ne fonctionnent pas ...

Pour clarifier davantage, j'ai une colonne que quelqu'un a nommée comment. Comme il s'agit d'un mot réservé, oracle est en train d'essayer de sélectionner avec lui, ce qui échoue lors de l'analyse de la requête. J'ai essayé de sélectionner "comment" depuis le nom de la table, mais cela n'a pas fonctionné. Je vais vérifier le cas et revenir.


Réponses:


195

À partir d'une recherche rapide, Oracle semble utiliser des guillemets doubles ( "par exemple "table") et nécessite apparemment la casse correcte - alors que, pour toute personne intéressée, MySQL utilise par défaut des guillemets (`) sauf lorsqu'il est configuré pour utiliser des guillemets doubles pour la compatibilité.


2
Je vous ai marqué parce que j'ai essayé d'échapper au mot en utilisant des guillemets et cela n'a pas fonctionné.
Spence

13
Par défaut, Oracle validera tous les identifiants. Donc, si vous avez besoin de caractères minuscules ou de caractères spéciaux, ou si l'identifiant est un mot réservé Oracle, il doit être placé entre guillemets. Étant donné que les guillemets conservent la casse, l'identifiant doit également être la casse correcte.
Métro

J'ai créé une table avec un champ «alias» à l'aide de SQL Developer v4 frappant une base de données Oracle 11g Release 2 Express. Ma sélection a fonctionné lorsque j'ai écrit "ALIAS" au lieu d'alias.
Broken_Window

Ne fonctionnant pas pour les déclencheurs, essayez de créer un déclencheur pour une table avec un nom qui enfreint ORA-30507 (par exemple DATABASE).
Fleuv

Essayez-le en majuscules "TABLE".
RSHAP

34

Oracle nécessite normalement des guillemets doubles pour délimiter le nom des identificateurs dans les instructions SQL, par exemple

SELECT "MyColumn" AS "MyColAlias"
FROM "MyTable" "Alias"
WHERE "ThisCol" = 'That Value';

Cependant, il permet gracieusement d'omettre les guillemets, auquel cas il convertit tranquillement l'identifiant en majuscules:

SELECT MyColumn AS MyColAlias
FROM MyTable Alias
WHERE ThisCol = 'That Value';

est converti en interne en quelque chose comme:

SELECT "ALIAS" . "MYCOLUMN" AS "MYCOLALIAS"
FROM "THEUSER" . "MYTABLE" "ALIAS"
WHERE "ALIAS" . "THISCOL" = 'That Value';

8

les guillemets doubles fonctionnaient dans oracle lorsque j'avais le mot-clé comme nom de colonne.

par exemple:

select t."size" from table t 

3

Oracle utilise des guillemets doubles, mais vous devrez probablement placer le nom de l'objet en majuscules, par exemple "TABLE". Par défaut, si vous créez un objet sans guillemets, par exemple

CREATE TABLE table AS ...

Oracle créerait l'objet en majuscules . Cependant, le référencement n'est pas sensible à la casse sauf si vous utilisez des guillemets doubles!


-8

vous devez renommer la colonne en un autre nom car TABLE est réservée par Oracle.

Vous pouvez voir tous les mots réservés d'Oracle dans la vue oracle V$RESERVED_WORDS.


J'obtiens ORA-00942quand j'essaye un select * from V$RESERVED_WORDS.
ceving
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.