2011-10-20 4 views
10

J'ai une table appelée calendriers."date" comme nom de colonne

L'une de ses colonnes est nommé « date »

Quand je veux choisir la colonne date donne l'erreur ORA-01747 à savoir de table.colonne non valide. Je suppose que cela arrive parce que 'date' est un mot réservé pour pl/sql. Le problème est qu'il est même pas possible de changer le nom de la colonne:

alter table calendars rename column date to date_d 

Le résultat est: ORA-00904 erreur: identificateur non valide.

Que conseillez-vous?

Merci.

+0

coller vos 'calendriers desc' s'il vous plaît – KevinDTimm

+0

Il * vraiment * devrait être valide à utiliser (any) mot réservé comme un nom de colonne comme '" date "' ou '[date]' (mais peut-être que ce dernier est TSQL?), mais je ne n'utilisez pas Oracle alors ... peut-être que le schéma n'est pas comme prévu? –

+0

(BTW, essayez comme je le pourrais, je ne peux même pas créer une table en oracle avec une colonne nommée date) – KevinDTimm

Répondre

16

Avez-vous essayé

select calendars.date from calendars; /* or you could alias "calendars" if you don't want to type so much */ 

Si cela ne fonctionne pas ou de l'aide, avez-vous essayé de laisser tomber la colonne (et peut-être essayer de référencement avec le préfixe du nom de la table: calendars.date)?


J'ai aussi trouvé ce post: How do I escape a reserved word in Oracle?

Il semble que Oracle sera sensible à la casse si vous utilisez des guillemets doubles afin

select "date" from calendars; 

n'est pas la même chose que

select "Date" from calendars; 
+0

il donne l'erreur ORA-01747 quand j'ajoute le nom de table ou l'alias. Je n'ai pas essayé de laisser tomber la colonne mais il n'y a aucun problème avec select * des calendriers. Donc, je n'ai pas besoin de laisser tomber la colonne si aucune autre action ne serait prise. – bonsvr

+1

sélectionnez "DATE" à partir des calendriers l'a résolu. C'était le DATE, pas la date. – bonsvr

+0

L'indice concernant la sensibilité à la casse a fait l'affaire pour moi. – mthomas

8

Essayez d'échapper le mot réservé avec des guillemets.

select "date" from calendars 
+0

Erreur ORA-00904 – bonsvr

+0

Les guillemets semblent faire en sorte qu'Oracle agisse en respectant la casse lors de la recherche de la colonne 'date'. – FrustratedWithFormsDesigner

+0

@FrustratedWithFormsDesigner Cela est vrai. Case doit correspondre exactement lors de l'utilisation de guillemets. –

1

jour est un mot-clé réservé et ne peut donc pas être utilisé comme

Date SELECT de certains tableau

il peut y avoir plusieurs solutions pour le problème

  • La colonne date doit à être inclus entre les parenthèses comme

SELECT [date] FROM tableName

  • Enfermez le mot-clé réservé dans les apostrophes inverses

SELECT 'date' from tableName

  • Utilisez alias

SELECT tableName.date from tableName

Questions connexes