2012-11-21 22 views
33

İki şema arasında herhangi bir sütun farkını bulmak için oracle sözlüğü görünümlerini kullandım. Veri türü tutarsızlıklarını senkronize ederken, hem NUMBER hem de INTEGER veri türünün all_tab_columns/user_tab_columns/dba_tab_columns dosyasında yalnızca NUMBER olarak depolandığından, bir şema/sütunun sayı veri türü ve başka bir şema/sütunun tamsayı veri türüne sahip olduğu durumlarda veri türü tutarsızlıklarını eşitlemenin zor olduğunu tespit ettim . Şema'nın karşılaştırması sırasında veri türü uyumsuzluğunu gösterir. Lütfen, sözlük görünümlerini kullanarak başka bir alternatif formu varsa veya veri türünün tam sayı olup olmadığını belirlemek için sözlük görünümlerinden belirli bir özellik kullanılabileceğini varsayalım.Oracle sözlük görünümlerinde sayı ve tamsayı veri türü arasındaki fark

+0

geçerli: 'Number' olan' Oracle Dahili olarak 'dönüştürmek Yani Integer',' IBM ürünleri, SQL/DS ve DB2 ANSI datatypes' ve veri türleri 'iken torpil için veri türü Alanı'nda inşa NUMBER için tamsayı (38) '.Ben tek yolu ÇİFT iTİBAREN DDL ('', '', 'TABLO') DBMS_METADATA.GET_DDL SEÇ' dan gerçek veri türü almak için düşünüyorum; ' –

+0

Bu Son seçenek Ben sadece birkaç tutarsızlık var gibi düşünüyorum ve farklı tablolardan sütun pozisyonu almak için performans sıkıcı olarak etkileyecektir. – Anand

+0

Merhaba Uzmanlar, Başka tavsiye lütfen ... – Anand

cevap

13

Tamsayı yalnızca SQL standardı için yani Oracle tarafından kullanım dışı bırakılmıştır.

Numara kullanmalısınız.

Tamsayılar, Oracle'ın sahne arkası tarafından yine de numara olarak saklanır.

Çoğu zaman, ID'ler için ints depolandığında ve bunlar herhangi bir param olmaksızın tanımlandığında - teoride, ondalık değerlerin kaydedilemediğini görmek için meta veri görünümlerinin ölçeği ve hassas sütunlarına bakabilirsiniz - ancak% 99 zamanın bu yardım etmeyecek.

Yukarıda yorumlandığı gibi (38,0) sütun veya benzeri (örneğin, ondalık değeri olmayan sütunlara izin verilir) sütunları arayabilirdiniz, ancak bu yalnızca hangi sütunların ondalık basamakları alamayacağını ve hangi sütunların tanımlanacağını belirtmeyecek; INTS saklanabilir.

Öneri: Sayı sütunları üzerinde bir veri profili yapın. Böyle bir şey:

select max(case when trunc(column_name,0)=column_name then 0 else 1 end) as has_dec_vals 
from table_name 
11

Bu benim oracle documentation den ne var, ancak Oracle 10g sürümü 2 içindir: (Bir SAYISI değişken tanımladığınızda

, onun hassasiyet (p) belirtebilir ve ölçek s) Yeterli, ama gereksiz, büyük olması için. Hassas, anlamlı basamakların sayısıdır. Ölçek olumlu veya olumsuz olabilir. Pozitif ölçek, ondalık noktasının sağındaki basamak sayısını tanımlar; Negatif ölçek, ondalık noktasının solunda yukarı veya aşağı yuvarlanabilecek basamak sayısını tanımlar.

NUMARA veri türü, Oracle Database standart kitaplıkları tarafından desteklenir ve SQL'de olduğu gibi çalışır. Bir metin veya INTEGER veri türü uygun olmadığında boyutlar ve temsilciler için kullanılır. Genellikle hesaplamalarda (tahminler ve toplamalar gibi) kullanılmayan değişkenlere atanır ve veritabanının yuvarlama davranışına uyması gereken veya yüksek derecede hassasiyet gerektiren değişkenler için kullanılır. SAYI değişkenlere

  • Analitik çalışma alanı hesaplamaları SAYISI değerlerdir çünkü diğer sayısal veri türleri daha yavaştır: bir değişkene SAYISI veri türünü atamak karar verirken, performansı en yükseğe çıkarmak amacıyla akılda aşağıdaki gerçekleri tutmak donanımdan (hız için) ziyade yazılımda (doğruluk için) hesaplanır.
  • Veriler, bir analitik çalışma alanından NUMBER veri türüne sahip ilişkisel bir sütuna getirildiğinde, bir dönüşüm adımı gerekli olmadığından, veriler, analitik çalışma alanında NUMBER veri türünde zaten olduğunda performans en iyisidir.
+2

Bu, sözlük görünümlerini sorgularken NUMBER ile INTEGER arasında ayrım yapmakla ilgili bir şey var mı? Başvurulan sayfa DW OLAP –

+0

notu mu? Testlerimden, data_precision'ın null olması gerektiği, aksi takdirde DESCRIBE vb. NUMBER gösterdiği anlaşılıyor. –

13

i buldum iyi açıklama şudur:

INTEGER ve SAYISI betwen fark nedir

? Ne zaman NUMBER kullanmalı ve INTEGER'i ne zaman kullanmalıyız? Biz girdi Hep

SAYISI mağazaları ... burada yorumlarımı bildirmek istiyoruz. Ölçek -84 ila 127'dir. Ancak INTEGER tam sayıya yuvarlar. INTEGER ölçeği 0'dır. INTEGER, NUMBER (38,0) ile eşdeğerdir. INTEGER kısıtlı sayıda demektir. Ondalık yer yuvarlanır. Ancak NUMBER kısıtlı değil.

  • integer (12,2) => 12
  • integer (12.5) => 13
  • integer (12.9) => 13
  • integer (12.4) => 12
  • NUMARASI (12,2) => 12.2
  • NUMARASI (12.5) => 12.5
  • NUMARASI (12.9) => 12.9
  • SAYISI (12.4) => 12.4

TAMSAYILI hep SAYISI sonra yavaştır. Tamsayı, eklenmiş kısıtlı bir sayı olduğu için. Kısıtlamayı zorlamak için ek CPU döngüleri gerekir. Hiç bir fark görmedim, ancak INTEGER sütununda birkaç milyonlarca kayıt yüklediğimizde bir fark olabilir. Girişin tam sayı olduğundan emin olmamız gerekiyorsa, INTEGER gitmek için en iyi seçenektir. Aksi takdirde, NUMBER veri türüyle sadık kalabiliriz. İşte

link

+0

Yani, OP soruya dönmek için size çözüm data_scale = 0 için kontrol etmektir söylediğini içindir o –

İlgili konular