Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7 8 9 10 .. 24   вперед  Ctrl
 Re: Покритикуйте Оракл 10г  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67427
Блог
Владимир П.
Т.е., помимо вызова, сначала надо объявить возвращаемую структуру и PL/SQL-таблицу из этой структуры. Это всегда так требуется, или я чего-то не дочитал?

Да, в этом месте строгая типизация.

Владимир П.
softwarer
Кстати - а чем "пробег по ref cursor в цикле" отличается от "пробега по результату select в цикле"?

Тем, что не нужно специально объявлять курсор.

Хм. А чем "специально объявлять курсор" отличается от "специально объявлять select"?
31 май 07, 12:40    [4210996]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034

Владимир П. wrote:
> Если так просто, то почему все делают с объявлением REF CURSOR,
> возвратом его из функции и пробегом по REF CURSOR в цикле?
Может быть у "всех" много наследованного кода, который был написан до
того, как появилось понятие pipeline (кто раньше чего появился - не в
курсе).

Posted via ActualForum NNTP Server 1.4

31 май 07, 12:52    [4211140]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67427
Блог
locky
Может быть у "всех" много наследованного кода, который был написан до
того, как появилось понятие pipeline (кто раньше чего появился - не в
курсе)

table functions появились в версии 8.1.x (не помню, какой именно)
pipelined table functions появились кажется в 9.0
ref cursor.... не знаю, когда он появился, это было до того, как я занялся Oracle

Однако, сравнивать их довольно бессмысленно. Несколько лет назад я и сам полагал, что появление table functions делает ref cursor бесполезным.... а постепенно понял, что скорее table function-ам находится не так уж и много применений.
31 май 07, 13:25    [4211476]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Владимир П.
Member

Откуда: Екатеринбург
Сообщений: 443
softwarer
Хм. А чем "специально объявлять курсор" отличается от "специально объявлять select"?

REF CURSOR -- отдельная переменная, которую нужно объявить помимо самого запроса. И как использовать несколько курсоров в одном SQL-выражении; join выборок из нескольких pipelined-функций возможно? (Я админ, а не разработчик, и глубоко в PL/SQL не залезал).
Селективные процедуры InterBase обходятся без дополнительных объявлений. Их использование ничем не отличается от использования реляционной таблицы, кроме передачи параметров.

Как в Oracle запрограммировать такой запрос:
select * from FUNC_1( ..... ) q1, FUNC_2(....) q2
where q1.id = q2.id
,
где FUNC_1 и FUNC_2 -- селективные функции в терминологии InterBase или pipelined-функции в терминологии Oracle?
31 май 07, 13:40    [4211652]     Ответить | Цитировать Сообщить модератору
 Re: Oracle упрощает разработку на Java  [new]
DimaR
Member

Откуда:
Сообщений: 1570
Владимир П.
join выборок из нескольких pipelined-функций возможно? (Я админ, а не разработчик, и глубоко в PL/SQL не залезал).


Откройте для себя конвеерные функции
Например такие фичи:
(Pipelining Data Between PL/SQL Table Functions)
http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/tuning.htm#sthref2368

А вобщето в этом форуме это миллион раз обсуждалось, и постоянно, кто нибуть кто не разбирается, ляпает, что в оракле нельзя получать выборку из функции.

Модератор: не нужно менять тему!
забанен до завтра.


Сообщение было отредактировано: 31 май 07, 14:39
31 май 07, 13:49    [4211720]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67427
Блог
Владимир П.
REF CURSOR -- отдельная переменная, которую нужно объявить помимо самого запроса.

Не "помимо", а "вместо". Впрочем, вообще считать "сколько лексем нужно" не слишком разумно, имхо.

Владимир П.
И как использовать несколько курсоров в одном SQL-выражении

Как вернуть несколько выборок из одной "селективной процедуры"?

Владимир П.
join выборок из нескольких pipelined-функций возможно?

Безусловно. Хотя не очень понимаю, нафига такое.

Владимир П.
Селективные процедуры InterBase обходятся без дополнительных объявлений.

Вернее сказать, тянут эти объявления в своем returns. С интересом выслушаю рассуждения на тему принципиальной разницы этих вариантов.

Владимир П.
Как в Oracle запрограммировать такой запрос:
select * from FUNC_1( ..... ) q1, FUNC_2(....) q2
where q1.id = q2.id

