Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 38 39 40 41 42 [43] 44 45 46 47 .. 75   вперед  Ctrl
 Re: Выбор СУБД!  [new]
Yo.!
Guest
locky

Пока что мы выяснили, что в оракле нет локальных временных таблиц (и не предвидится), посему некоторые ораклоиды считают их "бесполезным хламом" ;)

а чем их считать если от них гемора в разы больше чем пользы ?


locky

32, говоришь, нету смысла, говоришь... в варианте A->B->C->A - уровень вложенности всего 4 - как считаешь, возможна такая ситуация - или бессмысленна?

дык, об том и речь - в оракле таких идиотских ограничений нет и все переменные в том числе и табличные имеют бесконечную рекурсию.

locky

Навскидку? Ну, не знаю. Надо подумать.

ждем с нетерпением ;)

locky

кстати, а можно встречный вопрос: если такие локальные временные таблицы так не нужны - зачем в оракле есть коллекции и даже функция приведения TABLE? Ведь, насколько я понял - не бывает таких случаев, когда "без табличных переменных - никак"?

вопрос звучит примерно так "зачем в современном языке программирования массивы ?" лично мне пока для хранения промежуточных данных переменные не нужны были, во всех случаях матвью и GTT всегда хватало.
4 фев 09, 00:05    [6775358]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
locky
МСУ
На основании чего Вы отказались читать линки по автогенерации документации кода?

Видимо, на основании непредоставления линков?

зы м.б. я просто пропустил этит пост - всё может быть. В таком случае - напомните мне, где именно были приведены линки.

Неужели сложно отлистать несколько страниц назад и заюзать линки? Откуда в Вас столько лени?
4 фев 09, 00:10    [6775366]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
softwarer
SergSuper
ну это же ненормально когда я в оракле выбираю данные в таблицу-переменную, а выбрать из неё запросом или заджоинить не могу поэтому и приходится делать материлизованные вью, пайплайн функции :)

Простите, но это Вы говорите какой-то бред, хоть и со смайликом. Выборку запросом и джойн я показываю, а вот материализованные вью и пайплайн функции.... можно употребить в таком контексте только если не очень понимать, что это такое.
Бред конечно, но это я слова Yo с сарказмом процитировал, это он это всё не к месту употребил
softwarer

SQL> create type TIntTable is table of integer;

Type created

....

Замечательно. Но вот первая строчка - единственная которая мне и не нравится. Зачем она? почему бы не ограничиться хотя бы типом пакета? Если не ошибаюсь отправлять результаты запроса в локальную переменную же можно. Допустим я хочу таблиц 5 таких иметь в процедуре. Получается мне нужно объявить в 5 раз больше типов чем процедур. Вы конечно скажите, что можно один тип использовать на несколько процедур. Но вот только допустим потер я процедуру или сильно изменил - как мне проверить какие типы еще нужны, какие нет? И будут они плодиться и плодиться. Я подозреваю что Вы к этому привыкли и не считаете это неудобством, так же как например для англичанина звук th. Но мне кажется что если я использую объект локально, то удобно его там и описывать. Уверен что если бы у Вас была такая же возможность Вы бы тоже по другому к этому относились.
Например я всегда считал что курсоры - зло. Трудно думать иначе если знать только микрософтовский синтаксис для работы с ними. Но в Оракле они очень изящно реализованы и моё отношение к ним изменилось.

Есть у меня кстати и обратный пример(совсем не в тему): мне казалось что в MS собаки только мешают. Но вот гляжу на запрос в Оракле(особенно если довольно длинный) - и мне трудно найти где же там переменные среди полей таблиц. Когда есть собаки то это сразу бросается в глаза.
4 фев 09, 00:45    [6775391]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Yo.!

locky

т.е. мы декларируем переменную, которая не таблица, но которая для нас имеет смысл таблицы, мы заполняем её данными, мы явно приводим её к таблице. Т.е. нам нужна таблица, но её нет, зато есть переменная, которую мы можем.....

