Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.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. В общем-то в этом вся разница. А синтаксис и средства у каждой СУБД действительно свои. |