2011-10-20 29 views
10

Tôi có một bảng gọi là lịch."ngày" làm tên cột

Một trong những cột của nó được đặt tên là 'date'

Khi tôi muốn chọn cột ngày nó mang lại cho lỗi ORA-01.747 cụ thể là table.column không hợp lệ.

select date from calendars 

Tôi đoán điều này xảy ra vì 'ngày' là từ dành riêng cho pl/sql. Vấn đề là thậm chí không thể thay đổi tên cột:

alter table calendars rename column date to date_d 

Kết quả là: ORA-00904 lỗi: số nhận dạng không hợp lệ.

Bạn nên làm gì?

Cảm ơn.

+0

dán 'Lịch desc' của bạn xin vui lòng – KevinDTimm

+0

Nó * thực sự * nên có giá trị sử dụng (bất kỳ) từ dành riêng như một tên cột là '" date "' hoặc '[date]' (nhưng có lẽ sau này là TSQL?), nhưng tôi không không sử dụng Oracle nên ... có lẽ lược đồ không như mong đợi? –

+0

(BTW, thử như tôi có thể, tôi thậm chí không thể tạo một bảng trong oracle với một cột có tên ngày) – KevinDTimm

Trả lời

16

Các bạn đã thử

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

Nếu điều đó không làm việc hoặc giúp đỡ, có bạn đã cố gắng xóa cột (và có thể thử tham khảo nó với tên bảng tiền tố: calendars.date)?


Tôi cũng tìm thấy bài đăng này: How do I escape a reserved word in Oracle?

Dường như Oracle sẽ là trường hợp nhạy cảm nếu bạn sử dụng dấu ngoặc kép để

select "date" from calendars; 

là không giống như

select "Date" from calendars; 
+0

nó mang lại lỗi ORA-01747 khi tôi thêm tên bảng hoặc bí danh. Tôi đã không cố gắng để thả các cột nhưng không có vấn đề với chọn * từ lịch. Vì vậy, tôi không cần phải thả cột nếu bất kỳ hành động nào khác sẽ không được thực hiện. – bonsvr

+1

chọn "DATE" từ lịch đã giải quyết. Đó là DATE, không phải ngày. – bonsvr

+0

Các gợi ý liên quan đến trường hợp nhạy cảm đã làm các trick cho tôi. – mthomas

8

Hãy thử thoát khỏi từ dành riêng với dấu ngoặc kép.

select "date" from calendars 
+0

Lỗi ORA-00904 – bonsvr

+0

Dấu ngoặc kép dường như làm cho Oracle hoạt động theo kiểu chữ thường khi tìm cột 'ngày'. – FrustratedWithFormsDesigner

+0

@FrustratedWithFormsDesigner Đó là sự thật. Trường hợp phải khớp chính xác khi sử dụng dấu ngoặc kép. –

1

ngày là một từ khóa dành riêng và do đó không thể được sử dụng như

ngày SELECT từ một số bảng

có thể có nhiều giải pháp cho vấn đề

  • Cột ngày cần được đính kèm trong các dấu ngoặc vuông như

SELECT [date] FROM tableName

  • Kèm theo từ khóa dành riêng trong backticks

SELECT 'date' from tableName

  • Sử dụng bí danh

SELECT tableName.date from tableName