2010-10-13 58 views
14

No he usado Oracle por un tiempo, así que estoy un poco oxidado.error de oracle, columna no permitida aquí

Esta es mi mesa:

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

Pero cuando trato de insertar un valor de la siguiente manera:

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

que estoy recibiendo:

ORA-00984: column not allowed here 

que apunta a la columna de tipo al final. Tengo la sensación de que no estoy logrando algo correcto con el campo DATE porque nunca lo he usado realmente.

¿Qué he hecho mal?

Respuesta

21

Es necesario poner comillas alrededor de la varchar2 valora

Algo así como

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

Eso pareció hacer el truco. Gracias – Jackass

+3

Es un mensaje de error engañoso y el tipo de cosa que nos atrapa a todos, oxidado o no. – APC

+1

Tenga en cuenta que tiene que usar comillas simples: el uso de comillas dobles se resuelve en el mismo error. Probablemente porque las comillas dobles están reservadas para los nombres de las tablas, columnas, etc., lo que explica el mensaje de error. – iurii

3

¿Podría ser porque type es un Oracle reserved word?

Parece que esto no es un problema. Lee el comentario de APC.

No borro esta respuesta porque el comentario me parece útil.

+3

tipo es un reservado, pero no el tipo de palabra reservada que no puede ser utilizado. Esto se debe a que TYPE solo se convirtió en una palabra reservada en Oracle8 (la llamada versión ORDBMS). Para entonces existía una gran base de código que legítimamente utilizaba TYPE como nombre de columna. Por ejemplo, la vista USER_SOURCE del diccionario de datos. Así que prohibir el uso de TYPE como nombre de columna rompería muchas aplicaciones. – APC

Cuestiones relacionadas