Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle SELECT - Dấu ngoặc kép hoặc không có dấu ngoặc kép?

Các câu trả lời và liên kết về cách viết hoa là đúng, nhưng tình huống của bạn vượt ra ngoài một vấn đề đơn giản, cả vì tên cột của bạn bắt đầu bằng dấu gạch dưới và vì khách hàng của bạn thường giấu giếm bạn.

Nếu bạn đã cố gắng tạo một bảng với một cột có tên là _id , nếu không trích dẫn nó, thì bạn sẽ gặp lỗi 'ORA-00911:ký tự không hợp lệ', văn bản nguyên nhân cho biết 'số nhận dạng không được bắt đầu bằng bất kỳ ký tự ASCII nào ngoài các chữ cái và số'; điều này thực sự sai vì nó cũng không thể bắt đầu bằng một số (ví dụ:0_id đưa ra 'ORA-00904::mã định danh không hợp lệ'). Điều này được sao lưu bởi quy tắc đặt tên đối tượng cơ sở dữ liệu :

Vì vậy, có vẻ như Aqua Data Studio đang tuân theo quy ước đặt phiên bản viết hoa của tên đối tượng mà bạn cung cấp trong dấu ngoặc kép, một phương pháp được đề cập trong một trong các bài đăng được liên kết.

Từ những gì bạn đã hiển thị, select _id from ... được chuyển cho Oracle dưới dạng select "_ID" from ... , điều này tốt nếu tên cột được tạo dưới dạng "_ID" . Có vẻ như đó là trường hợp của table1 , nhưng table2 được tạo dưới dạng "_id" - để trường hợp không khớp đó tạo ra ORA-00904 hợp pháp mà bạn đang thấy.

Khách hàng của bạn không sửa đổi tên cột đã được đặt trong dấu ngoặc kép, vì vậy hãy select "_id" from ... được chuyển tới Oracle nguyên trạng và hoạt động OK cho table2 (nhưng ngược lại, sẽ không thành công cho table1 ).

Oracle yêu cầu tên phải được đặt trong dấu ngoặc kép nếu nó không tuân theo các quy tắc đối với số nhận dạng không được trích dẫn và nếu nó được tạo dưới dạng dấu ngoặc kép - trừ khi giá trị được trích dẫn ban đầu vẫn hợp lệ, tức là tuân theo các quy tắc không được trích dẫn và được nhập bằng chữ hoa. Vì tên cột của bạn bắt đầu bằng dấu gạch dưới, theo như Oracle cho biết tất cả các tham chiếu đến nó phải được đặt trong dấu ngoặc kép bất kể trường hợp nào. Khách hàng của bạn chỉ làm điều đó trong nền nếu bạn chưa tự trích dẫn.

Thực hiện theo lời khuyên mà những người khác đã đưa ra để tránh các số nhận dạng được trích dẫn và luôn sử dụng các tên hợp lệ chưa được trích dẫn sẽ tránh được các vấn đề như thế này.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu Oracle cho phép phần thời gian không hợp lệ của các giá trị cột ngày giờ trong những trường hợp nào?

  2. Lỗi:Tính năng này không khả dụng cho cơ sở dữ liệu bạn đang sử dụng

  3. Làm thế nào để cấp quyền tạo đặc quyền phiên?

  4. Chuỗi con sử dụng Oracle Khi có nhiều Kết quả phù hợp?

  5. Làm thế nào để sửa chữa tệp xuất Oracle (.dmp) bị hỏng?