У меня есть таблица, содержащая события входа в систему и выхода из системы. Каждая строка представляет собой отдельное событие с отметкой времени, машинным именем, кодом входа или выхода из системы и другими деталями. Мне нужно создать SQL-процедуру, которая проходит через эту таблицу, и находит соответствующее событие входа и выхода из системы и вставляет новые строки в другую таблицу, которая содержит имя машины, время входа в систему, время выхода и время выхода из системы.Должен ли я использовать курсоры в своей процедуре SQL?
Итак, следует ли использовать курсор для этого или есть лучший способ сделать это? База данных довольно огромная, поэтому эффективность, безусловно, вызывает беспокойство. Любой предложенный псевдокод также будет отличным.
[править: вытащил из комментария]
Источник таблицы:
History (
mc_id
, hs_opcode
, hs_time
)
Существующие интерпретации данных:
Login_Event = unique mc_id, hs_opcode = 1, and hs_time is the timestamp
Logout_Event = unique mc_id, hs_opcode = 2, and hs_time is the timestamp
Позвольте мне посмотреть, смогу ли я быть яснее. У меня есть таблица под названием History с столбцами mc_id, hs_opcode и hs_time. Для события входа будет уникальный mc_id, hs_opcode = 1, а hs_time - метка времени. В случае выхода из системы; уникальный mc_id, hs_opcode = 2, а hs_time - метка времени. Мне нужно обработать каждое событие входа во всей таблице и выполнить поиск соответствующего события выхода из системы. Таким образом, для события выхода из системы это будет следующая запись выхода для этой машины после события входа в систему; mc_id будет равно, hs_opcode = 2, а метка времени будет больше. Затем я вставляю это в новую таблицу. – jomille
Ответ на ваш вопрос: нет, вам не нужно использовать курсоры для этого. Фактически, использование курсора, вероятно, будет намного медленнее, чем предлагаемое ниже решение на основе набора. –