|
|
|
ASE12 курсор
|
|||
|---|---|---|---|
|
#18+
Господа, подкиньте пож ссылку на доку по использованию курсоров в ХП на ASE12, либо подскажите синтаксис как правильно реализовать следующее. В процедуре необходимо пройтись по выборке(курсору) , внутри как в цикле, реализовать какие-то правила и выгрузить толко те записи которые необходимы. Так же интересует возможность создания вложенных курсоров, когда двигаясь по одному курсору мы создаем другие ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 11:16 |
|
||
|
ASE12 курсор
|
|||
|---|---|---|---|
|
#18+
SQL.RU FAQ: http://www.sql.ru/faq/faq_topic.aspx?fid=248 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 12:45 |
|
||
|
ASE12 курсор
|
|||
|---|---|---|---|
|
#18+
while 1=1 begin fetch <cursor name> into ... if @@sqlstatus = 2 break if @@sqlstatus = 1 begin select @error = 1 raiserror 20000 'Ошибка при работе с курсором <cursor name>' break end -- обработка строки -- пример обработки ошибки if @@error <> 0 or @@rowcount <> 1 begin select @error = 1 raiserror 20000 'Ошибка ...' break end end автор хотел сказать что с каждым fetch <cursor name> into ... я получаю следующую запись тогда вопрос если я заранее знаю что в курсоре 2 записи то fetch <cursor name> fetch <cursor name> такая последовательность без into должна вывести в ресалтдатасет две записи - не работает выводит одну либо я не понял как происходит движение по курсору либо...... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 13:28 |
|
||
|
ASE12 курсор
|
|||
|---|---|---|---|
|
#18+
Maks_f с каждым fetch <cursor name> into ... я получаю следующую запись тогда вопрос если я заранее знаю что в курсоре 2 записи то fetch <cursor name> fetch <cursor name> такая последовательность без into должна вывести в ресалтдатасет две записи - не работает выводит одну либо я не понял как происходит движение по курсору либо...... Нет, такая последовательность выводит ДВА резалтсета, по одной записи в каждом. Первую в первом, вторую во втором. Две (или более) записи сразу вывести нельзя, по крайней мере в ASE 12. Для клиентского приложения это будут два полноценных резалтсета, таких, какие бы сформировал SELECT. Я бы рекомендовал следать для того, что ты хочешь, временную таблицу, куда помещать в цикле курсора ПК нужных записей, а затем после курсора уже все выводить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 14:31 |
|
||
|
ASE12 курсор
|
|||
|---|---|---|---|
|
#18+
toMasterZIV Обычный селект выдает две записи а процедура выдает все равно 1 ладно по поводу временных таблиц полностью согласен однако при попытке в ASE 12 создать таблицу вот так create table #ert( field1 integer) выдает ошибку The 'CREATE TABLE' commands not allowed within a multi-statement transaction in the 'tempdb' database как это победить пока не нашел ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 15:15 |
|
||
|
ASE12 курсор
|
|||
|---|---|---|---|
|
#18+
[quot Maks_f]toMasterZIV при попытке в ASE 12 создать таблицу вот так create table #ert( field1 integer) выдает ошибку The 'CREATE TABLE' commands not allowed within a multi-statement transaction in the 'tempdb' database как это победить /quot] Для этого можно сделать одно из двух 1) Переместить CREATE TABLE #... так, чтобы он был ДО начала транзакции. Это более правильный метод, поскольку создание таблицы в tempdb внутри транзакции заблокирует tempdb практически эксклюзивно за этим процессом на время всей транзакции. 2) Поставить опцию 'ddl in tran' в базе данных tempdb в ON (а также еще и в model чтобы значение опции сохранялось после перезагруки сервера). Можно сделать и то и другое вместе, шаги не взаимоисключающие. Это все никак не связано с работой кода TSQL внутри процедуры, т.е. что в процедуре, что в батче - все работает одинаково. В триггере первый способ невозможен, поскольку транзакция в нем всегда уже открыта. С созданием временных таблиц внутри процедуры, которая использует транзакции, связана только одна дополнительная особенность : только первая процедура в стеке вызовов процедур, которая реально начинает транзакцию (@@trancount переходит 0->1), может создать в транзакции временную таблицу с # в начале. Причина такого поведения неивестна. Если у вас нет вложенных процедур, то все в порядке. Если вы собираетесь вызывать из вашей процедуры другие процедуры, причем делать это внутри транзакции, и создавать временные таблицы вам тоже нужно в транзакции, то создавайте ВСЕ таблицы в этой головной процедуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2004, 15:49 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=119&tid=2014295]: |
0ms |
get settings: |
7ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
51ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 11ms |
| total: | 156ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...