oracle 9i - SQL data types

User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

oracle 9i - SQL data types

Post by Sabina »

Обратила внимание что на Oracle primary key в виде цифрового индикатора часто задается типом number. Интересно какие есть веские причины не делать его integer?

А еще мне Oracle вот на это говорит missing right parenthesis?

Code: Select all

CREATE TABLE UserType(typeCode integer(3) primary key, typeName varchar2(20)); 


Это он о чем?

Сабина
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Re: oracle 9i - SQL data types

Post by JustMax »

Sabina wrote:Обратила внимание что на Oracle primary key в виде цифрового индикатора часто задается типом number. Интересно какие есть веские причины не делать его integer?

Сабина


В Oracle нет типа Integer также как и float. :)
Есть только NUMBER - все остальное это алиасы на различные
NUMBER описания (Например Intereger = NUMBER(38,0))
:wink:
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: oracle 9i - SQL data types

Post by Sabina »

JustMax wrote:В Oracle нет типа Integer также как и float. :)
Есть только NUMBER - все остальное это алиасы на различные
NUMBER описания (Например Intereger = NUMBER(38,0))
:wink:


Понятно, а number(x) - это тоже alias number(x,0)? А просто number дает number(0,0) и наш препод так и пишет просто number без уточнения. Это зачем такое 0,0 нужно?

Кстати ошибка про missing parenthesis была из-за integer.

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Re: oracle 9i - SQL data types

Post by Sabina »

Ораклисты, пожалуйста спасите, сроки поджимают :cry:

I have

Code: Select all

CREATE TABLE UserType(typeCode number(3,0) primary key, typeName
varchar2(20) not null);
CREATE TABLE CMSUser(userID number(3,0) primary key, title char(3),
fName varchar2(30) not null, lName varchar2(30) not null, typeCode
number(3,0) not null, .....);


When I try create foreign key like this

Code: Select all

ALTER TABLE CMSUser ADD CONSTRAINT (typeCode_fk) FOREIGN KEY
(typeCode) REFERENCES UserType (typeCode);


I keep getting

ORA-00902 : Invalid datatype


Not sure what is wrong here?

Спасибо,
Сабина
sp123
Уже с Приветом
Posts: 1962
Joined: 24 Feb 2001 10:01
Location: Челябинск -> Everett, WA

Post by sp123 »

ADD CONSTRAINT typeCode_fk, т.е. скобки вокруг имени constraint'a не нужны.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

sp123 wrote:ADD CONSTRAINT typeCode_fk, т.е. скобки вокруг имени constraint'a не нужны.


Понятно. Я сделала вообще не указывая имени FK сonstraint, а сейчас сижу гадаю как же мне узнать какое имя ему дал Oracle на случай, если я хочу его дропнуть?
У меня к этой базе доступ только через SQLPlus interface. Не подскажете команду как посмотреть FK Constraint имя?

Сабина
Big Cheese
Уже с Приветом
Posts: 1211
Joined: 02 Jul 2000 09:01
Location: SFBA

Post by Big Cheese »

Понятно. Я сделала вообще не указывая имени FK сonstraint, а сейчас сижу гадаю как же мне узнать какое имя ему дал Oracle на случай, если я хочу его дропнуть?

Должно быть видно через select * from all_constraints. Точные названия полей к сожалению не помню, и Оракла под рукой тоже нет :(
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: oracle 9i - SQL data types

Post by A. Fig Lee »

Sabina wrote:Обратила внимание что на Oracle primary key в виде цифрового индикатора часто задается типом number. Интересно какие есть веские причины не делать его integer?


АФАИК, он там с детства намбер. Ну добавили интегер, чтоб было как у всех, в АСЯх, и т.д.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Big Cheese wrote:Должно быть видно через select * from all_constraints.


Ой, спасиб, развеселили :) Минуты три любовалась на бегущие строки :mrgreen:

Да ладно бог с ним, пороюсь завтра на свежую голову в reference.

Сабина
Lazy44
Уже с Приветом
Posts: 525
Joined: 01 May 2002 20:29
Location: CT->MA->TX->UT

Post by Lazy44 »

Sabina wrote:
Big Cheese wrote:Должно быть видно через select * from all_constraints.


Ой, спасиб, развеселили :) Минуты три любовалась на бегущие строки :mrgreen:

Да ладно бог с ним, пороюсь завтра на свежую голову в reference.

Сабина


select constraint_name
from user_constraints
where constraint_type ='R'
and table_name='CMSUSER';

CONSTRAINT_NAME
------------------------------
SYS_C004050

SQL>

Учтите, у вас будет свое имя constraint, но начинаться тоже будет на SYS_
Еще один важный момент - это запрос работает только если вашa CMSUSER table имеет только один reference constraint
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Lazy44 wrote: select constraint_name
from user_constraints
where constraint_type ='R'
and table_name='CMSUSER';


Спасибо.
А еще вы не в курсе почему если задать тип number без определения длины он создается number(0,0)
С таким типом разьве можно работать?

Сабина
Big Cheese
Уже с Приветом
Posts: 1211
Joined: 02 Jul 2000 09:01
Location: SFBA

Post by Big Cheese »

Sabina wrote:
Big Cheese wrote:Должно быть видно через select * from all_constraints.


Ой, спасиб, развеселили :) Минуты три любовалась на бегущие строки :mrgreen:

Да ладно бог с ним, пороюсь завтра на свежую голову в reference.

Сабина
Всегда пожалуйста :) А вот то, что Вы не смогли воспользоваться подсказкой - это Вам был бы минус, случись это на интервью.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

Big Cheese wrote:А вот то, что Вы не смогли воспользоваться подсказкой - это Вам был бы минус, случись это на интервью.


А кто сказал, что я не смогла воспользоваться :wink: ?
Потом у меня всего одни день на то чтобы отладить DB connection и все скрипты и JSP с двумя основными формами написать. А я Oracle с 1997 года в руки не брала :(

Сабина
Big Cheese
Уже с Приветом
Posts: 1211
Joined: 02 Jul 2000 09:01
Location: SFBA

Post by Big Cheese »

Sabina wrote:
Big Cheese wrote:А вот то, что Вы не смогли воспользоваться подсказкой - это Вам был бы минус, случись это на интервью.


А кто сказал, что я не смогла воспользоваться :wink: ?
Вот оно - женское коварство! :)
Sabina wrote:Потом у меня всего одни день на то чтобы отладить DB connection и все скрипты и JSP с двумя основными формами написать. А я Oracle с 1997 года в руки не брала :(
Я тоже Оракловские штучки за 3 года подзабыл основательно (даже то, что знал). Удачи Вам в борьбе со скриптами и прочими JSP!
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Sabina wrote:Спасибо.
А еще вы не в курсе почему если задать тип number без определения длины он создается number(0,0)
С таким типом разьве можно работать?

Сабина


Создается number по максимуму. To же самое что

Code: Select all

NUMBER(38)
.[/code]
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

И еше. Кто вам мешает иметь доступ к базе не только через SQLPlus. Вот вам очень удобная и "бесплатная" штучка :

TOra

http://www.globecom.se/tora/

:wink:
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Re: oracle 9i - SQL data types

Post by JustMax »

Sabina wrote:number(x) - это тоже alias number(x,0) ?


Нет, NUMBER(x) - не ограничивает дробную часть.
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

JustMax wrote:И еше. Кто вам мешает иметь доступ к базе не только через SQLPlus.


К базе на кампусе мешают privileges правда я ваш тул не пробовала, может на него и не заругается.
Я по идее все что мне надо уже рассмотрела на своей домашней базе на Линуксе.

Оч. хочется спать! (мысли вслух в 1:16 AM :) ).

Сабина
User avatar
Sabina
Уже с Приветом
Posts: 5669
Joined: 13 Oct 2000 09:01
Location: East Bay, CA

Post by Sabina »

JustMax wrote:Создается number по максимуму. To же самое что

Code: Select all

NUMBER(38)


А я прогнала create c просто number, посмотрела описание полученной таблицы, а там USERID NUMBER(0,0) :pain1:

Сабина
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Ето раз :

http://download-west.oracle.com/docs/cd ... htm#424654

Во вторых верить надо только информации отсюда :

select * from user_tab_columns where table_name = 'NNNHHZ';

А NUBER(10) таки обрезает дробную часть. :oops:
Lazy44
Уже с Приветом
Posts: 525
Joined: 01 May 2002 20:29
Location: CT->MA->TX->UT

Post by Lazy44 »

Sabina wrote:
Lazy44 wrote: select constraint_name
from user_constraints
where constraint_type ='R'
and table_name='CMSUSER';


Спасибо.
А еще вы не в курсе почему если задать тип number без определения длины он создается number(0,0)
С таким типом разьве можно работать?

Сабина

Это не баг, ето фича. Работат можно и нужно с number
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Post by IA72 »

JustMax wrote:Ето раз :

http://download-west.oracle.com/docs/cd ... htm#424654

Во вторых верить надо только информации отсюда :

select * from user_tab_columns where table_name = 'NNNHHZ';

А NUBER(10) таки обрезает дробную часть. :oops:


Дык. Вопросу типа "Q: А как мне в BDE через Oracle получить Integer? A:NUMBER(10)" лет столько же, сколько и первой Delphi, то бишь десяток почти. Я правда думал, что хотя бы macro сделали уже. Oracle после 7.1.3 в руки не брал. Да и стоило ли? Семерка, по-моему, лучший DB сервер всех времен была. Увы.
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

IA72 wrote:Oracle после 7.1.3 в руки не брал. Да и стоило ли? Семерка, по-моему, лучший DB сервер всех времен была. Увы.


S 7 normal'no mozhno bylo rabotat' s versii 7.3 (7.3.*, 7.3.4) O chem vy ? :pain1: Stoilo stoilo. IMHO 9i ili 10G naaamnogo dal'she vpered ushli. Konkurentov ja poka i blizko ne vizhu.(Nu mozhet kogda Yukon vyjdet).
Po povodu types - zaglianite v packet STANDARD na 9 - ke :)
zVlad
Уже с Приветом
Posts: 15311
Joined: 30 Apr 2003 16:43

Post by zVlad »

JustMax wrote:
IA72 wrote:Oracle после 7.1.3 в руки не брал. Да и стоило ли? Семерка, по-моему, лучший DB сервер всех времен была. Увы.


S 7 normal'no mozhno bylo rabotat' s versii 7.3 (7.3.*, 7.3.4) O chem vy ? :pain1: Stoilo stoilo. IMHO 9i ili 10G naaamnogo dal'she vpered ushli. Konkurentov ja poka i blizko ne vizhu.(Nu mozhet kogda Yukon vyjdet).
Po povodu types - zaglianite v packet STANDARD na 9 - ke :)


Просто из любопытства не могу не спросить: в чем это интересно Оракл нааааааамного далеко ушел от DB2?
Насчет темы топика. А как же Оракл работает с преобразованиями типов в выражениям? С округлением? Ведь если с размером дробной части полный произвол, то и четких правил округления быть не может?
В DB2 десятичные, целые и с плавающей точкой - это три разных формата. Если написать DECIMAL(5,3) то именно такую размерность и будет хранить и выдавать DB2, применяя общепринятые правило округления, или выдавая код ошибки если число превосходит заданую размерность. Честно говоря не понимаю, как можно с этим работь иначе?
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

zVlad wrote: Просто из любопытства не могу не спросить: в чем это интересно Оракл нааааааамного далеко ушел от DB2?
Насчет темы топика. А как же Оракл работает с преобразованиями типов в выражениям? С округлением? Ведь если с размером дробной части полный произвол, то и четких правил округления быть не может?
В DB2 десятичные, целые и с плавающей точкой - это три разных формата. Если написать DECIMAL(5,3) то именно такую размерность и будет хранить и выдавать DB2, применяя общепринятые правило округления, или выдавая код ошибки если число превосходит заданую размерность. Честно говоря не понимаю, как можно с этим работь иначе?


Прошу прощения zVlad, я поставил IMHO и я по-моему сказал, что 9-10 далеко ушли от 7 ки а не от DB2. :nono#: Но лично я (IMHO!) конкурентов по важным для меня как для разработчика критериям не вижу. По поводу хранения number типов - с етим полный порядок. Внутренне любые NUMBER абсолютно унифицированны и занимают строго одинаковую структуру (22 bytes вроде) а представление числа, грубо говоря правила сохранения, округления, формат и т.д. хранится в data dictionaries. За счет етого, например, при изменении описания колонки NUMER(5) в NUMBER(9,4) не затрагиваются сами данные а изменяется только запись формата в DD. Все функции (ROUND, CEIL, FLOOR, TRUNC etc.) работают строго в соответствии с текущим форматом. В математических выражениях числа приводятся к более крупному члену и т.д. Конечно при записи числа в колонку с более ограниченным форматом вам надо явно обрезать/округлить число.
Ну и где произвол ? И что такое четкие правила округления ? :) Вы можете задавать любые произвольные правила округления.
(Не автоматом а с помощью функций). Если же вы не хотите парится с fine grade number formats или у вас нет строгих ограничений на форматы представления NUMBER данных - используйте "generic types" INTEGER, FLOAT, DECIMAL etc.

Не по теме - а в DB2 можно в WHERE использовать регулярные
выражения ? Или на лету получить consistent данные из таблицы 30 мин давности ? Или создавать в базе структуры для хранения
XML на основе DDT или XML Schema ? Или хранить данные не в ввиде plain структур a виде обьектов (В том числе Java обьектов) ? Что есть, например, такого в DB2, чего точно нет в Oracle и что
было бы неплохо иметь ?

Return to “Вопросы и новости IT”