|  | 
| 
Как удалять в курсоре 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: | 10ms | 
| get forum list: | 14ms | 
| check forum access: | 4ms | 
| check topic access: | 4ms | 
| track hit: | 37ms | 
| get topic data: | 12ms | 
| get forum data: | 3ms | 
| get page messages: | 49ms | 
| get tp. blocked users: | 2ms | 
| others: | 13ms | 
| total: | 148ms | 

| 0 / 0 | 
