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

Kiểu dữ liệu .NET nào tốt nhất để ánh xạ kiểu dữ liệu NUMBER Oracle trong NHibernate?

Tôi đã thấy số thập phân được sử dụng thay vì int / long trong các ví dụ khác nhau. Tôi chỉ đang cố gắng hiểu tại sao

Đó có thể là do .NET decimal và Oracle NUMBER bản đồ tốt hơn một chút so với longNUMBER và nó cũng mang lại cho bạn sự linh hoạt hơn. Nếu bạn ở giai đoạn sau, hãy thêm thang điểm trong cột Oracle thì bạn sẽ không phải thay đổi kiểu dữ liệu nếu bạn đã sử dụng decimal .

decimal chắc chắn là chậm hơn intlong vì hai cái sau được hỗ trợ trong phần cứng. Điều đó nói rằng, bạn phải xử lý một số lượng dữ liệu nghiêm trọng để nó tạo ra bất kỳ sự khác biệt nào. Tôi vẫn nghĩ rằng bạn nên sử dụng long nếu đó là những gì bạn đang giải quyết và thì bạn cũng nên để các định nghĩa cột trong bảng thể hiện điều đó. NUMBER(18,0) cho long và như vậy.

Lý do decimal bản đồ tốt hơn một chút là long là 64 bit và decimal là (loại) 128 bit.

.NET

Nhập: thập phân Khoảng
gần đúng:± 1,0 × 10 ^ −28 đến ± 7,9 × 10 ^ 28
Độ chính xác:28-29 chữ số có nghĩa

Loại: dài Phạm vi
:–9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807
Độ chính xác:18 (19 cho dài) chữ số có nghĩa

Oracle

NUMBER mặc định là 38 chữ số có nghĩa và tỷ lệ 0 (số nguyên).

Nhập: NUMBER Phạm vi
:+ - 1 x 10 ^ -130 đến 9,99 ... 9 x 10 ^ 125
Độ chính xác:38 chữ số có nghĩa

Microsoft đã biết về vấn đề và lưu ý

Kiểu dữ liệu này là bí danh cho kiểu dữ liệuNUMBER (38) và được thiết kế để OracleDataReader trả về aSystem.Decimal hoặc OracleNumber thay vì một giá trị số nguyên. Sử dụng kiểu dữ liệu .NETFramework có thể gây ra dòng chảy ẩn.

Nghĩ lại thì bạn thực sự cần BigInteger để có thể biểu diễn cùng một số chữ số có nghĩa như NUMBER mặc định là. Tôi chưa bao giờ thấy ai làm điều đó và tôi cho rằng đó là một nhu cầu rất hiếm. Ngoài ra BigInteger vẫn không cắt nó kể từ NUMBER có thể có giá trị vô cùng dương và âm.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ĐẶT SQLBLANKLINES:Cách Cho phép Dòng trống trong SQLcl &SQL * Plus

  2. ORA-30926:không thể có được một tập hợp các hàng ổn định trong các bảng nguồn

  3. Truy vấn SQL để dịch một danh sách các số được so khớp với một số phạm vi, thành một danh sách các giá trị

  4. Có kiểu boolean nào trong cơ sở dữ liệu Oracle không?

  5. Làm cách nào để sử dụng kiểu bảng trong câu lệnh CHỌN TỪ?