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

Việc triển khai này có tuân theo SQL-92 không?

Không, cách xử lý null của Oracle mang phong cách riêng, khác với mọi người khác và không phù hợp với các tiêu chuẩn ANSI. Tuy nhiên, theo lời bảo vệ của Oracle, nó có lẽ đã ổn định và cam kết thực hiện biện pháp xử lý này rất lâu trước khi có một tiêu chuẩn ANSI nhất quán!

Tất cả bắt đầu từ thực tế là Oracle lưu trữ các chuỗi với một số ký tự theo sau là dữ liệu chuỗi. NULL được biểu thị bằng số ký tự bằng 0 không có dữ liệu chuỗi nào theo sau - chính xác giống như một chuỗi rỗng (''). Đơn giản là Oracle không có cách nào để phân biệt chúng.

Điều này dẫn đến một số hành vi kỳ quặc, chẳng hạn như trường hợp nối này. Oracle cũng có một hàm LENGTH để trả về độ dài của một chuỗi, nhưng điều này đã được định nghĩa theo cách ngược lại, do đó LENGTH ('') trả về giá trị NULL chứ không phải bằng không. Vì vậy:

LENGTH('abc') + LENGTH('') IS NULL

LENGTH('abc' || '') = 3

đối với tôi dường như vi phạm các nguyên tắc toán học cơ bản.

Tất nhiên, các nhà phát triển Oracle đã quá quen với điều này đến nỗi nhiều người trong chúng ta thậm chí không thể thấy điều gì sai hoặc kỳ quặc về nó - một số thực tế sẽ tranh luận rằng phần còn lại của thế giới là sai và rằng một chuỗi rỗng và một NULL điều tương tự!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01830:hình ảnh định dạng ngày kết thúc trước khi chuyển đổi toàn bộ chuỗi đầu vào

  2. Kết nối khung thực thể với cơ sở dữ liệu oracle

  3. Có cách nào để sử dụng FORALL để chèn dữ liệu từ một mảng không?

  4. cách sử dụng cascade trong oracle

  5. Mười lý do hàng đầu để chuyển từ Oracle sang PostgreSQL