Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 5 6 7 8 9 [10] 11 12 13 14 .. 23   вперед  Ctrl
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
softwarer
Gluk (Kazan)
У ref-курсоров есть намой взгляд серьезная проблема. Нельзя понять что внутри (по структуре) не профетчив его. А чтобы его фетчить, надо знать его структуру.

Проблема есть, но серьезной я ее не ощущаю. Внутри бизнес-логики естественно передавать типизированные структуры данных, в том числе типизированные курсоры. Вы же не страдаете от невозможности передать в хранимку "любой record", динамически разобрать его тип, посмотреть поля и поработать с ними? С курсорами то же самое, "проблемой" это является либо для "черезчур универсального" кода, либо для демонстрационных извращений типа той же таблицы умножения :)


согласен
26 янв 07, 11:48    [3698099]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67383
Блог
kennethr
.
1. Повторюсь, Oracle разделил пакеты на тело и заголовок по очень конкретным причинам.

Повторяюсь: совершенно никто не мешает разделить хранимки на тело и заголовок. Без каких-либо синтаксических изменений, просто делая результатом CREATE PROCEDURE не один, а два объекта. Или "один, но логически рассматриваемый как два".
26 янв 07, 11:48    [3698103]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
DimaR
а что если нужно сначала провести сложную процедурную обработку данных


Гм... Что Вы понимаете под "сложной процедурной обработкой"?! Про таблицу умножения не надо. Мы же все-таки с данными работаем. Расчет фактической себестоимости изделия, расчет норм на изделие, формирование баланса, наконец. Оно? Не испытываю никаких проблем.
26 янв 07, 11:57    [3698162]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Гм... Что Вы понимаете под "сложной процедурной обработкой"?! Про таблицу умножения не надо. Мы же все-таки с данными работаем. Расчет фактической себестоимости изделия, расчет норм на изделие, формирование баланса, наконец. Оно? Не испытываю никаких проблем.


Как раз недавно пришлось Пакет выполняющий преобразование диапазонов IPv4-адресов в списки адресов сетей (с маской) через запятую. На PL/SQL рекурсивно. Если бы я перевел это в итеративный код то сломал бы мозк.

