2010-10-13 31 views
14

Tôi đã không sử dụng Oracle trong một thời gian vì vậy tôi là một chút gỉ.lỗi oracle, cột không được phép ở đây

Đây là bàn của tôi:

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

Nhưng khi tôi cố gắng để chèn một giá trị như thế này:

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

Tôi nhận:

ORA-00984: column not allowed here 

trỏ đến cột loại cuối cùng. Tôi có một cảm giác tôi không nhận được một cái gì đó đúng với các lĩnh vực DATE như tôi đã không bao giờ thực sự sử dụng nó.

Tôi đã làm gì sai?

Trả lời

21

Bạn cần phải đặt dấu ngoặc kép quanh varchar2 giá trị

Something như

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

Điều đó dường như làm điều này. Cảm ơn – Jackass

+3

Đó là một thông báo lỗi gây hiểu lầm và loại điều bắt chúng ta ra, gỉ hay không. – APC

+1

Lưu ý rằng bạn phải sử dụng dấu nháy đơn - sử dụng dấu ngoặc kép sẽ giải quyết vào cùng một lỗi. Có lẽ vì dấu nháy kép được dành riêng cho tên bảng, tên cột, v.v., giải thích thông báo lỗi. – iurii

3

Có thể vì typeOracle reserved word?

Có vẻ như đây không phải là vấn đề. Đọc nhận xét của APC.

Tôi không xóa câu trả lời này vì tôi thấy nhận xét hữu ích.

+3

TYPE là một reserved nhưng không phải là loại từ dành riêng mà không thể được sử dụng. Điều này là do TYPE chỉ trở thành một từ dành riêng trong Oracle8 (cái gọi là bản phát hành ORDBMS). Bởi sau đó đã có một codebase khổng lồ trong sự tồn tại đã sử dụng hợp pháp TYPE như một tên cột. Ví dụ: chế độ xem USER_SOURCE của từ điển dữ liệu. Vì vậy, việc cấm sử dụng TYPE làm tên cột sẽ phá vỡ rất nhiều ứng dụng. – APC

Các vấn đề liên quan