да-да, в пхп мы заполняем данными из формы массив, который чудесным образом появляется в pl/sql процедуре, где мы и делаем джоин.
так чо у нас с примером где без табличных переменных никак ?

вобще-то два года назад это уже обсуждалось, там и пример есть
участники и аргументы те же :)

еще пример - округление баланса с тысячах рублей - надо итеративно подогнать цифры так, чтобы сходилось сумма округленных значений и округлённая сумма неокругленных

трудно сходу подобрать пример, потому что обычно это делается в длинных отчетах(по размеру кода, а не по времени), приводить тысячи строк как-то нехорошо(даи смотреть никто не будет), а если кусок привести - скажут можно и одним запросом
4 фев 09, 01:06    [6775402]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Yo.!
Guest
SergSuper

вобще-то два года назад это уже обсуждалось, там и пример есть
участники и аргументы те же :)

блин, участники те же - вижу, аргументов не вижу. еще вижу текст тригера где первой же строкой объявляется переменная. Ыть, а аргумент то хде ?? можно для тех кто не понял конкретно указать в которой строке ентого тригера вы обнаружили необходимость объявления ВТ налету !?
в данном случае в оракле вместо того чтоб каждый раз объявлять переменную объявляется один раз GTT, причем в оракле на acc и datein мы можем создать индекс.

SergSuper

еще пример - округление баланса с тысячах рублей - надо итеративно подогнать цифры так, чтобы сходилось сумма округленных значений и округлённая сумма неокругленных

те же яйца (С) - хде вы там необходимость объявления ВТ налету обнаружили, и главное чем GTT не подходит ?
4 фев 09, 01:40    [6775420]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
softwarer
Я, признаться, не понял. И в чём проблема написать это одним запросом? Тривиально.....

Ві знаете, я тоже многие вещи могу сделать "одним запросом".
Вот только далеко не факт, что это будет сопровождаемо/понятно/работать быстро.


Проведем эксперимент ? что проще
Кстати до сих пор внятно не сформулирована задача, требующая создания таблиц на лету
4 фев 09, 08:55    [6775634]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
Yo.!

не понимаю, чем трудность то возникла, делаете обычные GTT и туда складывайте промежуточные результаты. нафига тут на лету что-то создавать ?

ээээ... может быть мне еще заодно отказаться от локальных переменных (а нафига они?) и использовать исключительно пакетные? (а что, я видел такое приложение. Весьма эррротично).

зы кстати, вот еще не знаю - что происходит с GTT при рекурсивном вызове процедур и псевдо-рекурсивном вызове? (A call B, B calls C, C call A)?


Вызовы (в том числе рекурсивные) для GTT перпендикулярны (т.е. опять же ортогональны конечно). Для GTT важно:

1. Каждая сессия видит свои данные и не видит чужих
2. В зависимости от настроек GTT, завершение транзакции "удаляет" сформированные данные
4 фев 09, 08:58    [6775639]     Ответить | Цитировать Сообщить модератору
 Re: тогда вопрос номер два!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
locky
МСУ

... кхм... и документировано... (выстрелфспину)

Ага. Причем - автоматически.


Зря иронизируете. Бывает один запрос куда понятнее чем мегатонны (рекурсивных ;) процедур
от привычки во многом зависит. Посмотрите хоть на функциональщиков ...

А по производительности (в Oracle) крайне редко процедурное решение бывает производительнее ОДНОГО SQL-запроса (уверен, что в MS SQL это не так, убеждать не надо)
4 фев 09, 09:04    [6775660]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
SergSuper
Зачем она? почему бы не ограничиться хотя бы типом пакета? Если не ошибаюсь отправлять результаты запроса в локальную переменную же можно.


Чтобы тип был виден не только PL/SQL, но и SQL-машинке :) Особенность Oracle, звиняйте
4 фев 09, 09:07    [6775667]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
SergSuper

еще пример - округление баланса с тысячах рублей - надо итеративно подогнать цифры так, чтобы сходилось сумма округленных значений и округлённая сумма неокругленных


Аналитика (кстати вроде и в MS SQL добавили)
4 фев 09, 09:09    [6775672]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
SergSuper

трудно сходу подобрать пример, потому что обычно это делается в длинных отчетах(по размеру кода, а не по времени), приводить тысячи строк как-то нехорошо(даи смотреть никто не будет), а если кусок привести - скажут можно и одним запросом


На предыдущей работе (биллинг интернет провайдера) мастерили одним запросом маркетинговые отчеты. Монстрики получались жутковатые и менялись каждую неделю, но так писать было быстрее, чем каждый раз рожать процедурное решение.
4 фев 09, 09:13    [6775688]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Yo.!
да-да, в пхп мы заполняем данными из формы массив, который чудесным образом появляется в pl/sql процедуре, где мы и делаем джоин.


Как то все это через задницу... Другое дело - табличные параметры в MS SQL 2008. ;)
4 фев 09, 09:18    [6775715]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
pkarklin
Yo.!
да-да, в пхп мы заполняем данными из формы массив, который чудесным образом появляется в pl/sql процедуре, где мы и делаем джоин.


Как то все это через задницу... Другое дело - табличные параметры в MS SQL 2008. ;)


+1
4 фев 09, 10:09    [6776002]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Подпольщик
Guest
pkarklin, я когда переходил на Постгре с M$SQL 2000, то было такое ощущение, что пересел с мерседеса на БЕЛАЗ. Сам 2008 не видел, интересуют некоторые вещи.
В 2008 сиквеле появились последовательности?
А версионный механизм тама как?
Бэкап всея базы можно в одной транзакции залить?
В 2005 я слышал, что функции ранжирования появились, но их там 4 штуки было, это правда?
(как с этим в 2008?)
Рекурсивные запросы имеют ограничения?
4 фев 09, 10:36    [6776156]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
Gluk (Kazan)
SergSuper

еще пример - округление баланса с тысячах рублей - надо итеративно подогнать цифры так, чтобы сходилось сумма округленных значений и округлённая сумма неокругленных


Аналитика (кстати вроде и в MS SQL добавили)

допустим у нас есь таблица из трёх значений
1.3
2.3
3.3
итого 6.9

какая аналитика которая вернёт такие значения?
1
2
4
(что бы в итоге было 7, которое есть округлённое 6.9)

Gluk (Kazan)
Чтобы тип был виден не только PL/SQL, но и SQL-машинке :) Особенность Oracle, звиняйте

ну да, как для MS - так недостаток, а как для Оракла - так особенность :)

Gluk (Kazan)

А по производительности (в Oracle) крайне редко процедурное решение бывает производительнее ОДНОГО SQL-запроса (уверен, что в MS SQL это не так, убеждать не надо)

вот реальный пример
таблица остатков(REC), имеет примерно такую структуру
id
счет(acc)
дата-время(date)
остаток(summa)
на каждое движение делается новая запись, т.о. за каждый день по каждому счету может быть несколько записей
задача взять входящий остаток по счетам на заданное число
процедурное решение оказалось и проще и быстрее(во всяком случае для 9-го оракла)

кстати на T-SQL можно было бы делать простым запросом
select acc, (select top 1 summa from REC r where r.acc=x.acc and r.date>=@date order by date, id)
from x



Gluk (Kazan)
На предыдущей работе (биллинг интернет провайдера) мастерили одним запросом маркетинговые отчеты. Монстрики получались жутковатые и менялись каждую неделю, но так писать было быстрее, чем каждый раз рожать процедурное решение.

Сам придерживаюсь таких принципов, но вот для сложных отчетов приходится их нарушать

Yo.!
в данном случае в оракле вместо того чтоб каждый раз объявлять переменную объявляется один раз GTT, причем в оракле на acc и datein мы можем создать индекс

еще уже не помню какой раз повторяю: табличная переменная - локальная переменная для процедуры и другим объектам БД совершенно не обязательно знать про неё
индексы и тут можно было бы создать, просто они для 20 записей не нужны
4 фев 09, 10:51    [6776261]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Подпольщик
В 2008 сиквеле появились последовательности?


