oracle 9i - SQL data types

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

Post by Lazy44 »

JustMax wrote:
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 и что
было бы неплохо иметь ?

Sorry for offtopic. Try to compare DB2 SQL PL and Oracle PL/SQL - It is earth and sky. DB2 SQL PL is very limited. Function in DB2 SQL PL can not contain several statements. You must do all your logic in one statement. There is no provided packages by IBM . Oracle has close to 100 packages.
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Ето вы мне предлагаете ? :)
Нафик, нафик - мне хватает периодической борьбы с TransactSQL.
(Где мои Oracle exceptions :cry: )
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

JustMax wrote:Ето вы мне предлагаете ? :)
Нафик, нафик - мне хватает периодической борьбы с TransactSQL.
(Где мои Oracle exceptions :cry: )


try catch ?
Выгляните в окно - уже занимается на востоке светлая заря коммунизма. В смысле YUKON.
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
zVlad
Уже с Приветом
Posts: 16208
Joined: 30 Apr 2003 16:43

Post by zVlad »

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


Thank you for clarification regarding numeric data types.

1. What "регулярные выражения" means?
2. "...Или на лету получить consistent данные из таблицы 30 мин давности ?" - No. It is impossible, and it was discussed before. Of course, we can "получить consistent данные из таблицы 30 мин давности" but we need to recover table first.
3. "...Или создавать в базе структуры для хранения
XML на основе DDT или XML Schema". I am not an expert in XML, but I hope with this stuff in DB2 everythink is OK.
4. "Или хранить данные не в ввиде plain структур a виде обьектов (В том числе Java обьектов)" - I think this sort of functionaly is a subject for other than database software.
5."Что есть, например, такого в DB2, чего точно нет в Oracle и что
было бы неплохо иметь " When I reacted on your posting I thought you know answer to this question (redirected of course). Anyway, what about:

- recursive query (WITH statement, common table expression)?
- multy-row INSERT?
- SELECT .... FROM INSERT ?
- static queries? (Queries are stored in data base server in compiled and ready to be executed form).
multi-deminsioned clusterering index?

This are just SQL related stuff.
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Dmitry67 wrote:try catch ?
Выгляните в окно - уже занимается на востоке светлая заря коммунизма. В смысле YUKON.


Во! еще один YUKONOM пугает ! 8O :mrgreen:
Да шож в ем такого будет, что все Oracle - овцы от зависти лопнут ?! :(
zVlad
Уже с Приветом
Posts: 16208
Joined: 30 Apr 2003 16:43

Post by zVlad »

Lazy44 wrote:....
Sorry for offtopic. Try to compare DB2 SQL PL and Oracle PL/SQL - It is earth and sky. DB2 SQL PL is very limited. Function in DB2 SQL PL can not contain several statements. You must do all your logic in one statement. There is no provided packages by IBM . Oracle has close to 100 packages.


DB2 SQL PL (Control Statements, actually) was introduced just recently. There were no needs for this analog of Oracle's PL/SQL other than to make it easier to port applications from Oracle to DB2.
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

JustMax wrote:
Dmitry67 wrote:try catch ?
Выгляните в окно - уже занимается на востоке светлая заря коммунизма. В смысле YUKON.


Во! еще один YUKONOM пугает ! 8O :mrgreen:
Да шож в ем такого будет, что все Oracle - овцы от зависти лопнут ?! :(


Как Вы не знаете ?
SQL версионником стал
И крантец Ларри настал :)

А версионность данных там пальцики оближешь
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

zVlad wrote: DB2 SQL PL (Control Statements, actually) was introduced just recently. There were no needs for this analog of Oracle's PL/SQL other than to make it easier to port applications from Oracle to DB2.


Ну в свете 40 лет mainframes, вуйствительно, just recently
Но по моему уже лет десять
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

zVlad wrote: - recursive query (WITH statement, common table expression)?
- multy-row INSERT?
- SELECT .... FROM INSERT ?
- static queries? (Queries are stored in data base server in compiled and ready to be executed form).
multi-deminsioned clusterering index?

This are just SQL related stuff.


regular expressions :

SELECT * FROM dusers WHERE REGEXP_LIKE (name, '^Ste(v|ph)en$');

recursive queries : connect by .. start with ... etc.

multy-row insert : INSERT ... FROM SELECT ... ?

static queries : stored function with ref cursor return type ?

multi-deminsioned clusterering index : Xм.. не использовал надо посмотрть в документации.
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Dmitry67 wrote:Как Вы не знаете ?
SQL версионником стал
И крантец Ларри настал :)

А версионность данных там пальцики оближешь


Знаем.
(Тихо так) И ето все ? Хотя, конечно, ето много.
А какая еще более версионная версионность (нужна) бывает ? :oops:
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

JustMax wrote:Знаем.
(Тихо так) И ето все ? Хотя, конечно, ето много.
А какая еще более версионная версионность (нужна) бывает ? :oops:


Еще есть with (common table expression)
Рекурсивные квери для деревьев (слизано из Оракла :) )
А версионность лучше потому что в ней никогда не возникнет 'snapshot is too old'
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
zVlad
Уже с Приветом
Posts: 16208
Joined: 30 Apr 2003 16:43

Post by zVlad »

Dmitry67 wrote:
zVlad wrote: DB2 SQL PL (Control Statements, actually) was introduced just recently. There were no needs for this analog of Oracle's PL/SQL other than to make it easier to port applications from Oracle to DB2.


Ну в свете 40 лет mainframes, вуйствительно, just recently
Но по моему уже лет десять


Control Statements were indroduced in DB2 version 7 in 2001 (I believe).
Once again, before that there were no needs to have something like PL/SQL. For example, I knew about PL/SQL for long time, but I was and I am still OK with REXX and DB2 REXX interface. REXX can be more powerful than PL/SQL
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Ой, извините, я думал это про Oracle. Я увидел PL/SQL и подумал Oracle.
Кстати, zVlad, а почему таки были ввделены control of flow statements в SQL ?
ПОльзователям DB2 надоело трахаться с написанием кода процедур на C ?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Dmitry67 wrote:
JustMax wrote:Знаем.
(Тихо так) И ето все ? Хотя, конечно, ето много.
А какая еще более версионная версионность (нужна) бывает ? :oops:


Еще есть with (common table expression)
Рекурсивные квери для деревьев (слизано из Оракла :) )
А версионность лучше потому что в ней никогда не возникнет 'snapshot is too old'


Имея неграниченный UNDO tablespace с очень большим retention time ету ошибку и в Oracle (теоритически) не получить. Законы физики однако :pain1: . Кде собака то порылась ? И за чей счет ето достигается в Юконе ? :wink:
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

В Youkon вроде версии хранятся в tempdb. tempdb может расти
Версии чистятся самим сервреом при завершении транзакций или отсыхании коннекций (а не уходят сами просто со временем как в Oracle)
Поэтому если у вас есть изменение маленькой таблицы, а потом Вы начинаете генерировать лог гигабайтами апдейтя все другие, то это никак не приведет к тому что версия данных этой маленькой таблицы устареет
То есть история каждой таблицы независима...
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
zVlad
Уже с Приветом
Posts: 16208
Joined: 30 Apr 2003 16:43

Post by zVlad »

JustMax wrote:regular expressions :

SELECT * FROM dusers WHERE REGEXP_LIKE (name, '^Ste(v|ph)en$');

recursive queries : connect by .. start with ... etc.

multy-row insert : INSERT ... FROM SELECT ... ?

static queries : stored function with ref cursor return type ?

multi-deminsioned clusterering index : Xм.. не использовал надо посмотрть в документации.



1. Regular expression. To me (DBA) it is a bad practics to make data evaluator from DBMS. This practic makes impossible to choose good access path to data. On the other hand, there are many ways to resolve what you showed in your example.
2. I am no an expert in recursive queries, I know Oracle has recursive query. But I heard from my friend who is an Oracle programer, that DB2 has something which is impossible for Oracle in this area. You'd better to have a look at DB2 manuls, if you wish.
3. Not exactly. Stored function is a stored function. Static applications (queries) are again something special. In what you said (stored function), does Oracle create access paths for queries at once (when function is created) and never change it? Or every time when function is called Oracle will create new access paths on fly?
zVlad
Уже с Приветом
Posts: 16208
Joined: 30 Apr 2003 16:43

Post by zVlad »

Dmitry67 wrote:Ой, извините, я думал это про Oracle. Я увидел PL/SQL и подумал Oracle.
Кстати, zVlad, а почему таки были ввделены control of flow statements в SQL ?
ПОльзователям DB2 надоело трахаться с написанием кода процедур на C ?


I don't know. My guess is for making it easier to port applications from Oracle to DB2.
If I would need to write stored procedures I would use REXX rather than Control Statements or C. What is also interesting that needs to write stored procedudures are relativaly lower than in case of Oracle and? MS SQL - thanks to static queries and applications. From how it is used, DB2's static applications are the same as Oracle stored procedures. From how it is implemented, DB2's statics are different from Oracle's functions and procedures. We already spoke about it.
User avatar
Dmitry67
Уже с Приветом
Posts: 28283
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

zVlad wrote:1. Regular expression. To me (DBA) it is a bad practics to make data evaluator from DBMS. This practic makes impossible to choose good access path to data.


Зелен виноград :)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

zVlad wrote:3. Not exactly. Stored function is a stored function. Static applications (queries) are again something special. In what you said (stored function), does Oracle create access paths for queries at once (when function is created) and never change it? Or every time when function is called Oracle will create new access paths on fly?


Но ето же проблема для оптимизации. Как тогда оптимизатор реагирует на изменения статистики по вовлеченным
в запрос обьектам ? Перекомпилирует процедуру с новым execution plan ?! Если нет - то нафиг такое удовольствие. В Оracle
- если есть такое желание, можно в select явно указать execution plan hint и оптимизатор больше не будет парится. Единственный
overhead здесь, по сравнению с compiled query, что при первичном
вызове query Oracle нужно ее отпарсить и поместить в shared pool. Если работать дальше через binding параметров - то ето все. В чем же еще преимущества srored queries ?
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

Dmitry67 wrote:Рекурсивные квери для деревьев (слизано из Оракла :)

Nope. С ANSI/ISO SQL (читай с DB2). У Oracle нестандартная реализация.
Cheers
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Dmitry67 wrote:В Youkon вроде версии хранятся в tempdb. tempdb может расти
Версии чистятся самим сервреом при завершении транзакций или отсыхании коннекций (а не уходят сами просто со временем как в Oracle)
Поэтому если у вас есть изменение маленькой таблицы, а потом Вы начинаете генерировать лог гигабайтами апдейтя все другие, то это никак не приведет к тому что версия данных этой маленькой таблицы устареет
То есть история каждой таблицы независима...


Ну в Оракле история каждого блока независима. И что ?
Так, а теперь поподробней пожалуйста - а каким же тогда образом реализуется непротиворечивость данных на любой момент времени ? Представим - мы начали долгую SERIALIZED транзакцию c маленькой таблички - и через некоторое время, не заканчивая транзакцию обратились к другой таблице. Где история этой таблицы на момент начала нашей транзакции ? Уже очищена ? Если нет - то как сервер узнает , что он должен попридержать данные из данной конкретной таблицы ДО того как
мы к ней обратились! SERIALIZED транзакции иначе не реализовать. Если она не поддерживается то какой-же это версионник ? :pain1: Во вторых - если устаревшие данный сразу очищать, то как же тогда реализовать flashback queries ? Вообщем я или что-то упустил или преимущества мне непонятны.

Предлагаю, что-бы не засорять топик перенести обсуждение сюда : http://forum.privet.com/viewtopic.php?t=53096

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