2012-06-14 33 views
13

gần đây, trong khi làm việc trên dự án di chuyển từ db2 ->, chúng tôi đã gặp phải tình huống này. các nhà phát triển vô tình tạo ra các cấu trúc bảng mới bằng cách sử dụng các cột thập phân (s, p). Tôi không nhớ Oracle hỗ trợ điều này, nhưng sau đó một số đào cho thấy rằng một loại dữ liệu ANSI do đó được hỗ trợ bởi oracle.số thập phân (s, p) hoặc số (s, p)?

Tuy nhiên, câu hỏi đối với tôi vẫn -

  1. thế nào là dữ liệu này xử lý nội bộ?
  2. có chi phí sử dụng các loại ANSI thay vì các loại được tích hợp sẵn của Oracle không?
  3. Sẽ có tác động trong quá trình di chuyển dữ liệu nếu loại mục tiêu là loại được tích hợp sẵn trong Oracle không?

Trả lời

17

Trong Oracle, they are the same: Báo cáo

SQL tạo bảng và cụm cũng có thể sử dụng dữ liệu ANSI chủng loại và kiểu dữ liệu từ các sản phẩm của IBM SQL/DS và DB2. Oracle nhận biết tên kiểu dữ liệu ANSI hoặc IBM khác với tên kiểu dữ liệu cơ sở dữ liệu Oracle . Nó chuyển đổi kiểu dữ liệu thành kiểu dữ liệu tương đương Oracle, ghi kiểu dữ liệu Oracle là tên của kiểu dữ liệu cột và lưu trữ dữ liệu cột trong kiểu dữ liệu Oracle dựa trên các chuyển đổi được hiển thị trong các bảng tiếp theo.

Bảng dưới đây trích dẫn này cho thấy rằng DECIMAL(p,s) được xử lý cục bộ như một NUMBER(p,s):

SQL> create table t (a decimal(*,5), b number (*, 5)); 

Table created 

SQL> desc t; 
Name Type  Nullable Default Comments 
---- ----------- -------- ------- -------- 
A NUMBER(*,5) Y       
B NUMBER(*,5) Y 

Tuy nhiên, giá trị mặc định quy mô để 0 cho DECIMAL, có nghĩa là DECIMAL(*) được coi là NUMBER(*, 0), tức là INTEGER:

SQL> create table t (a decimal, b number, c decimal (5), d decimal (5)); 

Table created 

SQL> desc t; 
Name Type  Nullable Default Comments 
---- --------- -------- ------- -------- 
A INTEGER Y       
B NUMBER Y       
C NUMBER(5) Y       
D NUMBER(5) Y 
+0

bất kỳ chi phí hiệu suất nào do chuyển đổi? – Gyan

+1

Không có chuyển đổi dữ liệu: 'DECIMAL' được lưu trữ và xử lý dưới dạng' NUMBER'. –

+3

@ learn4living - Oracle không chuyển đổi dữ liệu (giá trị được lưu trữ trong cột) nó đang chuyển đổi metatdata (những gì được lưu trữ trong từ điển dữ liệu). Vì vậy, chi phí duy nhất là mức giá mà bạn đang trả tiền: sự nhầm lẫn giữa các học viên Oracle phải đối mặt với các kiểu dữ liệu không phải của Oracle. – APC

-2

Thực ra, có sự khác biệt giữa số thập phân và số. Thập phân sẽ cắt bớt giá trị quá quy mô, số sẽ làm tròn giá trị.

+4

Tôi chắc chắn muốn thấy một cuộc biểu tình về điều này. [Fiddle] (http://www.sqlfiddle.com/#!4/23fb7/1) dường như chỉ ra rằng cả hai giá trị quá vòng tròn NUMBER và DECIMAL. –

Các vấn đề liên quan