Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um cursor controlado por conjunto de chaves está entre um cursor estático e dinâmico em sua capacidade de detectar alterações. Como um cursor estático, ele nem sempre detecta alterações na associação e na ordem do conjunto de resultados. Como um cursor dinâmico, ele detecta alterações nos valores das linhas no conjunto de resultados (sujeito ao nível de isolamento da transação, conforme definido pelo atributo de conexão SQL_ATTR_TXN_ISOLATION).
Quando um cursor orientado por conjunto de chaves é aberto, ele salva as chaves de todo o conjunto de resultados; isso estabiliza a composição aparente e a ordem do conjunto de resultados. À medida que o cursor rola pelo conjunto de resultados, ele usa as chaves neste conjunto de chaves para recuperar os valores de dados atuais para cada linha. Por exemplo, suponha que um cursor controlado por conjunto de chaves busque uma linha e outro aplicativo atualize essa linha. Se o cursor refetar a linha, os valores que ele vê serão os novos porque ele refetou a linha usando sua chave. Por isso, os cursores controlados por conjunto de chaves sempre detectam alterações feitas por si mesmos e por outras pessoas.
Quando o cursor tenta recuperar uma linha que foi excluída, essa linha aparece como um "buraco" no conjunto de resultados: a chave da linha existe no conjunto de chaves, mas a linha não existe mais no conjunto de resultados. Se os valores de chave em uma linha forem atualizados, a linha será considerada excluída e, em seguida, inserida, portanto, essas linhas também surgirão como lacunas no conjunto de resultados. Embora um cursor controlado por conjunto de chaves sempre possa detectar linhas excluídas por outras pessoas, ele pode, opcionalmente, remover do conjunto de chaves as chaves das linhas que ele próprio remove. Os cursores controlados por conjunto de chaves que fazem isso não podem detectar suas próprias exclusões. Se um cursor específico, controlado por conjunto de chaves, detecta suas próprias exclusões, isso é indicado pela opção SQL_STATIC_SENSITIVITY no SQLGetInfo.
As linhas inseridas por outras pessoas nunca são visíveis para um cursor controlado por conjunto de chaves porque não existem chaves para essas linhas no conjunto de chaves. No entanto, um cursor condicionado pelo conjunto de chaves pode, opcionalmente, adicionar as chaves das linhas que insere ao conjunto de chaves. Os cursores controlados por conjunto de chaves que fazem isso podem detectar suas próprias inserções. Se um cursor controlado por conjunto de chaves específico detecta suas próprias inserções é relatado por meio da opção SQL_STATIC_SENSITIVITY no SQLGetInfo.
A matriz de status de linha especificada pelo atributo de instrução SQL_ATTR_ROW_STATUS_PTR pode conter SQL_ROW_SUCCESS, SQL_ROW_SUCCESS_WITH_INFO ou SQL_ROW_ERROR para qualquer linha. Ele retorna SQL_ROW_UPDATED, SQL_ROW_DELETED ou SQL_ROW_ADDED para linhas que detecta como atualizadas, excluídas ou inseridas.
Os cursores controlados por conjunto de chaves geralmente são implementados criando uma tabela temporária que contém as chaves para cada linha no conjunto de resultados. Como o cursor também deve determinar se as linhas foram atualizadas, essa tabela também geralmente contém uma coluna com informações de controle de versão de linha.
Para rolar sobre o conjunto de resultados original, o cursor controlado por conjunto de chaves abre um cursor estático sobre a tabela temporária. Para recuperar uma linha no conjunto de resultados original, o cursor primeiro recupera a chave apropriada da tabela temporária e, em seguida, recupera os valores atuais da linha. Se os cursores de bloco forem usados, o cursor deverá recuperar várias chaves e linhas.