Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Вниз

числовые типы в Оракле - что выбрать?   Найти похожие ветки 

 
Вольный Стрелок ©   (2004-06-08 12:52) [0]

Люди, поделитесь опытом.
У меня есть БД на Interbase, которую надо перевести на Oracle, но при этом клиентские программы должны иметь возможность работать с любой из этих СУБД.
Для чисел в IB используются INTEGER, SMALLINT и FLOAT.
Клиентские приложения написаны на Delphi7 с использованием dbExpress. В коде используются persistent-определения полей, т.е. TIntegerField и т.п.
Хочется как можно меньше вносить изменений в эти вещи, т.к. там все отлажено.
Oracle-типы для чисел dbExpress видит как BCD или FMTBCD.
Вопрос: как все-таки лучше поступить с портированием типов? Чем на клиенте BCD лучше Integer?


 
Sandman25 ©   (2004-06-08 12:54) [1]

BCD и FMTBCD - это для Decimal.
Если поле в БД выглядит как Integer, то и в Delphi оно останется IntegerField


 
Курдль ©   (2004-06-08 13:27) [2]


> Если поле в БД выглядит как Integer, то и в Delphi оно останется
> IntegerField


Integer в Оракле - это 32 байта! У кого-то харя может треснуть! :)

Так что надо исходить из реалий. Например:
Целые - NUMBER(16)
Денежные - NUMBER(20,4)


 
Sandman25 ©   (2004-06-08 13:54) [3]

>Integer в Оракле - это 32 байта!

Не знал.


 
Johnmen ©   (2004-06-08 14:00) [4]

>Курдль ©   (08.06.04 13:27) [2]
>Integer в Оракле - это 32 байта!

Можно ссылку на источник ?
:)


 
bushmen ©   (2004-06-08 14:07) [5]

>Курдль ©   (08.06.04 13:27) [2]
>Integer в Оракле - это 32 байта!

Что-то не помню такого.

>Так что надо исходить из реалий. Например:
>Целые - NUMBER(16)
>Денежные - NUMBER(20,4)

Не многовато ли для денежных сумм ?


 
DenK_vrtz ©   (2004-06-08 14:34) [6]

Преобразование типов данных ANSI в типы данных ORACLE:

INTEGER - NUMBER(38)

(с) Сервер ORACLE. Основные концепции.


 
Вольный Стрелок ©   (2004-06-08 15:30) [7]

в Оракле INTEGER, SMALLINT, FLOAT, DOUBLE PRECISION - это все подтипы NUMBER, и Дельфи их видит соответственно как BCD и FMTBCD в зависимости от точности.
а хотелось бы, чтобы видела как TIntegerField, TSmallintField, TFloatField соответственно.

кстати, при написании первого поста поставил галки "СУБД - IB6.5 и Оракл", а отобразило только ИБ :(


 
Johnmen ©   (2004-06-08 18:50) [8]

>DenK_vrtz ©   (08.06.04 14:34) [6]
>INTEGER - NUMBER(38)

Надеюсь, понятно, что 38 не означает 38 байт под хранение...
:)


 
Petr V. Abramov ©   (2004-06-08 19:56) [9]

Internal Numeric Format
Oracle stores numeric data in variable-length format. Each value is stored in
scientific notation, with 1 byte used to store the exponent and up to 20 bytes to store
the mantissa. The resulting value is limited to 38 digits of precision. Oracle does not
store leading and trailing zeros. For example, the number 412 is stored in a format
similar to 4.12 x 10 2 , with 1 byte used to store the exponent(2)and2 bytesusedto
store the three significant digits of the mantissa(4,1,2). Negative numbers include
the sign in their length.
Taking this into account, the column size in bytes for a particular numeric data
value NUMBER(p),wherep is the precision of a given value, can be calculated using
the following formula:
ROUND((length(p)+s)/2))+1
where s equals zero if the number is positive, and s equals 1 if the number is
negative.
Zero and positive and negative infinity (only generated on import from Version 5
Oracle databases) are stored using unique representations. Zero and negative
infinity each require 1 byte; positive infinity requires 2 bytes.

   ВСЕМ ЧИТАТЬ Concepts!
   Внимательно


 
Reindeer Moss Eater ©   (2004-06-09 08:33) [10]

а хотелось бы, чтобы видела как TIntegerField, ....

Для того, чтобы поле NUMBER(X,0) выглядело в Delphi как ftIntegerField требуется ENABLE INTEGERS=TRUE


 
Desdechado ©   (2004-06-09 11:10) [11]

2 Reindeer Moss Eater
это где такую настройку? у меня dbExpress


 
AleXqwq ©   (2004-06-09 11:35) [12]

ADOQuery.FieldByName("Col1").AsInteger;
ADOQuery.FieldByName("Col2").AsFloat; ...


 
AleXqwq ©   (2004-06-09 11:41) [13]

ADOQuery.FieldByName("Col1").AsInteger;
ADOQuery.FieldByName("Col2").AsFloat; ...


 
Вольній Стрелок   (2004-06-09 12:44) [14]

2 AleXqwq
DBEXPRESS а не ADO



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
14-1087391414
Ega23
2004-06-16 17:10
2004.07.04
Жена только что позвонила.


1-1087801439
Lion
2004-06-21 11:03
2004.07.04
Прерывания


14-1087280962
DimKa
2004-06-15 10:29
2004.07.04
Сколько в кубометре байтов?


1-1087879148
Cobalt
2004-06-22 08:39
2004.07.04
Как окно теряет фокус?


10-1016108444
paul_shmakov
2002-03-17 05:38
2004.07.04
2 интерфейса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский