2011-10-20 18 views
10

Ho una tabella chiamata calendari."data" come nome di colonna

Una delle sue colonne si chiama 'data'

Quando voglio selezionare la colonna di data dà errore ORA-01747 e cioè tabella.colonna valido.

select date from calendars 

Immagino che questo accada perché "data" è una parola riservata per pl/sql. Il problema è che non è nemmeno possibile cambiare il nome della colonna:

alter table calendars rename column date to date_d 

risultato è: ORA-00904 errore: identificatore non valido.

Cosa consigli?

Grazie.

+0

incollare i 'calendari decrescente' Per favore – KevinDTimm

+0

E * veramente * dovrebbe essere valido da usare (qualsiasi) parola riservata come nome di una colonna come "data" 'o' [data] '(ma forse quest'ultima è TSQL?), ma io usare Oracle così ... forse lo schema non è come previsto? –

+0

(BTW, prova come potrei, non riesco nemmeno a creare una tabella in oracle con una colonna denominata data) – KevinDTimm

risposta

16

Hai provato

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

Se questo non funziona o aiutare, hai provato lasciando cadere la colonna (e magari provare riferimento con il nome della tabella prefisso: calendars.date)?


ho trovato anche questo post: How do I escape a reserved word in Oracle?

Sembra che Oracle sarà maiuscole e minuscole se si utilizzano le virgolette doppie in modo

select "date" from calendars; 

non è lo stesso di

select "Date" from calendars; 
+0

dà errore ORA-01747 quando aggiungo il nome della tabella o l'alias. Non ho provato a rilasciare la colonna ma non c'è alcun problema con select * dai calendari. Quindi non ho bisogno di rilasciare la colonna se non verrebbero prese ulteriori azioni. – bonsvr

+1

seleziona "DATA" dai calendari risolto. Era il DATE, non la data. – bonsvr

+0

Il suggerimento relativo alla case-sensibilità ha fatto il trucco per me. – mthomas

8

Prova a sfuggire alla parola riservata con virgolette.

select "date" from calendars 
+0

Errore ORA-00904 – bonsvr

+0

Le doppie virgolette sembrano far sì che Oracle agisca in modo sensibile alla distinzione tra maiuscole e minuscole quando cerca la colonna 'date'. – FrustratedWithFormsDesigner

+0

@FrustratedWithFormsDesigner Questo è vero. Il caso deve corrispondere esattamente quando si usano virgolette. –

1

data è una parola chiave riservata e quindi non può essere utilizzato come

data SELECT da qualche tavolo

ci possono essere molteplici soluzioni per il problema

  • La colonna data ha la necessità di essere racchiuso tra parentesi come

SELECT [date] FROM tableName

  • racchiudere la parola chiave riservata in backticks

SELECT 'date' from tableName

  • Usa alias

SELECT tableName.date from tableName

Problemi correlati