Làm thế nào để tôi thoát khỏi một từ dành riêng trong Oracle?


134

Trong TSQL tôi có thể sử dụng một cái gì đó như Select [table] from tablenameđể chọn một cột có tên là "bảng".

Làm thế nào để tôi làm điều này cho các từ dành riêng trong nhà tiên tri?

Chỉnh sửa: Tôi đã thử niềng răng vuông, dấu ngoặc kép, dấu ngoặc đơn và dấu ngoặc kép, chúng không hoạt động ...

Để làm rõ hơn, tôi có một cột mà ai đó có tên bình luận. Vì đây là một lời tiên tri dành riêng đang chộp lấy một sự chao đảo cố gắng chọn nó, nó thất bại khi phân tích cú pháp truy vấn. Tôi đã thử Chọn "bình luận" từ tablename nhưng không được. Tôi sẽ kiểm tra trường hợp và quay lại.


Câu trả lời:


195

Từ một tìm kiếm nhanh, Oracle dường như sử dụng dấu ngoặc kép ( "ví dụ "table") và rõ ràng yêu cầu trường hợp chính xác , vì bất kỳ ai quan tâm, MySQL đều mặc định sử dụng backticks (`) trừ khi được đặt để sử dụng dấu ngoặc kép để tương thích.


2
Tôi đánh dấu bạn xuống vì tôi đã cố gắng thoát từ bằng cách sử dụng dấu ngoặc kép và nó không hoạt động.
Spence

13
Theo mặc định, Oracle sẽ nâng cao mọi định danh. Vì vậy, nếu bạn cần ký tự chữ thường hoặc ký tự đặc biệt hoặc mã định danh là một từ dành riêng của Oracle, thì nó cần được đặt trong dấu ngoặc kép. Vì dấu ngoặc kép bảo tồn trường hợp, nên định danh cũng cần phải là trường hợp chính xác.
Tàu điện ngầm

Tôi đã tạo một bảng có trường "bí danh" bằng SQL Developer v4, đánh vào cơ sở dữ liệu Oracle 11g Release 2 Express. Lựa chọn của tôi hoạt động khi tôi viết "ALIAS" thay vì bí danh.
Broken_Window 11/03/2016

Không hoạt động cho các trình kích hoạt, hãy thử tạo một trình kích hoạt cho một bảng có tên vi phạm ORA-30507 (ví dụ: DATABASE).
Fleuv

Hãy thử nó trong tất cả chữ hoa "BẢNG".
RSHAP

34

Oracle thường yêu cầu dấu ngoặc kép để phân định tên của mã định danh trong các câu lệnh SQL, vd

SELECT "MyColumn" AS "MyColAlias"
FROM "MyTable" "Alias"
WHERE "ThisCol" = 'That Value';

Tuy nhiên, nó cho phép bỏ qua dấu ngoặc kép, trong trường hợp đó, nó lặng lẽ chuyển đổi định danh thành chữ hoa:

SELECT MyColumn AS MyColAlias
FROM MyTable Alias
WHERE ThisCol = 'That Value';

được chuyển đổi nội bộ thành một cái gì đó như:

SELECT "ALIAS" . "MYCOLUMN" AS "MYCOLALIAS"
FROM "THEUSER" . "MYTABLE" "ALIAS"
WHERE "ALIAS" . "THISCOL" = 'That Value';

8

báo giá kép hoạt động trong orory khi tôi có từ khóa là một trong những tên cột.

ví dụ:

select t."size" from table t 

3

Oracle không sử dụng dấu ngoặc kép, nhưng rất có thể bạn cần đặt tên đối tượng ở dạng chữ hoa, ví dụ "BẢNG". Theo mặc định, nếu bạn tạo một đối tượng không có dấu ngoặc kép, vd

CREATE TABLE table AS ...

Oracle sẽ tạo ra đối tượng như trường hợp trên . Tuy nhiên, tham chiếu không phân biệt chữ hoa chữ thường trừ khi bạn sử dụng dấu ngoặc kép!


-8

bạn phải đổi tên cột thành tên khác vì TABLEđược bảo lưu bởi Oracle.

Bạn có thể thấy tất cả các từ dành riêng của Oracle trong chế độ xem tiên V$RESERVED_WORDS.


Tôi nhận được ORA-00942khi tôi thử a select * from V$RESERVED_WORDS.
ceving
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.