Нет.

Подпольщик
А версионный механизм тама как?


Версионный механизм еще и в 2005 очень даже так! ;)

Подпольщик
Бэкап всея базы можно в одной транзакции залить?


Полный бэкап бд - это неделимая операция сама по себе и нет необходимости заворачивать ее в транзакцию. Более того, инструкция BACKUP не допустима ни в явной, ни в неявной транзакции.

Подпольщик
В 2005 я слышал, что функции ранжирования появились, но их там 4 штуки было, это правда?(как с этим в 2008?)


В реляционном движке так и осталось 4ре. За остальным богатым набором к MDX и OLAP.


Подпольщик
Рекурсивные запросы имеют ограничения?


Если Вы имеете ввиду максимальный уровень вложенности, то он = 32 767.
4 фев 09, 10:55    [6776299]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Подпольщик
я когда переходил на Постгре с M$SQL 2000, то было такое ощущение, что пересел с мерседеса на БЕЛАЗ.

Когда я на около года слез с 2005 сиквела на восьмой/девятый оракул - у меня те же чувства были. Насколько всё было непривычно и криво
Подпольщик
В 2008 сиквеле появились последовательности?

На кой они нужны в скивеле? Это оракляный пережиток прошлого из-за отсутствия автоинкремента
Подпольщик
А версионный механизм тама как?

А кофеварку с сахаром тоже желаете? :)
Подпольщик
Бэкап всея базы можно в одной транзакции залить?

У транзакции в текущем батче есть ограничения на некоторые кляузы. Так что облом.
Подпольщик
Рекурсивные запросы имеют ограничения?

OPTION(MAXRECURSION 0)
А что за ранжирования, простите?
4 фев 09, 10:56    [6776306]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Подпольщик
Guest
МСУ

На кой они нужны в скивеле? Это оракляный пережиток прошлого из-за отсутствия автоинкремента

Не скажите. Всё-таки более гибко. Тем более, что в постгре не надо их в триггера заворачивать,
можно только задать значение по умолчанию для поля как значение из последовательности.
А ещё есть SERIAL - если написать такой тип ключевого поля, то последовательность создастся и пропишется автоматом. Более удобно сделано, чем в Оракле.
МСУ

А кофеварку с сахаром тоже желаете? :)

Да, конечно И со сливками, пожалуйста.
МСУ
А что за ранжирования, простите?

ROW_NUM, RANK и т.п. В постгре их 12 штучек только)))
Ну и агрегаты можно как аналитические использовать)))
4 фев 09, 11:10    [6776445]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
skelet
Member [заблокирован]

Откуда: moskau
Сообщений: 5549
SergSuper

и под ВТ я например понимал табличные переменные


ну не фига себе новость! Мы тут про фому, а вы ...

SergSuper

но опять же - разговор шел не про производительность, а про удобство написания
ну это же ненормально когда я в оракле выбираю данные в таблицу-переменную, а выбрать из неё запросом не могу
поэтому и приходится делать материлизованные вью, пайплайн функции :)

Вы не умеете, а некоторые - запросто :)) https://www.sql.ru/forum/actualthread.aspx?bid=3&tid=630418&pg=-1
4 фев 09, 11:11    [6776460]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
SergSuper

вот реальный пример
таблица остатков(REC), имеет примерно такую структуру
id
счет(acc)
дата-время(date)
остаток(summa)
на каждое движение делается новая запись, т.о. за каждый день по каждому счету может быть несколько записей
задача взять входящий остаток по счетам на заданное число
процедурное решение оказалось и проще и быстрее(во всяком случае для 9-го оракла)

кстати на T-SQL можно было бы делать простым запросом
select acc, (select top 1 summa from REC r where r.acc=x.acc and r.date>=@date order by date, id)
from x



SQL> create table test (
  2    id number not null,
  3    acc number not null,
  4    tm date not null,
  5    sum number not null
  6  );