Точно так же. Оберните функции в TABLE(), и все дела.
31 май 07, 13:51    [4211754]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Владимир П.
Member

Откуда: Екатеринбург
Сообщений: 443
softwarer
Как вернуть несколько выборок из одной "селективной процедуры"?

Нет. Как использовать выборки из нескольких селективных процедур в одном запросе. Как в примере с join'ом двух процедур.

Суть вопроса: я интересовался, можно ли работать с процедурами как с таблицами (в смысле синтаксиса) или можно только пройти по выборке в цикле.

softwarer
Владимир П.
Селективные процедуры InterBase обходятся без дополнительных объявлений.

Вернее сказать, тянут эти объявления в своем returns. С интересом выслушаю рассуждения на тему принципиальной разницы этих вариантов.


Соглашусь. Получается, объявление результата просто вынесено наружу из объявления функции.

softwarer
Точно так же. Оберните функции в TABLE(), и все дела.

Спасибо за дискуссию, всё стало ясно.

Получается, с выходом 9-й версии Oracle использование функций, возвращающих выборку, стало не сложнее, чем в InterBase.
31 май 07, 14:05    [4211866]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67427
Блог
Владимир П.
Нет.

Это был заданный Вам встречный вопрос :)

Владимир П.
Получается, с выходом 9-й версии Oracle

8-й. pipelined - это лишь добавленный позже вариант table function.
31 май 07, 14:27    [4211950]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
Владимир П.
Заглянул в документацию. Увидел, по сравнению с InterBase'ом, два объявления:


Недочитал
31 май 07, 14:47    [4212106]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
tkopets
Member

Откуда: Lviv, Ukraine
Сообщений: 60
softwarer
Скажем, меня крайне раздражает тот факт, что user-defined индексы делаются только по одному полю - но у кого из названных вообще есть user-defined индексы?

у PostgreSQL- минимум 5 лет уже есть, и не по одному полю:
http://en.wikipedia.org/wiki/PostgreSQL
http://www.postgresql.org/docs/8.2/static/xindex.html
1 июн 07, 02:34    [4215291]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
aZm
Member

Откуда:
Сообщений: 2357
komandarm
Ну ведь в любой научной 8) работе (я пишу диссер повнедрению в лаборатории хранилища данных) надо обосновать, почему я использую Оракл Экспресс Эдишн (на самом деле, потому что его на работе юзаю да и с компонентами в дельфи знаком). Но это не научно, вот и надо аргументировано показать что бывает "как в оракле" и "как неправильно"


простите великодушно, адын вопрос: а разве экспрес эдишн поддерживает фичи энтерпрайз версии вроде партиционирования? и разве там нет ограничений, критичных как раз для хранилищ? и причем тут дельфи)))? вы на нем репортинг накручивать собрались или ЕТЛ? (чур меня чур меня чур меня)
6 июн 07, 10:18    [4235064]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5539
ChA
Если правильно помню, то у Informix DS было нечто похожее, в частности, можно поискать по ключевому слову


create table a (a integer, b integer)
Table created.

create function abs_(f integer) returning integer WITH (NOT VARIANT) return abs(f); end function;
Routine created.

create index ixa on a(abs_(a), abs_(b))
Index created.
22 июн 07, 17:16    [4305518]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
ChA
Member

Откуда: Москва
Сообщений: 11376
Журавлев Денис


Index created.
Судя по всему, Вы были невнимательны, речь шла о создании нового индекса как метода доступа, а не индексе по функции.
22 июн 07, 18:29    [4305905]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5539
а может и это:

create function abs1_(f integer, f1 integer) returning integer WITH (NOT VARIANT) return abs(f)+abs(f1); end function;
Routine created.

create index ixa1 on a(abs1_(a,b))
Index created.
24 июн 07, 18:59    [4308202]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
single_multi
Member

Откуда:
Сообщений: 4
Геннадий Евтушенко

Но вобще думаю примерно на одной ступеньке стоят FireBird, ACCESS и Оракл.
А MYSQL и SQL Server на уровне чуть выше


Согласен.
5 июл 07, 18:58    [4357632]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Маленький вопрос, а как в 10г имплементировать что-нибудь подобное?

Результирующая таблица содержит суммарную стоимость деталей по производителю в оценке.


create table estimation
(
id int identity,
order_id int,
part_id int,
amount int
)
go
create table parts
(
id int identity,
vendor_id int,
name varchar(1000),
price money
)
go
create table vendor_orders
(
id int identity,
vendor_id int,
order_id int,
price money
)
go
IF OBJECT_ID ('fill_vendor_orcers','TR') IS NOT NULL
DROP TRIGGER fill_vendor_orcers
GO
CREATE TRIGGER fill_vendor_orcers ON estimation
AFTER INSERT
AS

insert vendor_orders (vendor_id, order_id, price)
select b.vendor_id, a.order_id, sum(b.price*a.amount)
from inserted a inner join parts b on a.part_id = b.id
group by order_id, vendor_id
go
6 июл 07, 05:03    [4358345]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
single_multi
Геннадий Евтушенко

Но вобще думаю примерно на одной ступеньке стоят FireBird, ACCESS и Оракл.
А MYSQL и SQL Server на уровне чуть выше


Согласен.


!!! ОНИ НАШЛИ ДРУГ ДРУГА !!!
6 июл 07, 09:30    [4358649]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034

Gluk (Kazan) wrote:
> !!! ОНИ НАШЛИ ДРУГ ДРУГА !!!
Клону скушно :-(
Может его через денёк забанить?
Чтобы сильно не нафлеймил? :)

Posted via ActualForum NNTP Server 1.4

6 июл 07, 15:08    [4361075]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

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

Клону скушно :-(


Его коллега ЧАЛ был несколько изобретательнее, спорил друг с другом :(
Не надо банить, скушно будет
6 июл 07, 15:11    [4361107]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
locky
Member

Откуда: Харьков, Украина
Сообщений: 62034

Gluk (Kazan) wrote:
> Не надо банить, скушно будет
Дык я и говорю - подождать денёк-другой...
А то и правда - скукота...
Последний нормальный холивар - и тот в ПТ был :-)

Posted via ActualForum NNTP Server 1.4

6 июл 07, 15:18    [4361155]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9652
Критиковать доказательно - неэффективно. Лучше бросаться фразами типа "говно этот оракл" и на вопросы "почему?" презрительно усмехаться :)
16 июл 07, 03:50    [4390821]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
drev
Member

Откуда: Одесса - Берег Красного Дерева - Красный мир
Сообщений: 564
Дикий Билл
Критиковать доказательно - неэффективно. Лучше бросаться фразами типа "говно этот оракл" и на вопросы "почему?" презрительно усмехаться :)



Похоже Вы правы:)

Мне на конструктивный вопрос(про триггер) никто не ответил:)
16 июл 07, 04:27    [4390829]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Дикий Билл
Member

Откуда:
Сообщений: 9652
Я ни кого конкретно не имел в виду. Это реальный совет. И вообще вместо того чтоб чето доказывать говорить "... а вот попробуйте докажите..." или что-то в этом роде. Оппонент сразу становится защищающимся и зрители (слушатели) на вашей стороне. Психология.
16 июл 07, 05:31    [4390846]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
Gluk (Kazan)
Member

Откуда:
Сообщений: 9365
drev
Дикий Билл
Критиковать доказательно - неэффективно. Лучше бросаться фразами типа "говно этот оракл" и на вопросы "почему?" презрительно усмехаться :)



Похоже Вы правы:)

Мне на конструктивный вопрос(про триггер) никто не ответил:)


Вопрос конструктивный, но малоинтересный.
Задайте свой вопрос на ветке Oracle на него мигом ответят :)
16 июл 07, 09:06    [4390978]     Ответить | Цитировать Сообщить модератору
 Re: Покритикуйте Оракл 10г  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67427
Блог
drev
Мне на конструктивный вопрос(про триггер) никто не ответил:)

Хм. Простите, а что в нем конструктивного? Ну отвечу я Вам -

create materialized view vendor_orders refresh fast on commit as
select b.vendor_id, a.order_id, sum ( b.price * a.amount ) price
from estimated a inner join parts b on a.part_id = b.id
group by order_id, vendor_id

И что, Вам стало реально легче?
16 июл 07, 09:11    [4390990]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6 7 8 9 10 .. 24   вперед  Ctrl
Все форумы / Сравнение СУБД Ответить