Вызов процедуры из процедуры - объясните ?

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
arkiv
Сообщения: 14
Зарегистрирован: 30 сен 2005, 09:24

Вызов процедуры из процедуры - объясните ?

Сообщение arkiv » 30 сен 2005, 10:19

1)
select A_ID from Procedure1(6,0,69)
Запрос выдает в данном случае около 30 записей. (обрабатывает всего около 200)
внутри процедура обращается к таблице "XX" (всего около 200 записей)
время выполнения меньше секунды
2)
хочу
сделать следущее:
select A_ID from XX where A_ID in (select A_ID from Procedure1(6,0,69))

что тут не правильно ?
запрос выполняется в минутах !! 10-15мин.

в процедуре идет выборка всех A_ID таблицы соответствующим условию . тамже при разных условиях может использоваться рекурсия.
но я думаю что и это не главное.
так как в свободном полете Procedura1 Выполняется на Ура!,

каким образом мне использовать полученные данные для запроса IN

все работает с одой и тойже таблицей...

FireBird 152

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 30 сен 2005, 10:27

ну потому что where id in означает полный просмотр таблицы xx и на каждую ее запись вызов процедуры. То есть чтение происходит количество записей xx * число возвращаемых из процедуры.

arkiv
Сообщения: 14
Зарегистрирован: 30 сен 2005, 09:24

Сообщение arkiv » 30 сен 2005, 10:50

kdv писал(а):ну потому что where id in означает полный просмотр таблицы xx и на каждую ее запись вызов процедуры. То есть чтение происходит количество записей xx * число возвращаемых из процедуры.
А какие нибудь предложения по этому поводу можно получить ?
чтоб уйти от многократного вызова процедуры.
SOME - наверно также себя ведет ?

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 30 сен 2005, 12:50

Select XX.A_ID
From Procedure1(6,0,69), XX
Where XX.A_ID=Procedure1.A_ID

arkiv
Сообщения: 14
Зарегистрирован: 30 сен 2005, 09:24

Сообщение arkiv » 30 сен 2005, 15:35

Merlin писал(а):Select XX.A_ID
From Procedure1(6,0,69), XX
Where XX.A_ID=Procedure1.A_ID
Спасибо работает !. так красивей.

а я было уже сам чтото придумал:
for
select A_ID from Procedure1(6,0,69)
into A_ID
do
begin
select * from XX where AD_ID=A_ID
end
тоже работает..

Ответить