Table created.

SQL> select * from test;

        ID        ACC TM               SUM
---------- ---------- --------- ----------
         1          1 04-FEB-09        100
         2          1 04-FEB-09        200
         3          2 04-FEB-09         50

SQL> select acc, trunc(TM) TM, last_value(sum) over (partition by acc, trunc(TM) 
  2                                    order by TM
  3            range between unbounded preceding and unbounded following) SM
  4  from test;

       ACC TM                SM
---------- --------- ----------
         1 04-FEB-09        200
         1 04-FEB-09        200
         2 04-FEB-09         50


?
4 фев 09, 11:20    [6776543]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
skelet
Member [заблокирован]

Откуда: moskau
Сообщений: 5549
locky

зы кстати, вот еще не знаю - что происходит с GTT при рекурсивном вызове процедур и псевдо-рекурсивном вызове? (A call B, B calls C, C call A)?

а ничего. Содержимое временных ограничивается сессией, к вызовам функций вообще отношения не имеет => ... ну сами понимаете
4 фев 09, 11:51    [6776791]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
МСУ

На кой они нужны в скивеле? Это оракляный пережиток прошлого из-за отсутствия автоинкремента


сотню раз муслолилось. sequence универсальнее, может раздавать значения для нескольких таблиц
так что не известно кто тут пережиток
4 фев 09, 11:52    [6776805]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
skelet
Member [заблокирован]

Откуда: moskau
Сообщений: 5549
SergSuper

softwarer

SQL> create type TIntTable is table of integer;

Type created

....

Замечательно. Но вот первая строчка - единственная которая мне и не нравится. Зачем она? почему бы не ограничиться хотя бы типом пакета? Если не ошибаюсь отправлять результаты запроса в локальную переменную же можно. Допустим я хочу таблиц 5 таких иметь в процедуре. Получается мне нужно объявить в 5 раз больше типов чем процедур. Вы конечно скажите, что можно один тип использовать на несколько процедур. Но вот только допустим потер я процедуру или сильно изменил - как мне проверить какие типы еще нужны, какие нет? И будут они плодиться и плодиться. Я подозреваю что Вы к этому привыкли и не считаете это неудобством, так же как например для англичанина звук th. Но мне кажется что если я использую объект локально, то удобно его там и описывать. Уверен что если бы у Вас была такая же возможность Вы бы тоже по другому к этому относились.


Может быть я вас не правильно понял, но что мешает ...

CREATE OR REPLACE PACKAGE test AS
  type t_t1 is table of integer;
  type t_t2 is table of t2%rowtype;

END test;
Это разве не то, что вам требуется?
4 фев 09, 12:02    [6776881]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Gluk (Kazan)
МСУ

На кой они нужны в скивеле? Это оракляный пережиток прошлого из-за отсутствия автоинкремента


сотню раз муслолилось. sequence универсальнее, может раздавать значения для нескольких таблицтак что не известно кто тут пережиток


Ага, конечно. Как-то был у меня залет на оре по документообороту HummingBird, когда сиквенс юзался несколькими таблицами - переполнение значений.

Бред. Каждой таблице - свой инкремент (или гуид). Так что сиквенсы - фтопку :)
4 фев 09, 12:09    [6776935]     Ответить | Цитировать Сообщить модератору
 Re: Выбор СУБД!  [new]
МСУ
Member [заблокирован]

Откуда: http://codearticles.ru
Сообщений: 31089
Подпольщик

Не скажите. Всё-таки более гибко. Тем более, что в постгре не надо их в триггера заворачивать,
можно только задать значение по умолчанию для поля как значение из последовательности.
А ещё есть SERIAL - если написать такой тип ключевого поля, то последовательность создастся и пропишется автоматом. Более удобно сделано, чем в Оракле.

Я о том и говорю - оракул фтопку со своими сиквенсами
4 фев 09, 12:10    [6776944]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 38 39 40 41 42 [43] 44 45 46 47 .. 75   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить