|
|
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
Как выполнить хранимую процедуру с вх/вых параметрами и получить набор записей? Без параметров выполняется по следующей схеме: 1. подготовка (SQLPrepare) 2. привязка столбцов (SQLBindCol) 3. выполнение (SQLExecute) 4. извлечение данных в цикле (SQLFetch) С параметрами: 1. привязка параметров (SQLBindParameter) 2. выполнение (SQLExecDirect) 3. вызов SQLMoreResult. После этого не удается переходить по записям, в привязанных переменных находится последний полученный результат (т.е. из последней строки запроса. Кстати, речь идет о запросах SELECT) Проблема: что сделать, чтобы в результате выполнения процедуры с параметрами, я могла работать со всеми строками, получать данные из них? Вызов SQLFetch в случае выполнения процедуры с параметрами дает ошибку. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2007, 18:26 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
she пишет: > После этого не удается переходить по записям, в привязанных переменных > находится последний полученный результат (т.е. из последней строки > запроса. Кстати, речь идет о запросах SELECT) Ну а что еще там ты хотела увидеть ? > что сделать, чтобы в результате выполнения процедуры с параметрами, я > могла работать со всеми строками, получать данные из них? Вызов SQLFetch > в случае выполнения процедуры с параметрами дает ошибку. Какую ? Именно Fetch и надо вызывать для получения следующих строк. Обобщенно выполнение процедуры что с, что без параметров выглядит так : 1. подготовка (SQLPrepare) (или отсутствует) 2. привязка параметров (SQLBindParameter) 3. выполнение (SQLExecute) или (SQLExecDirect) 4. описание столбцов (SQLDescribeCol) 5. привязка столбцов (SQLBindCol) 6. извлечение данных в цикле (SQLFetch) 7. вызов SQLMoreResult. 4-2. описание столбцов (SQLDescribeCol) 5-2. привязка столбцов (SQLBindCol) 6-2. извлечение данных в цикле (SQLFetch) 7-2. вызов SQLMoreResult. 8. вызов SQLMoreResult - возвращает, что больше нет данных. 9. Тут можно считать значения возвращенных выходных параметров (и кода возврата процедуры). Но на самом деле использовать подготовленное выполнение для вызовов хранимых процедур не очень имеет смысл. Хотя конечно может зависить от СУБД, кстати, которую мы и не знаем. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2007, 19:35 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
MasterZiv she пишет: > После этого не удается переходить по записям, в привязанных переменных > находится последний полученный результат (т.е. из последней строки > запроса. Кстати, речь идет о запросах SELECT) Ну а что еще там ты хотела увидеть ? хотела увидеть тоже самое для записей с первой по --последней. НО см. ниже. > что сделать, чтобы в результате выполнения процедуры с параметрами, я > могла работать со всеми строками, получать данные из них? Вызов SQLFetch > в случае выполнения процедуры с параметрами дает ошибку. Какую ? Именно Fetch и надо вызывать для получения следующих строк. функция АПИ возвращает ошибку (каюсь, надо делать диагностику...) Обобщенно выполнение процедуры что с, что без параметров выглядит так : 1. подготовка (SQLPrepare) (или отсутствует) 2. привязка параметров (SQLBindParameter) 3. выполнение (SQLExecute) или (SQLExecDirect) 4. описание столбцов (SQLDescribeCol) 5. привязка столбцов (SQLBindCol) 6. извлечение данных в цикле (SQLFetch) 7. вызов SQLMoreResult. 4-2. описание столбцов (SQLDescribeCol) 5-2. привязка столбцов (SQLBindCol) 6-2. извлечение данных в цикле (SQLFetch) 7-2. вызов SQLMoreResult. 8. вызов SQLMoreResult - возвращает, что больше нет данных. 9. Тут можно считать значения возвращенных выходных параметров (и кода возврата процедуры). СПАСИБО но чё-т все равно возвращает SQLFetch возвращает -1. Поборюсь уже дома, с диагностикой. Если у вас есть линки на хорошие ресурсы, дайте пожалуйста. Но на самом деле использовать подготовленное выполнение для вызовов хранимых процедур не очень имеет смысл. Хотя конечно может зависить от СУБД, кстати, которую мы и не знаем. Posted via ActualForum NNTP Server 1.4 БД - MS SQL Server 2000 Сейчас главное, срочно разобраться и чтобы всё работало, оптимизация - следующий шаг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2007, 20:38 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
she пишет: > хотела увидеть тоже самое для записей с первой по --последней. НО см. ниже. Как в ОДНОЙ переменной для одной колонки могут поместиться все строки ? Ты биндишь массив ? (так тоже можно). Но все равно он конечной длины, а набор данных потенциально безконечный. > СПАСИБО > но чё-т все равно возвращает SQLFetch возвращает -1. Поборюсь уже дома, > с диагностикой. > Если у вас есть линки на хорошие ресурсы, дайте пожалуйста. MSDN-а достаточно, я думаю, там все расписано. > БД - MS SQL Server 2000 > Сейчас главное, срочно разобраться и чтобы всё работало, оптимизация - > следующий шаг. Там точно не нужно подготовленное выполнение для вызова хранимых процедур. Оно только вредно. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2007, 10:18 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
здравствуйте! автор этой темы перерегистрировалась под ником-именем Lenie Я снова прошу помощи у уважаемых мастеров. Моя задача - написать вызов хранимой процедуры. Вызываемая процедура, колчисетво и тип параметров заранее неизвестны. Строка вызова, привязка параметров формируются в процессе выполнения программы. ВОПРОС: после вызова SQLProcedureColumns в столбец COLUMN_TYPE всегда возвращается @RETURN_VALUE, даже если на сервере MS SQL Server 2000 не описан ни один параметр - это правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 17:54 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
LenieМоя задача - написать вызов хранимой процедуры. Вызываемая процедура, колчисетво и тип параметров заранее неизвестны. Строка вызова, привязка параметров формируются в процессе выполнения программы. ВОПРОС: после вызова SQLProcedureColumns в столбец COLUMN_TYPE всегда возвращается @RETURN_VALUE, даже если на сервере MS SQL Server 2000 не описан ни один параметр - это правильно?А тебе очень-очень нужно делать привязку к хранимой процедуре? Данная функция может быть полезна только в том случае, если ты делаешь свой собственный 'database explorer'. Чтобы узнать с какими параметрами процедуру можно в принципе запустить - эта функция будет полезна. Для всех остальных задач она нафиг не нужна. Если тебе приходит какой-то sql запрос, с простым select'ом, пакетом sql команд или вызовом хранимки, да в общем-то не важно с чем. Достаточно будет взять эту команду как есть и отправить ее на сервер БД через SQLExecDirect(), твоя программа автоматически замерзнет на время пока сервер обрабатывает запрос. Потом вызываешь SQLNumResultCols() получаешь количество колонок в фактически полученом резалтсете. И в цикле запускаешь SQLDescribeCol() получаешь типы колонок в резалтсете. Потом по желанию делаешь SQLBindCol() и получаешь данные через SQLFetch(). Если не делать SQLBindCol(), то после каждого SQLFetch() надо будет звать SQLGetData(). Кстати, учти что процедуры (да и пакеты тоже) могут выдавать разные резалтсеты в зависимости от своей внутренней логики. SQLProcedureColumns это отловить не сможет, она покажет только те колонки которые были описаны в хранимке в списке RESULTS. А с вариантным резалтсетом можно работать только запустив пакет/хранимку и получив фактический резалтсет. И тоже самое с множественными резалтсетами - пока первый резалтсет не выберешь, до второго не доберешься :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 18:38 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
Lenie пишет: > Автор: "Lenie" > здравствуйте! > автор этой темы перерегистрировалась под ником-именем Lenie > > Я снова прошу помощи у уважаемых мастеров. > Моя задача - написать вызов хранимой процедуры. Вызываемая процедура, > колчисетво и тип параметров заранее неизвестны. Строка вызова, привязка > параметров формируются в процессе выполнения программы. > > ВОПРОС: после вызова SQLProcedureColumns в столбец COLUMN_TYPE всегда > возвращается @RETURN_VALUE, даже если на сервере MS SQL Server 2000 не > описан ни один параметр - это правильно? Да. У каждой процедуры всегда есть один неявный псевдопараметр - код возврата процедуры. Процедура обычно вызывается так (ODBC): {call ? = MyProc([?...])} Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2007, 19:06 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
White OwlЕсли тебе приходит какой-то sql запрос, с простым select'ом, пакетом sql команд или вызовом хранимки, да в общем-то не важно с чем. Достаточно будет взять эту команду как есть и отправить ее на сервер БД через SQLExecDirect(), твоя программа автоматически замерзнет на время пока сервер обрабатывает запрос. Потом вызываешь SQLNumResultCols() получаешь количество колонок в фактически полученом резалтсете. И в цикле запускаешь SQLDescribeCol() получаешь типы колонок в резалтсете. Потом по желанию делаешь SQLBindCol() и получаешь данные через SQLFetch(). Если не делать SQLBindCol(), то после каждого SQLFetch() надо будет звать SQLGetData(). Спасибо. С запросами разобралась, сделала. White OwlКстати, учти что процедуры (да и пакеты тоже) могут выдавать разные резалтсеты в зависимости от своей внутренней логики. SQLProcedureColumns это отловить не сможет, она покажет только те колонки которые были описаны в хранимке в списке RESULTS. А с вариантным резалтсетом можно работать только запустив пакет/хранимку и получив фактический резалтсет. И тоже самое с множественными резалтсетами - пока первый резалтсет не выберешь, до второго не доберешься :) т.е. вы имеете в виду что для каждой новой SQL инструкции надо делать новую привязку столбцов? MasterZiv Да. У каждой процедуры всегда есть один неявный псевдопараметр - код возврата процедуры. игнорировать его можно? ВОПРОС: подскажите пжл, как правильно формировать строку вызова для процедуры с выходным параметром? Делаю, как написано в МСДН - не работает. долго уже борюсь... вот мои действия: 1. вызов SQLProcedureColumns для получения инф-ции о параметрах процедуры. 2. SQLDescribeCol - описание столбцов процедуры. 3. SQLBindCol - связь столбцов резалтсета, содержащего описание процедуры, с буфером приложения. 4. вызов SQLFetch в цикле - чтение и заполнение буфера приложения информацией, необходимой для последующего вызова SQLBindParameter. Напоследок вызов SQLMoreResults. 5. выбрасываю считанный столбец @RETURN_VALUE. 6. формирую строку вызова. 7. SQLPrepare 8. SQLBindParameter в цикле для всех параметров 9. SQLExecute 10. SQLDescribeCol - уже для описания столбцов запроса, который объявлен внутри ХП. 11. SQLBindCol - тоже уже для столбцов конечного резалтсета 12. вызов SQLFetch в цикле. SQLMoreResults. ПРОБЛЕМА: написала маленькую процедуру с одним ВЫходным параметром. Во время выполнения п.10 описаннного мной алгоритма функция возвращает ошибку 07005 Prepared statement not a cursor-specification. The statement associated with the StatementHandle did not return a result set. There were no columns to describe. процедура выглядит так: "CREATE PROCEDURE [dbo].[test_proc] @Res varchar(255) output AS SELECT @Res=Name FROM table1 GO" Строка вызова: "{call test_proc(?)}". Вариант "{?=call test_proc}" давал ошибку "Procedure 'test_proc' expects parameter '@Res', which not supplied" на этапе SQLExecute. С входными параметрами проблем нет. я потерялась в трех соснах. MasterZivПроцедура обычно вызывается так (ODBC): {call ? = MyProc([?...])} точнее {[?=]MyProc[(?...)]} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 16:41 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
LenieСпасибо. С запросами разобралась, сделала.Вызов процедуры это такой же простой запрос. Там все делается абсолютно так же как и с select или update. Lenieт.е. вы имеете в виду что для каждой новой SQL инструкции надо делать новую привязку столбцов?Да конечно. Новую привязку можно не делать тогда и только тогда если ты подготовила запрос и запускаешь один и тот же запрос несколько раз. Как только ты вызвала SQLPrepare все привязки параметров и колонок сделаные на этом стейтменте автоматически убились. Lenie MasterZivДа. У каждой процедуры всегда есть один неявный псевдопараметр - код возврата процедуры.игнорировать его можно?Конечно. Игнорировать можно все что угодно :) LenieВОПРОС: подскажите пжл, как правильно формировать строку вызова для процедуры с выходным параметром? Делаю, как написано в МСДН - не работает. долго уже борюсь...Правильно так: Код: plaintext 1. 2. 3. 4. 5. LenieПРОБЛЕМА: написала маленькую процедуру с одним ВЫходным параметром. Во время выполнения п.10 описаннного мной алгоритма функция возвращает ошибку 07005 Prepared statement not a cursor-specification. The statement associated with the StatementHandle did not return a result set. There were no columns to describe. процедура выглядит так: "CREATE PROCEDURE [dbo].[test_proc] @Res varchar(255) output AS SELECT @Res=Name FROM table1 GO"Естественно, у этой процедуры нету резалтсета вообще. Между SQLExecute() и SQLDescribeCol() обязательно надо звать SQLNumResultCols(). Она тебе скажет а если вообще колонки для SQLDescribeCol() и нужно ли вообще делать SQLFetch(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 18:35 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
Lenie пишет: > Кстати, учти что процедуры (да и пакеты тоже) могут выдавать разные > резалтсеты в зависимости от своей внутренней логики. SQLProcedureColumns > это отловить не сможет, она покажет только те колонки которые были > описаны в хранимке в списке RESULTS. SQLProcedureColumns , вообще-то , описывает ПАРАМЕТРЫ хранимой процедуры, а не набора данных, возвращаемого ею. Может , конечно, в ASA оно и это тоже показывает, но в общем случае процедура может возвращать и несколько наборов, так что описать наборы вообще невозможно. > т.е. вы имеете в виду что для каждой новой SQL инструкции надо делать > новую привязку столбцов? Ну это безусловно так. по-другому вообще будет нарушение переходов в стейт-машине ODBC. > игнорировать его можно? Можно всегда. > 1. вызов SQLProcedureColumns для получения инф-ции о параметрах процедуры. > 2. SQLDescribeCol - описание столбцов процедуры. Это для набора данных, возвращаемого SQLProcedureColumns, да ? у процедуры нет столбцов, это ее параметры. > 3. SQLBindCol - связь столбцов резалтсета, содержащего описание > процедуры, с буфером приложения. > 4. вызов SQLFetch в цикле - чтение и заполнение буфера приложения > информацией, необходимой для последующего вызова SQLBindParameter. > Напоследок вызов SQLMoreResults. > 5. выбрасываю считанный столбец @RETURN_VALUE. Тут обработка SQLProcedureColumns закончилась. > 6. формирую строку вызова. > 7. SQLPrepare > 8. SQLBindParameter в цикле для всех параметров Да, но для выходных параметров надо биндить с указанием, что это выходной параметр, ОБЯЗАТЕЛЬНО, иначе его значение не получится. > 9. SQLExecute > 10. SQLDescribeCol - уже для описания столбцов запроса, который объявлен > внутри ХП. > 11. SQLBindCol - тоже уже для столбцов конечного резалтсета > 12. вызов SQLFetch в цикле. SQLMoreResults. Да, потом ПОСЛЕ ТОГО КАК ТЫ ПРО-FETCH-ИШЬ ВСЕ НАБОРЫ ДАННЫХ, в сбинженных параметрах, которые ты пометила как выходные, будут получены пришедшие с сервера значения. НО НЕ РАНЕЕ !! > ПРОБЛЕМА: написала маленькую процедуру с одним ВЫходным параметром. Во > время выполнения п.10 описаннного мной алгоритма функция возвращает > ошибку 07005 Prepared statement not a cursor-specification. > The statement associated with the StatementHandle did not return a > result set. There were no columns to describe. > > процедура выглядит так: > "CREATE PROCEDURE [dbo].[test_proc] > @Res varchar(255) output > AS > SELECT @Res=Name FROM table1 Ну правильно, это - выборка в переменную, она не идет на клиента. Перед SQLDescribeCol нужно вызвать SQLNumResultColumns или что-то в этом роде, если оно вернет 0 - набора данных нет - не фетчить данные вообще. Ну и не описывать колонки. > GO" > > Строка вызова: "{call test_proc(?)}". Вариант "{?=call test_proc}" давал > ошибку > "Procedure 'test_proc' expects parameter '@Res', which not supplied" на > этапе SQLExecute. Обязательный параметр - надо указывать. > С входными параметрами проблем нет. Не понял. Это и есть входной параметр. > точнее {[?=]MyProc[(?...)]} Ну call там обязательно есть. Я может не точно помню , должно ли это быть ?=call или call ?=, но call должен быть. Это одна из так называемых escape-commands {call }. Но впрочем можно и нативный синтаксис использовать, без {}. exec youProcName aaa, ppp, ccc только выходных параметров так не получить. Ну и кода возврата тоже. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 18:41 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > подготовила запрос и запускаешь один и тот же запрос несколько раз. Как > только ты вызвала SQLPrepare все привязки параметров и колонок сделаные Для процедуры-то Prepare не надо использовать.. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 18:45 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > Естественно, у этой процедуры нету резалтсета вообще. Между SQLExecute() > и SQLDescribeCol() *обязательно надо* звать SQLNumResultCols(). Она тебе Виш как, Сов, мы оба с табой АДЫБЫЦЫ классна знаим Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2007, 18:47 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
правильно ли я поняла: 1) если в процедуре описан OUTPUT параметр, резалт сета не будет. Рассматриваю простейший случай - один SELECT в процедуре. При следующем применении output параметра "..... select @out_param=field1 from table1......" переменная @out_param будет содержать последнее значение, присвоенное ей в результате выполнения запроса. 2) возвращаемый параметр @RETURN_VALUE используется только в случае применения оператора return в самой процедуре. спасибо за терпение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2007, 10:50 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
Lenie пишет: > 1) если в процедуре описан OUTPUT параметр, резалт сета не будет. Нет, неправильно. Несвязанные вещи. > Рассматриваю простейший случай - один SELECT в процедуре. При следующем > применении output параметра > "..... select @out_param=field1 from table1......" > переменная @out_param будет содержать последнее значение, присвоенное ей > в результате выполнения запроса. Ну так напиши еще другой селект,не в переменные, и будет тебе набор данных. Напиши три, будет три набора данных. > 2) возвращаемый параметр @RETURN_VALUE используется только в случае > применения оператора return в самой процедуре. Я не понял, что такое "возвращаемый параметр @RETURN_VALUE". У процедуры всегда есть код возврата процедуры, даже если не написать return. это значение типа int. отличное от нуля считается ошибкой, ноль - нормально, отрицательные - системной ошибкой. Хотя это соглашение нигде не прошито и его можно свободно нарушать. Кроме этого у процедуры могут быть выходные параметры - они объявлены как OUTPUT, при этом такие параметры являются и входными тоже, т.е. если в них при вызове передать значение, оно придет в процедуру. Т.е. бывают два типа параметров - только входные, и входные и выходные. Кроме этого процедура способна возвращать от нуля до N наборов данных (таблиц), каждый из которых может содержать от нуля до M строк. N и M - практически неограничены. При передаче выходных параметров и кода возврата процедуры на клиенте в обоих случаях нужно обязательно помечать параметры как выходные, иначе их значения из хранимой процедуры не вернуться. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2007, 12:22 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
MasterZiv Lenie пишет: > 1) если в процедуре описан OUTPUT параметр, резалт сета не будет. Нет, неправильно. Несвязанные вещи. я написала это утверждение под конкретный случай, который описала в этом же пункте MasterZiv > Рассматриваю простейший случай - один SELECT в процедуре. При следующем > применении output параметра > "..... select @out_param=field1 from table1......" > переменная @out_param будет содержать последнее значение, присвоенное ей > в результате выполнения запроса. Ну так напиши еще другой селект,не в переменные, и будет тебе набор данных. Напиши три, будет три набора данных. понятно я уточняла именно для такого примера, чтобы убедиться что я правильно поняла MasterZiv > 2) возвращаемый параметр @RETURN_VALUE используется только в случае > применения оператора return в самой процедуре. Я не понял, что такое "возвращаемый параметр @RETURN_VALUE". я имела в виду значение, содержащееся в столбце @RETURN_VALUE после вызова SQLProcedureColumns, SQLDescribCol MasterZivУ процедуры всегда есть код возврата процедуры, даже если не написать return. это значение типа int. отличное от нуля считается ошибкой, ноль - нормально, отрицательные - системной ошибкой. Хотя это соглашение нигде не прошито и его можно свободно нарушать. Кроме этого у процедуры могут быть выходные параметры - они объявлены как OUTPUT, при этом такие параметры являются и входными тоже, т.е. если в них при вызове передать значение, оно придет в процедуру. Т.е. бывают два типа параметров - только входные, и входные и выходные. Кроме этого процедура способна возвращать от нуля до N наборов данных (таблиц), каждый из которых может содержать от нуля до M строк. N и M - практически неограничены. При передаче выходных параметров и кода возврата процедуры на клиенте в обоих случаях нужно обязательно помечать параметры как выходные, иначе их значения из хранимой процедуры не вернуться. спасибо! вопросов нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2007, 12:58 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
White OwlКстати, учти что процедуры (да и пакеты тоже) могут выдавать разные резалтсеты в зависимости от своей внутренней логики. SQLProcedureColumns это отловить не сможет, она покажет только те колонки которые были описаны в хранимке в списке RESULTS. А с вариантным резалтсетом можно работать только запустив пакет/хранимку и получив фактический резалтсет. И тоже самое с множественными резалтсетами - пока первый резалтсет не выберешь, до второго не доберешься :) White Owl, объясните пожалуйста вышесказанное, т.е. что такое вариантный и множественный резалтсет? Есть ли особенности вызова и обработки ХП, в которой прописаны IF, SELECT, UPDATE? Или дайте ссылку на ответы в МСДН, т.к. ответов на свои вопросы я там не нашла. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 17:29 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
Lenie пишет: > что такое вариантный Если ты напишешь в процедуре вывод разных резалтсетов в зависимости от условия какого-то. Код: plaintext 1. 2. 3. 4. > и множественный резалтсет? Да просто несколько резалтсетов. Код: plaintext 1. 2. Есть ли особенности вызова и обработки ХП, в > которой прописаны IF, SELECT, UPDATE? Нет. Есть универсальный типовой алгоритм обработки любых запросов (в том числе и не ХП), реализуя который будешь всегда правильно работать с любыми запросами, вслючая и вызовы ХП. Он описан на псевдокоде в спецификации OBDC. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 18:15 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
MasterZiv Есть ли особенности вызова и обработки ХП, в > которой прописаны IF, SELECT, UPDATE? Нет. Есть универсальный типовой алгоритм обработки любых запросов (в том числе и не ХП), реализуя который будешь всегда правильно работать с любыми запросами, вслючая и вызовы ХП. Он описан на псевдокоде в спецификации OBDC. Posted via ActualForum NNTP Server 1.4 спасибо, понятно но для особо одаренных, дайте ссылку пжл, где я могу увидеть универсальный алгоритм на псевдокоде в спецификации OBDC? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 18:24 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
LenieWhite Owl, объясните пожалуйста вышесказанное, т.е. что такое вариантный и множественный резалтсет?Хранимая процедура может при объявлении содержать в своем заголовке ключевое слово RESULT с перечислением полей которые эта процедура вернет. Например: Код: plaintext Кроме одного простого резалтсета, процедура может возвращать разные резалтсеты в зависимости от своей внутренней логики. Вот например грубый пример вариантного резалтсета: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Аналогично множественные резалтсеты: Код: plaintext 1. 2. 3. 4. Код: plaintext 1. 2. 3. 4. 5. 6. 7. LenieЕсть ли особенности вызова и обработки ХП, в которой прописаны IF, SELECT, UPDATE?Да нет вроде, никаких особенностей. Во всяком случае, я это особенностями не считаю :) LenieИли дайте ссылку на ответы в МСДН, т.к. ответов на свои вопросы я там не нашла.Там это найти сложно.... Это проще найти в учебниках по SQL, и в MDAC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2007, 18:26 |
|
||
|
ODBC API, хранимые процедуры, возврат set
|
|||
|---|---|---|---|
|
#18+
White Owl пишет: > Хранимая процедура может при объявлении содержать в своем заголовке > ключевое слово RESULT с перечислением полей которые эта процедура > вернет. Например: Это не во всех СУБД. > В этом случае обращение к SQLProcedureColumns вернет описание двух > колонок ret1 и ret2. Но процедура может и не содержать слова RESULT в > своем объявлении. Тогда результат SQLProcedureColumns() непредсказуем... SQLProcedureColumns вообще-то описывает, не смотря на свое название, параметры процедуры. Summary SQLProcedureColumns returns the list of input and output parameters, as well as the columns that make up the result set for the specified procedures. The driver returns the information as a result set on the specified statement. А "as well as the columns that make up the result set for the specified procedures." не всегда правда. В некоторых (точнее скажем - во многих СУБД) просто нет средств описания возвращяемых наборов данных. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2007, 01:13 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34536741&tid=2028440]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
191ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 506ms |

| 0 / 0 |