P.S. Правда, softwarer сейчас наверняка забубенит решение на чистом SQL :(
26 янв 07, 12:03    [3698208]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Gluk (Kazan)
Как раз недавно пришлось Пакет выполняющий преобразование диапазонов IPv4-адресов в списки адресов сетей (с маской) через запятую. На PL/SQL рекурсивно. Если бы я перевел это в итеративный код то сломал бы мозк.


Глубина рекурсивных вызовов 32
26 янв 07, 12:04    [3698214]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
DimaR
Member

Откуда:
Сообщений: 1570
pkarklin
Гм... Что Вы понимаете под "сложной процедурной обработкой"?! Про таблицу умножения не надо. Мы же все-таки с данными работаем. Расчет фактической себестоимости изделия, расчет норм на изделие, формирование баланса, наконец. Оно? Не испытываю никаких проблем.

Ну вот, сами просили конкретику, а теперь "никаких проблем", пример кода где?
26 янв 07, 12:05    [3698223]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
DimaR
pkarklin
Гм... Что Вы понимаете под "сложной процедурной обработкой"?! Про таблицу умножения не надо. Мы же все-таки с данными работаем. Расчет фактической себестоимости изделия, расчет норм на изделие, формирование баланса, наконец. Оно? Не испытываю никаких проблем.

Ну вот, сами просили конкретику, а теперь "никаких проблем", пример кода где?


Мне кажеться, что не совсем корректно, отвечать вопросом на вопрос.
26 янв 07, 12:46    [3698602]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
pkarklin
Gluk (Kazan)
А в процедурном коде тоже надо использовать with ???

Нет. Ибо MS SQL не имеет процедурного расширения а-ля PL\SQL.

Гмм всегда считал таковым TSQL. Разьве в нем нет операторов управления потоком исполнения ???


Присутствует только это:

BEGIN...END, BREAK, GOTO, CONTINUE, IF...ELSE, WHILE, RETURN, WAITFOR
26 янв 07, 12:48    [3698620]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
BEGIN...END, BREAK, GOTO, CONTINUE, IF...ELSE, WHILE, RETURN, WAITFOR


IMHO ВПОЛНЕ достаточно чтобы считаться процедурным расширением
26 янв 07, 12:52    [3698657]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Gluk (Kazan)
pkarklin
BEGIN...END, BREAK, GOTO, CONTINUE, IF...ELSE, WHILE, RETURN, WAITFOR


IMHO ВПОЛНЕ достаточно чтобы считаться процедурным расширением


Ну, все-таки, в MS SQL один язык T-SQL. Насколько я понимаю, чистый SQL и PL\SQL в Oracle это две совершенно разные сущности.
26 янв 07, 12:57    [3698707]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
pkarklin
Gluk (Kazan)
pkarklin
BEGIN...END, BREAK, GOTO, CONTINUE, IF...ELSE, WHILE, RETURN, WAITFOR


IMHO ВПОЛНЕ достаточно чтобы считаться процедурным расширением


Ну, все-таки, в MS SQL один язык T-SQL. Насколько я понимаю, чистый SQL и PL\SQL в Oracle это две совершенно разные сущности.


Дело не только в реализации. Я бы отделял декларативную часть языка от процедурного расширения.
26 янв 07, 12:59    [3698731]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
pkarklin
softwarer
pkarklin
Я всего-навсего высказал свое отношение к подходу, используемому в Oracle. А на счет ссылки, можно попросить привести, м.б. я что-то пропустил?

Ээ.. отсюда и дальше.


Спасибо. Ознакомлюсь...


2 softwarer

При всем уважении, я так и смог "отделить зерна от плевел" в вашей пикеровке с ChA.

softwarer
"Нормально" - это возвращать сколько угодно выборок каждую через свой именованный out параметр, а не в виде одной кучи, индексы в которой слетают от каждого чиха.


Выходным паратметром(ами) хп может быть курсор. С этим нет проблем. Впрочем, как и передача его (курсора) в другую хп, где он может быть обработан. А SET NOCOUNT ON не имеет никакого отношения к "порядковый номер в массиве возвращаемых рекордсетов" ибо таковых не существует без принятия дополнительных телодвижений.
26 янв 07, 13:28    [3698946]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
мастер утешать
Guest
softwarer
...
pkarklin
Вот только ответьте мне на вопросик, если пермишшены раздаются на пакет в целом, то как предоставить пользователю пермишшены на отдельные модули в пакете, отличные от пермишшенов пакета?

А зачем делать бессмысленную операцию? Смысл пакетов в том числе в том, что вместо

grant execute on sp_selectsomething to somebody ;
grant execute on sp_insertsomething to somebody ;
grant execute on sp_updatesomething to somebody ;
grant execute on sp_deletesomething to somebody ;

достаточно сделать

grant execute on something$utils to somebody ;
...


Если вы про "синтаксический сахар" при раздаче прав на группы объектов БД (в данном случае процедур) группам пользователей БД (ролям, если на то пошло), то в MS-SQL-2005 есть такая "фича" как схемы для "логической группировки" объектов БД (в 2000-м, к сожалению, эти схемы вырождены до уровня "создателя/владельца" объекта):
create proc [my_schema.]sp_selectsomething as
...;
GO
create proc [my_schema.]sp_insertsomething as
...;
GO
create proc [my_schema.]sp_updatesomething as
...;
GO
create proc [my_schema.]sp_deletesomething as
...;
GO
grant execute ON SCHEMA :: my_schema to somebody
И потом даже отдельным личностям:
DENY execute ON OBJECT :: my_schema.sp_deletesomething to oracloids
ИМХО, это немного погибче чем раздача прав на уровне одного общего пакета "раз и навсегда"...
26 янв 07, 13:36    [3699012]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
мастер утешать
Если вы про "синтаксический сахар" при раздаче прав на группы объектов БД (в данном случае процедур) группам пользователей БД (ролям, если на то пошло), то в MS-SQL-2005 есть такая "фича" как схемы для "логической группировки" объектов БД (в 2000-м, к сожалению, эти схемы вырождены до уровня "создателя/владельца" объекта):


Схемы и в Oracle есть, а пакеты это всеж-таки намного больше чем просто синтаксический сахар.
Впрочем пока на себе не почувствуешь, объяснить трудно.
26 янв 07, 13:38    [3699034]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67383
Блог
pkarklin
Выходным паратметром(ами) хп может быть курсор. С этим нет проблем.

Если не ошибаюсь, проблема в том, что этот курсор не может быть передан на клиента как рекордсет. В той теме вроде бы это упоминалось; суть в том, что в Oracle мы делаем ref cursor (или несколько), присваиваем ему какое-то значение, можем вернуть его в другую хранимку, можем вернуть на клиента, можем фетчить их в любом порядке. Насколько я понял СhA, в MSSQL получается так, что мы можем возвращать рекордсеты, но только на клиента, не в другую хранимку [и при этом работа с ними идет по индексам, не по именам], курсоры мы можем возвращать в другую ХП, но не на клиента, а еще мы можем создавать временную таблицу как глобальную переменную-результат, ее сможет прочитать и ХП, и клиент, но свои особенности.

pkarklin
А SET NOCOUNT ON не имеет никакого отношения к "порядковый номер в массиве возвращаемых рекордсетов" ибо таковых не существует без принятия дополнительных телодвижений.

Хм. Имеет ли - Вам виднее, сколь мне помнится, я упомянул это мельком в контексте "если мне не изменяет память", и если хотите оспорить, вряд ли стоит сводить довольно большую тему к оспариванию единственной незначимой детали, приведенной для лучшего взаимопонимания в конкретном месте.

Имеют ли отношение или не имеют - "факт" в том, что если в MSSQL я вызываю хранимку SP1 и ожидаю от нее возврата нескольких рекордсетов со вполне определенным смыслом, то мои ожидания в любой момент могут оказаться нарушенными самым что ни на есть печальным образом из-за изменения в совершенно другой части программы, не имеющей видимого отношения к SP1. Почему "факт" в кавычках - потому что я не создавал такой тестовой ситуации, это было мое понимание написанного в документации, и вроде бы грамотные mssql-щики этого утверждения не оспорили.
26 янв 07, 13:51    [3699149]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
DimaR
Member

Откуда:
Сообщений: 1570
pkarklin
Мне кажеться, что не совсем корректно, отвечать вопросом на вопрос.


Возьмем примерчик, функция должна возвращать набор простых чисел из заданного диапазона (я взял какойто алгоритм в инете, (в нем ошибка, но не столь важно)
create or replace function sn(cnt in number) return num_table pipelined is
 j number;
 i number;
 k number;
begin
  for i in 1..cnt loop
    j:=2;k:=floor(i/2);
    while ((i mod j) <> 0) and (j < k) loop j:=j+1; end loop;
    if j=k then 
      pipe row(i);
    end if;
  end loop;
  return;
end sn;

SQL> select * from TABLE(sn(50));

COLUMN_VALUE
------------
           4
           5
           7
          11
          13
          17
          19
          23
          29
          31
          37
          41
          43
          47

14 rows selected
как это будет выглядеть в MSSQL?
26 янв 07, 13:52    [3699159]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
кстати упоминавшаяся здесь WITH SCHEMABINDING может применяться только к функциям и вью, к процедурам не может

на мой взгляд эта отложенная проверка действительно является проблеммой и странно что за неё не возьмутся - мне кажется это не так уж и сложно было бы реализовать на сервере
26 янв 07, 13:55    [3699189]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67383
Блог
мастер утешать
Если вы про "синтаксический сахар"

Нет, я про бессмысленные операции. Скажем, если группа грамотных проектировщиков самым что ни на есть тщательным образом подошла к созданию нового автомобиля, легко представить себе, как некий цирковой артист, посмотрев на него, скажет: "ну и как мне ездить на нем на одном колесе?"

мастер утешать
то в MS-SQL-2005 есть такая "фича" как схемы для "логической группировки" объектов БД

OK. То есть группировку признаем имеющей некоторое практическое значение, раз уж она реализована и там, и там.

мастер утешать
ИМХО, это немного погибче чем раздача прав на уровне одного общего пакета "раз и навсегда"...

Погибче. Как я упоминал выше, "фичи лишними не бывают", соответственно ничуть не против наличия такой гибкости. Необходимости в ней не ощущаю, во всяком случае, сколь помню, мне ни разу не доводилось со слезами на глазах распиливать пакет только из-за того, чтобы уточнить права доступа к его частям.
26 янв 07, 13:58    [3699219]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
kennethr
Member

Откуда:
Сообщений: 175
softwarer
никто не мешает разделить хранимки на тело и заголовок

Это возможно уже сейчас или возможно потенциально? При такой схеме останется ли место локальным процедурам, то есть процедурам, которые я смогу безболезненно изменять/удалять не спрашивая других разработчиков?
Насколько я понял, пока у MSSQL все свалено в кучу. Это так?
26 янв 07, 14:03    [3699248]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
DimaR
pkarklin
Мне кажеться, что не совсем корректно, отвечать вопросом на вопрос.


Возьмем примерчик, функция должна возвращать набор простых чисел из заданного диапазона (я взял какойто алгоритм в инете, (в нем ошибка, но не столь важно)
create or replace function sn(cnt in number) return num_table pipelined is
 j number;
 i number;
 k number;
begin
  for i in 1..cnt loop
    j:=2;k:=floor(i/2);
    while ((i mod j) <> 0) and (j < k) loop j:=j+1; end loop;
    if j=k then 
      pipe row(i);
    end if;
  end loop;
  return;
end sn;

как это будет выглядеть в MSSQL?

Давайте еще проще пример: функция возращает значения от одного заданного значения до другого(просто она у меня есть и я ей пользуюсь)

CREATE FUNCTION sequence(
@start int, -- с
@end int)   -- по
RETURNS @seq TABLE (i int )
AS
BEGIN
declare @n int
set @n=@start
while 2*2=4
begin
  insert @seq select @n
  set @n=@n+1
  if @n>@end break
end

go

select * from sequence(1,10)

i           
----------- 
1
2
3
4
5
6
7
8
9
10

(10 row(s) affected)





Сообщение было отредактировано: 26 янв 07, 14:16
26 янв 07, 14:03    [3699252]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
DimaR

как это будет выглядеть в MSSQL?


Так:

CREATE FUNCTION sn(@cnt int)
RETURNS @Table TABLE (col1 int)
AS
 BEGIN
  DECLARE  
    @j int,
    @i int,
    @k int
    SET @i = 0
    WHILE @i <= @cnt BEGIN
      SET @j = 2;
      SET @k = floor(@i/2)
      while ((@i % @j) <> 0) and (@j < @k) SET @j = @j + 1
      IF  @j = @k INSERT @Table VALUES(@i)
      SET @i = @i + 1
    END
    RETURN
 END
GO

SELECT * FROM dbo.sn(50)

col1        
----------- 
4
5
7
11
13
17
19
23
29
31
37
41
43
47

(14 row(s) affected)


Сообщение было отредактировано: 26 янв 07, 14:13
26 янв 07, 14:08    [3699289]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
SergSuper
на мой взгляд эта отложенная проверка действительно является проблеммой и странно что за неё не возьмутся - мне кажется это не так уж и сложно было бы реализовать на сервере


Мне кажеться, Вам не приходилось работать с версией 6.5. Где ее не было.
26 янв 07, 14:09    [3699293]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
kennethr
softwarer
никто не мешает разделить хранимки на тело и заголовок

Это возможно уже сейчас или возможно потенциально? При такой схеме останется ли место локальным процедурам, то есть процедурам, которые я смогу безболезненно изменять/удалять не спрашивая других разработчиков?
Насколько я понял, пока у MSSQL все свалено в кучу. Это так?

Не совсем. Куча может быть разделена на пользователей, а с 2005 пользователей заменили на схемы.
Хотя я лично никогда объекты по пользователям не делил и не знаю того кто бы это делал. Возможно потому что у меня относительно немного объектов.
26 янв 07, 14:11    [3699312]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
SergSuper
Member

Откуда: SPb
Сообщений: 5488
pkarklin
SergSuper
на мой взгляд эта отложенная проверка действительно является проблеммой и странно что за неё не возьмутся - мне кажется это не так уж и сложно было бы реализовать на сервере


Мне кажеться, Вам не приходилось работать с версией 6.5. Где ее не было.

Приходилось, я и с 4-й работал
Вот в 6.5 то как раз лучше было - проверялись поля временных таблиц

Сообщение было отредактировано: 26 янв 07, 14:17
26 янв 07, 14:14    [3699332]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL или Oracle  [new]
DimaR
Member

Откуда:
Сообщений: 1570
pkarklin

Так:

теже яйца, но
почемуто у mssql-щиков, бытует мнение, что в оракле это намного сложнее, и не удобно
26 янв 07, 14:17    [3699365]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 5 6 7 8 9 [10] 11 12 13 14 .. 23   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить