powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как удалять в курсоре for update если курсор подготовлен динамически?
9 сообщений из 9, страница 1 из 1
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32115433
kasyanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, что организуется курсор по таблице, имя которой заранее не известно.
Для этого используется декларация курсора из подготавливаемого с помощью prepare запроса.
Но также необходимо удалять запись сразу после обработки (для этого курсор декларируется как for update), однако в конструкции языка на удаление обязательно должно присутствоать имя таблицы:
delete from tablename where current of cursorname
Первое что приходит в голову-удалять также динамически подготовленноым запросом-но не получается, потому что в нем не видно декларированного курсора.
Вот псевдокод:


declare MYCUR cursor for stmt;
...
set tablename='MYTABLE';
...
set :sqlstmt = 'select .. from ' || tablename || 'for update';
set :delstmt= 'delete from '|| tablename || 'where current of MYCUR';

prepare stmt from :sqlstmt;

open MYCUR;
...
fetch from MYCUR into ...;
...
execute immediate :delstmt;


получаю ошибку при execute immediate:
SQL0504N  The cursor "MYCUR" is not defined.  SQLSTATE=34000

Удалять из таблицы каждый раз по условию (по ключу) не хочу- это работать будет долго.
...
Рейтинг: 0 / 0
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32115506
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удаляй все обработанные записи одним оператором после обработки всего курсора скопом, а не по одной записи. Все равно вся процедура в одной транзакции.
...
Рейтинг: 0 / 0
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32115533
kasyanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и дело, что я не хочу этого делать - это потребует дополнительных затрат ресурсов системы, а производительность очень критична.
...
Рейтинг: 0 / 0
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32115926
IBMer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это удалени записей по одной потребует ресурсов
...
Рейтинг: 0 / 0
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32117934
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте, давайте:) Прикольно наблюдать за любителями
динамического SQL!:-))) Сколько раз повторять - нужна производительность - используте EMBEDDED SQL!
...
Рейтинг: 0 / 0
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32118013
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 gardenman
ну вы блин даете.

а как ты определил, что за средства используются? по псевдокоду ? :)
и почему embedded sql не может быть динамическим?

EXEC SQL PREPARE XXX FROM :stmt;
EXEC SQL EXECUTE IMMEDIATE :stmt;
EXEC SQL DECLARE C1 CURSOR FOR STMT;
EXEC SQL FETCH C1 USING DESCRIPTOR :*sqldaPointer;
.............................................................
...
Рейтинг: 0 / 0
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32118353
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
)) Прекрасно знаю что и в EMBEDDED можно динамически подготовить и выполнить практически любое SQL выражение. Вот только - смысл?
Простые вещи нужно делать просто, а не усложнять себе жизнь.
...
Рейтинг: 0 / 0
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32119687
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так то же простые вещи. они же вопросов не вызывают :)
...
Рейтинг: 0 / 0
Как удалять в курсоре for update если курсор подготовлен динамически?
    #32128119
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
SQLGetCursorName Function (CLI) - Get Cursor Name
Это из С
или я не про то ?
SQLGetCursorName() returns the cursor name associated with the input statement handle. If a cursor name was explicitly set by calling SQLSetCursorName(), this name will be returned; otherwise, an implicitly generated name will be returned.
И далее -
An application can update a keyset-driven cursor in two ways:

* Issue an UPDATE WHERE CURRENT OF <cursor name> or DELETE WHERE CURRENT OF <cursor name> using SQLPrepare() with SQLExecute() or SQLExecDirect()
* Use SQLSetPos() or SQLBulkOperations() to update, delete, or add a row to the result set.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как удалять в курсоре for update если курсор подготовлен динамически?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]