Оптимизатор Sybase создает курсор для запроса DELETE, который затем завершается ошибкой - PullRequest
0 голосов
/ 29 июля 2010

Мы выполняем следующий запрос, используя встроенный SQL в C:

DELETE archive_table FROM archive_table arc, #arc_chunk loc WHERE arc.col = loc.col

Ответ Sybase:

УДАЛИТЬ ТОК, ГДЕ ТОЧКАкурсор 'C42' не выполнен, так как курсор находится в соединении.

Запрос строится в виде строки C, а затем выполняется с помощью EXECUTE IMMEDIATE во встроенном SQL.

Есть лиспособ выполнить это УДАЛЕНИЕ без оптимизатора Sybase, создающего курсор (который терпит неудачу), чтобы выполнить его?

1 Ответ

0 голосов
/ 29 июля 2010

При использовании таблицы назначения target в предложении from не помещайте в нее псевдоним.

  DELETE archive_table 
  FROM archive_table, #arc_chunk loc 
  WHERE archive_table.col = loc.col

[EDIT]

Другой возможностью является устранение необходимости объединенияи сложите все это в предложение where.

DELETE archive_table 
WHERE EXISTS ( SELECT 1 FROM #arc_chunk loc WHERE archive_table.col = loc.col ) 

Я предполагаю, что 'col' является уникальным ключом для строки.

...