Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Oracle'da 1 Byte'lık Veri Türü
#1
Arkadaşlar; belki biraz garip gelecek ama; Oracle'da 1 byte genişliğinde bir veri türü var mı diye sorma ihtiyacı hissettim. Araştırmalarımdan pek olumlu bir netice alamadım. Daha da garibi, Oracle'ın sayısal verileri de disk üzerinde Varchar verileri tutar gibi tuttuğunu okudum. (Doğru yanlış emin değilim, Oracle'a pek aşina değilim).

Kısaca Microsoft Sql Server'daki TINYINT gibi bir veri türü lazım bana Oracle'da. Aynı zamanda yine Microsoft SQL Server'daki DATALENGTH fonksiyonunun Oracle'daki karşılığı nedir bilen var mı ?
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#2
Oracle kullanıcıları, programcıları verilerin byteları, bitleri ile ilgilenmek zorunda bırakmaz. Oracle'da az sayıda veri türü vardır. Örneğin tek çeşit sayısdal veri türü vardır, o da NUMBER. Tablodaki alanınızı NUMBER(2) olarak tanımlarsanız 99'a kadar sayı saklayabilirsiniz, NUMBER(3) olarak tanımlarsanız 999'a kadar sayı saklayabilirsiniz. Oracle ile çalışanlar veritabanında datayı kaç byte ile sakladığı ile ilgilenmez, ingilenmelerine gerek olmaz. Kayan noktalı değerler için de NUMBER(5,2) gibi tanımlarsınız ve 999.99'a kadar değerleri bu alanda saklayabilirsiniz. Bu yaklaşım programcı için de kolaylıkdır.

Delphi, Java, C, C++ gibi dillerde kullandığınız yerel değişkenleri olabilecek maksimum değeri tutabilecek türde tanımlamak ise programcıya kalmaktadır.
Cevapla
#3
(07-10-2019, Saat: 13:57)delphim Adlı Kullanıcıdan Alıntı: Oracle kullanıcıları, programcıları verilerin byteları, bitleri ile ilgilenmek zorunda bırakmaz. Oracle'da az sayıda veri türü vardır. Örneğin tek çeşit sayısdal veri türü vardır, o da NUMBER. Tablodaki alanınızı NUMBER(2) olarak tanımlarsanız 99'a kadar sayı saklayabilirsiniz, NUMBER(3) olarak tanımlarsanız 999'a kadar sayı saklayabilirsiniz. Oracle ile çalışanlar veritabanında datayı kaç byte ile sakladığı ile ilgilenmez, ingilenmelerine gerek olmaz. Kayan noktalı değerler için de NUMBER(5,2) gibi tanımlarsınız ve 999.99'a kadar değerleri bu alanda saklayabilirsiniz. Bu yaklaşım programcı için de kolaylıkdır.

Delphi, Java, C, C++ gibi dillerde kullandığınız yerel değişkenleri olabilecek maksimum değeri tutabilecek türde tanımlamak ise programcıya kalmaktadır.

Yanıtınız için teşekkür ederim; ama Oracle, programcıları bilmemne ile ilgilenmek zorunda bırakmaz; .Net başka bir şeyle ilgilenmek zorunda bırakmaz ! Ee, bu programcılar ne iş yapacaklar ? Gerçek programcıların işi zaten bu tarz şeylerle ilgilenmek.

Bir Database Admin nasıl olur da bit/byte lar ile ilgilenmez. Bu husus veritabanı programlamanın önemli kısımlarından birisidir. Oracle, Number(3) veri türü ile basamak bazlı yer tahsisatı yapacak. Yani 0 ila 999 aralığındaki veriyi tutabilmek için minimum 2 byte yer ayıracak. Oysaki 1 byte'ın alabileceği değer aralığı bana yetecekti. Kafadan 1 byte zarar.

Bu kısıtlamanın bir başka mantıklı nedeni olmalı. Eğer yok ise; bu son derece aptalca bir şey.

Nerede abidik, gubidik saçma şeyler var; son 2 senedir hepsi üstüme üstüme koşuyor Smile
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#4
(08-10-2019, Saat: 09:28)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Bu kısıtlamanın bir başka mantıklı nedeni olmalı. Eğer yok ise; bu son derece aptalca bir şey. 

Kesinlikle katılıyorum, mantıklı bir nedeni olmalı, yoksa saçma bir olay, o zaman number yerine varchar tutsaydı herşeyi, nasıl olsa her karakter 1 byte yer kaplıyor.
WWW
Cevapla
#5
Merhaba,
temel veri tiplerinde 1 byte yok. Genişletilmiş tiplerde (arka planda alias olarak set edilmiş özel tipler) 1 byte veri tipi mevcut.
Fakat bu veri tipi de @Tuğrul HELVACI hocamın da bahsetmiş olduğu, temelde char tipinde. 
Kaynak: docs.oracle
Cevapla
#6
Number'da boyut : yuvarla((length/2)+1) şeklinde hesaplanıyormuş (- değer için+1 byte daha), number(5) : (5/2)+1=4 byte yani.
WWW
Cevapla
#7
(08-10-2019, Saat: 09:28)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı:
(07-10-2019, Saat: 13:57)delphim Adlı Kullanıcıdan Alıntı: Oracle kullanıcıları, programcıları verilerin byteları, bitleri ile ilgilenmek zorunda bırakmaz. Oracle'da az sayıda veri türü vardır. Örneğin tek çeşit sayısdal veri türü vardır, o da NUMBER. Tablodaki alanınızı NUMBER(2) olarak tanımlarsanız 99'a kadar sayı saklayabilirsiniz, NUMBER(3) olarak tanımlarsanız 999'a kadar sayı saklayabilirsiniz. Oracle ile çalışanlar veritabanında datayı kaç byte ile sakladığı ile ilgilenmez, ingilenmelerine gerek olmaz. Kayan noktalı değerler için de NUMBER(5,2) gibi tanımlarsınız ve 999.99'a kadar değerleri bu alanda saklayabilirsiniz. Bu yaklaşım programcı için de kolaylıkdır.

Delphi, Java, C, C++ gibi dillerde kullandığınız yerel değişkenleri olabilecek maksimum değeri tutabilecek türde tanımlamak ise programcıya kalmaktadır.

Yanıtınız için teşekkür ederim; ama Oracle, programcıları bilmemne ile ilgilenmek zorunda bırakmaz; .Net başka bir şeyle ilgilenmek zorunda bırakmaz ! Ee, bu programcılar ne iş yapacaklar ? Gerçek programcıların işi zaten bu tarz şeylerle ilgilenmek.

Bir Database Admin nasıl olur da bit/byte lar ile ilgilenmez. Bu husus veritabanı programlamanın önemli kısımlarından birisidir. Oracle, Number(3) veri türü ile basamak bazlı yer tahsisatı yapacak. Yani 0 ila 999 aralığındaki veriyi tutabilmek için minimum 2 byte yer ayıracak. Oysaki 1 byte'ın alabileceği değer aralığı bana yetecekti. Kafadan 1 byte zarar.

Bu kısıtlamanın bir başka mantıklı nedeni olmalı. Eğer yok ise; bu son derece aptalca bir şey.

Nerede abidik, gubidik saçma şeyler var; son 2 senedir hepsi üstüme üstüme koşuyor Smile

Öncelikle ben sizinle polemik olsun diye cevap yazmadım Tuğrul Bey. Oracle'da temel veri tipleri NUMBER, VARCHAR2 (& CHAR), DATE dir. CLOB, BLOB, RAW, LONG ek bazı veri tipleri de vardır. Performas gibi özel durumlar için ise istisnai BINARY_FLOAT and BINARY_DOUBLE sayısal veritipleri de var. 1 BYTE veri tutacaksanız ya CHAR ya da RAW veri tipini kullanacaksınız, bunlarda sayısal veri tipleri değil.

SQLLite vs kullanıyor olsanız anlarım da eğer Oracle veritabanı kullanıyorsanız ve 1-2 Byte'ın hesabını yaparak programlama yapıyorsanız ortada ciddi bir sorun var demektir.

Turbo Pascal zamanlarının veri tutma ve işleme teknolojileri ile düşünerek 2020 yılında program yazamayız. Diyorsanız ki Oracle'ın yaklaşımı saçmalık, oturursunuz kendi veritabanı yönetim sisteminizi yazar, Oracle ve benzeri ürünlerdeki saçmalıklardan da kaçabilirsiniz.

Aynı programın EXE boyutu her yeni delphi sürümünde bir miktar artıyor. Aynı işi yapan aynı görsellikde aynı koddan derlenmiş program Delphi 5'de 5 MB ise Delphi 10.3 de 11 MB olabiliyor. Delphi 10.3 gibi saçmalıkları kullanmasın kimse mi diyelim. Delphi 2 candır, gerisi byte israfıdır mı diyelim.
Cevapla
#8
@delphim Milyonlarca satır row insert ediliyor bu byte hesabını yapmak durumundayız.
Proje geliştirirken sayısal alanlara int deyip geçmem mesela smallint se smallint tir.
Proje ve database büyüdükçe bu ufak ufak byte'lar performansı etkilemeye başlıyor sonra ne yapsakta
performans arttırırız data boytunu düşürürüz diye uğraşıyoruz.
Proje küçük bir proje ise bile bunlara alışkanlık babında dikkat etmekte fayda var.
İmam Süleyman Yakub <--> Molla Mustafa Mansur
Evlatlarım!
Cismanımız TÜRK ruhumuz ise İSLAM.
Bu yolda daim olalım her an.
Cevapla
#9
(08-10-2019, Saat: 16:33)ahmet_sinav Adlı Kullanıcıdan Alıntı: @delphim Milyonlarca satır row insert ediliyor bu byte hesabını yapmak durumundayız.
Proje geliştirirken sayısal alanlara int deyip geçmem mesela smallint se smallint tir.
Proje ve database büyüdükçe bu ufak ufak byte'lar performansı etkilemeye başlıyor sonra ne yapsakta
performans arttırırız data boytunu düşürürüz diye uğraşıyoruz.
Proje küçük bir proje ise bile bunlara alışkanlık babında dikkat etmekte fayda var.

1 byte sayısal veri tipi Oracle, DB2, Postgre SQL de yok. MSSQL ve MySQL'de var. Düşündüm ve size hak verdim. İkna oldum ki Oracle, DB2, Postgre SQL çok kötü veritabanı yönetim sistemleri. Herkes MS SQL veya MySQL kullanmalı. Oracle, DB2, Postgre SQL'den uzak durmalı, özellikle de Oracle'dan.
Cevapla
#10
@delphim burdan neden böyle bir anlam çıkardın anlamadım ortada bir mantık var. Bu mantığa karşı bir argümanin varsa buyur dinleyelim. Bence olmalı sence neden gereksiz mesela açıkla bizde aydinlanalim.
İmam Süleyman Yakub <--> Molla Mustafa Mansur
Evlatlarım!
Cismanımız TÜRK ruhumuz ise İSLAM.
Bu yolda daim olalım her an.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Oracle Bugün Doğum Günü olanlar gonulali 13 3.280 12-03-2022, Saat: 12:20
Son Yorum: engerex
Photo Sqlite Database Veri Sorunu apachi2006 2 1.343 25-07-2021, Saat: 00:33
Son Yorum: apachi2006
  Delphi Access Veri Aktarma bedirdeg 10 4.217 17-12-2020, Saat: 11:01
Son Yorum: bedirdeg
  FireDac kullanarak Oracle Server'a bağlanma Abdullah ILGAZ 1 2.008 16-03-2020, Saat: 09:07
Son Yorum: SimaWB
  PostgreSQL Veri Tabanı Erişimi için katı Güvenlik 3ddark 4 3.356 25-10-2019, Saat: 13:32
Son Yorum: dilanorkan



Konuyu Okuyanlar: 1 Ziyaretçi