|
|
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
Как сделать глобальный курсор в Sybase 5.0. Необходимо примерно след. Делаю 3 хр. проц. 1 -открывает курсор 2 - тянет данные из него 3 - закрывает его. На оракле подобное делали с помошью глобального курсора. Возможно ли что-то родственное в Sybase? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 13:53 |
|
||
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
Sybase ASA | ASE | IQ 5.0 ??? Для ASA никак. Попробуйте по другому - открывайте, работайте и закрывайте курсор во второй ХП. Можете даже попробовать цикл работы с курсорами FOR, очень удобно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 13:58 |
|
||
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
Да я уже сделал иначе. Передаю туда переменную, которую снаружи инкрементирую перед каждым вызовом. В процедуре открываю курсор, позиционирую на указанную строку и тяну. После вытягивания строки закрываю. Все в одной процедуре. Но хочется сделать красивее .... Смущает постоянное открытие-закрытие курсора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 15:30 |
|
||
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
Вдогонку. А что за ASA? При инсталляции писал Sybase SQL Anyware 5.0 ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 15:33 |
|
||
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
ASA сокращенное название Anywhere Studio :) А можно поподробнее о том, что у Вас происходит в этих процедурах. Мне кажется, что наверное все полегче можно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 15:41 |
|
||
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
Вот моя процедура. Это рабочая версия с сервера. Смущает открытие-закрытие курсора при каждом обращении. CREATE FUNCTION ASCRgetDataByPeriodAndId(in periodBegin char(30),in periodEnd char(30), in arg_RowNum integer) RETURNS CHAR(1024) % Считывает из таблицы ArcOrder строку данных с указанным номером за указанный период. % При вызовах период д.б. одинаковый, а номер увеличиваться на 1. % Начальный номер - 1. % возвращает строку с XML-тегом, атрибуты которого содержат информацию % из указанной строки таблицы. % Если возвращена пустая строка, то данных больше нет. BEGIN DECLARE ascrDataCursor dynamic scroll cursor for SELECT dtBegin,dtEnd,dtGet,dtOrder,dlitAB,Category,numTlfA, numTlfB1,numTlfB2,numTlfB3,numTlfB4,numTlfB5,SerCount, caPrefix,caStartP,caDirect,caCodeIn,LinkA, cbPrefix,cbStartP,cbDirect,cbCodeIn,LinkB FROM "DBA".ArcOrder WHERE dtBegin>=CAST(periodBegin AS TIMESTAMP) AND dtEnd<=CAST(periodEnd AS TIMESTAMP); declare err_notfound exception for sqlstate value '02000'; declare var_dtBegin timestamp; declare var_dtEnd timestamp; declare var_dtGet timestamp; declare var_dtOrder timestamp; declare var_dlitAB smallint; declare var_Category smallint; declare var_numTlfA char(21); declare var_numTlfB1 char(21); declare var_numTlfB2 char(21); declare var_numTlfB3 char(21); declare var_numTlfB4 char(21); declare var_numTlfB5 char(21); declare var_SerCount char(31); declare var_caPrefix char(6); declare var_caStartP char(6); declare var_caDirect char(11); declare var_caCodeIn char(11); declare var_LinkA smallint; declare var_cbPrefix char(6); declare var_cbStartP char(6); declare var_cbDirect char(11); declare var_cbCodeIn char(11); declare var_LinkB smallint; declare var_Id_data integer; declare xmlString char(1024); OPEN ascrDataCursor; SET xmlString = ''; % вытащить данные по услуге FETCH ABSOLUTE arg_RowNum ascrDataCursor INTO var_dtBegin,var_dtEnd, var_dtGet,var_dtOrder,var_dlitAB,var_Category,var_numTlfA, var_numTlfB1,var_numTlfB2,var_numTlfB3,var_numTlfB4,var_numTlfB5, var_SerCount,var_caPrefix,var_caStartP, var_caDirect,var_caCodeIn,var_LinkA,var_cbPrefix, var_cbStartP,var_cbDirect,var_cbCodeIn,var_LinkB; IF sqlstate<>err_notfound THEN SET xmlString = '<uslData dtBegin="' || var_dtBegin || '" dtEnd="' || var_dtEnd || '" dtGet="' || var_dtGet || '" dtOrder="' || var_dtOrder || '" dlitAB="' || var_dlitAB || '" Category="' || var_Category || '" numTlfA="' || var_numTlfA || '" numTlfB1="' || var_numTlfB1 || '" numTlfB2="' || var_numTlfB2 || '" numTlfB3="' || var_numTlfB3 || '" numTlfB4="' || var_numTlfB4 || '" numTlfB5="' || var_numTlfB5 || '" SerCount="' || var_SerCount || '" caPrefix="' || var_caPrefix || '" caStartP="' || var_caStartP || '" caDirect="' || var_caDirect || '" caCodeIn="' || var_caCodeIn || '" LinkA="' || var_LinkA || '" cbPrefix="' || var_cbPrefix || '" cbStartP="' || var_cbStartP || '" cbDirect="' || var_cbDirect || '" cbCodeIn="' || var_cbCodeIn || '" linkB="' || var_LinkB || '">'; END IF; CLOSE ascrDataCursor; RETURN(xmlString); END; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 16:47 |
|
||
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
Есть вариация OPEN cursorName WITH HOLD. Примеров использования не могу никак найти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 16:59 |
|
||
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
Ой, эт Вы зря так намудрили. Давайте по порядку: 1. У Вас запрос для возвращения курсора не сортируется. То есть гарантий, что записи с таблицы ArcOrder будут возвращены в нужном порядке и аргумент arg_RowNum будет указывать на правильную запись абсолютно нет. В ASA 5 так прокатывает, но при переводе на новые версии ASA Вас будут при таком подходе ждать куча интересных сюрпризов. 2. Курсор действительно плохо. Идут затраты на его открытие/закрытие. Плюс каждый раз при открытие курсора Вы выполняете полностью запрос, тратиться память на сохранение всех записей в курсоре и это все из за одной какой то записи. Если бы Вы передавали в функцию не абсолютный номер записи, а значение Primary Key таблицы ArcOrder, то Вы спокойно могли бы воспользоваться конструкцией: Код: plaintext 1. 2. 3. 4. Тут даже параметры периода действия уже не требуются. Это кстати было бы в сто раз надежнее и быстрее, плюс гарантированно обрабатывало именно ту запись, которая Вам нужна. 3. В Вашей функции я не вижу ничего такого, что мотивировало бы ее существование. Мне кажется, что гораздо легче вместо нее сделать view с полями ID, dtBegin, dtEnd и вычисляемым полем xmlString. Тогда Вам достаточно всего лишь пользоваться этим представлением в запросах, соединяя нужные записи по ID и фильтруя по датам. Это позволит ASA включить оптимизатор запросов в работу и ускорить выполнение задачи. В общем тут мое мнение, что функция не нужна и уж тем более курсор в ней. IMHO: Вам надо переделать логику этого куска, если будут дополнительные вопросы, с удовольствием отвечу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 17:10 |
|
||
|
Глобальный курсор?
|
|||
|---|---|---|---|
|
#18+
Спасибо, подумаю. Это было сделано на скорую руку - дать быстрей результат. Я его и дал. Теперь пытаюсь улучшить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2004, 18:14 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32404422&tid=2014665]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
171ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 502ms |

| 0 / 0 |

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