2009-02-18 2 views
37

Tôi nghĩ rằng dấu ngoặc kép (") chỉ đơn giản là một loại nhóm marker nhưng tôi gỡ lỗi một số mã NHibernate và nhận thấy rằng trong khiChính xác thì dấu ngoặc kép xung quanh tên bảng là gì?

SELECT * FROM site WHERE site_id = 3; 

Hoạt động tốt

SELECT * FROM "site" WHERE site_id = 3; 

không thành công với một bảng hoặc chế độ xem không tồn tại lỗi.

Điều gì cho?

Trả lời

78

Đưa dấu ngoặc kép xung quanh số nhận dạng trong Oracle gây ra Oracle để xử lý các định danh là trường hợp nhạy cảm hơn là sử dụng mặc định của trường hợp vô cảm. Nếu bạn tạo một bảng (hoặc một cột) với dấu nháy kép xung quanh tên, bạn phải luôn luôn tham chiếu đến định danh với dấu ngoặc kép và bằng cách xác định chính xác trường hợp (ngoại trừ tất cả các định danh chữ hoa, trong đó dấu nháy kép là vô nghĩa).

Theo trang bìa, Oracle luôn thực hiện khớp định danh phân biệt chữ hoa chữ thường. Nhưng nó luôn luôn định danh các mã định danh không được trích dẫn kép lên chữ hoa trước khi thực hiện khớp. Nếu bạn đặt dấu nháy kép xung quanh một số nhận dạng, Oracle sẽ bỏ qua việc truyền sang chữ hoa.

Vì vậy, nếu bạn làm điều gì đó như

CREATE TABLE my_table( 
    col1 number, 
    col2 number 
) 

bạn có thể

SELECT * FROM my_table 
SELECT * FROM MY_TABLE 
SELECT * FROM My_Table 
SELECT * FROM "MY_TABLE" 

nhưng cái gì đó như

SELECT * FROM "my_table" 

sẽ thất bại.

Mặt khác, nếu bạn làm điều gì đó như

CREATE TABLE "my_other_table"( 
    col1 number, 
    col2 number 
) 

bạn không thể làm

SELECT * FROM my_other_table 
SELECT * FROM MY_OTHER_TABLE 
SELECT * FROM My_Other_Table 
SELECT * FROM "MY_OTHER_TABLE" 

nhưng điều này

SELECT * FROM "my_other_table" 

sẽ làm việc

+1

Câu trả lời này bỏ qua thực tế là nó cũng cho phép số nhận dạng chứa các ký tự không hợp pháp, chẳng hạn như ký tự khoảng trắng. Nó cũng có thể là thực hành tốt nhất để chỉ sử dụng chữ hoa, chữ số và gạch dưới. Làm như vậy sẽ làm cho cuộc sống của mọi người dễ dàng hơn. – jpmc26

9

Nó nên được bổ sung số nhận dạng đó trong dấu ngoặc kép có thể chứa các ký tự đặc biệt, ví dụ: "a-b c.d" là số nhận dạng hợp lệ.