|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
Проблема в том, что организуется курсор по таблице, имя которой заранее не известно. Для этого используется декларация курсора из подготавливаемого с помощью 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 Удалять из таблицы каждый раз по условию (по ключу) не хочу- это работать будет долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2003, 12:25 |
|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
Удаляй все обработанные записи одним оператором после обработки всего курсора скопом, а не по одной записи. Все равно вся процедура в одной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2003, 13:19 |
|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
В том то и дело, что я не хочу этого делать - это потребует дополнительных затрат ресурсов системы, а производительность очень критична. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2003, 13:39 |
|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
Это удалени записей по одной потребует ресурсов ... |
|||
:
Нравится:
Не нравится:
|
|||
06.03.2003, 18:00 |
|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
Давайте, давайте:) Прикольно наблюдать за любителями динамического SQL!:-))) Сколько раз повторять - нужна производительность - используте EMBEDDED SQL! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2003, 09:09 |
|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
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; ............................................................. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2003, 10:18 |
|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
)) Прекрасно знаю что и в EMBEDDED можно динамически подготовить и выполнить практически любое SQL выражение. Вот только - смысл? Простые вещи нужно делать просто, а не усложнять себе жизнь. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2003, 14:41 |
|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
так то же простые вещи. они же вопросов не вызывают :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2003, 19:31 |
|
Как удалять в курсоре for update если курсор подготовлен динамически?
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.03.2003, 13:40 |
|
|
start [/forum/topic.php?fid=43&fpage=164&tid=1606633]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 244ms |
total: | 372ms |
0 / 0 |