Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Базы данных: SQL > Выполнение ХП с параметром "out"


Автор: SilverShield 27.10.06, 05:49
Привет всем! Видимо совсем заработался... Как средствами SQL (из хранимой процедуры) выполнить другую процедуру, возвращающую один параметр out ?
В случае простой ХП (ничего не возвращающей) это будет
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    execute procedure proc1(par1, par2);

Но если proc1 возвращает хоть один параметр, то так уже не покатит.
Пробовал так
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    execute procedure proc1(par1, par2, out par3);
и
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    par3 = execute procedure proc1(par1, par2);
все неправильно...
А как собственно надо?

Добавлено
все, вопрос решен. нужен просто for select... Это я сегодня не варю.

Автор: Romkin 27.10.06, 07:46
Вообще говоря, можно и
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    execute procedure proc1(:par1, :par2)
    returning_values :out;

Это если только один suspend или его нет

Автор: SilverShield 27.10.06, 07:53
не знал про такое. Спасибо!

Автор: jack128 27.10.06, 08:36
а чем стандартный select out from prco1(:par1, :par1) into :out_value не устроил??

Автор: SilverShield 27.10.06, 08:47
дык я так в итоге и сделал, пока Romkin не показал вариант с returning_values

Добавлено
куча заморочек с синтаксисом получается. у каждой СУБД свои...

Автор: Romkin 27.10.06, 10:04
Вообще говоря, как правило, вариант с suspend в процедуре и вызовом ее через select предпочтительнее:
Во-первых, легко вызывать из обычного TxxQuery, во-вторых, вариант с returning_values требует приема всех выходных параметров, а при select можно брать только то, что нужно.
С другой стороны, вызывая процедуру через execute, вы гарантированно не получите исключения "Multiple rows in singleton select", первый же suspend сработает как exit.
В общем-то в этом вся разница.
А синтаксис и средства у каждой СУБД действительно свои.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)