2010-10-13 15 views
14

Nie używałem Oracle przez jakiś czas, więc jestem trochę zardzewiały.Błąd oracle, kolumna niedozwolona tutaj

To jest mój tabeli:

create table calendar(
username VARCHAR2(12), 
content VARCHAR2(100), 
dateContent DATE, 
type CHAR(3) CHECK (type IN ('PUB', 'PRV'))); 

Ale gdy próbuję wstawić wartość takiego:

insert into calendar 
(username, content, dateContent, type) 
values 
(chris, assignment due, to_date('01-OCT-2010 13:00','DD-MON-YYYY HH24:MI'), PUB) 
/

Dostaję:

ORA-00984: column not allowed here 

wskazując na kolumnie typu na końcu. Mam wrażenie, że nie robię nic dobrego z polem DATE, ponieważ nigdy tak naprawdę go nie używałem.

Co zrobiłem źle?

Odpowiedz

21

Musisz umieścić cytaty Round varchar2 wartości

Coś

insert into calendar(username, 
        content, 
        dateContent, 
        type) 
    values('chris', 
     'assignment due', 
     to_date('01-OCT-2010 13:00','DD-MON-YYYY HH24:MI'), 
     'PUB'); 
+0

To chyba załatwiło sprawę. Dzięki – Jackass

+3

Jest to mylący komunikat o błędzie i coś, co nas wszystkich pochłania, zardzewiałe czy nie. – APC

+1

Pamiętaj, że musisz używać pojedynczych cudzysłowów - użycie podwójnego cudzysłowu rozwiązuje ten sam błąd. Prawdopodobnie dlatego, że podwójne cudzysłowy są zarezerwowane dla nazw tabel, nazw kolumn itp., Co wyjaśnia komunikat o błędzie. – iurii

3

Czy to możliwe, ponieważ type to Oracle reserved word?

Wygląda na to, że to nie jest problem. Przeczytaj komentarz od APC.

Nie usuwam tej odpowiedzi, ponieważ uważam, że komentarz jest przydatny.

+3

typu jest zarezerwowana ale nie rodzaj zarezerwowanym słowem, które nie mogą być użyte. Wynika to z tego, że TYPE stało się tylko słowem zastrzeżonym w Oracle8 (tak zwane wydanie ORDBMS). Do tego czasu istniała ogromna baza kodów, która słusznie używała TYPE jako nazwy kolumny. Na przykład widok USER_SOURCE ze słownikiem danych. Zatem zablokowanie użycia TYPE jako nazwy kolumny mogłoby zepsuć wiele aplikacji. – APC

Powiązane problemy