Partilhar via


Cursores estáticos ODBC

Um cursor estático é aquele em que o conjunto de resultados parece ser estático. Ele geralmente não detecta alterações feitas na subscrição, na ordem ou nos valores do conjunto de resultados depois que o cursor é aberto. Por exemplo, suponha que um cursor estático busque uma linha e outro aplicativo então atualize a linha. Se o cursor estático efetuar novamente o fetch da linha, os valores que ele verá estarão iguais, apesar das alterações feitas por outro aplicativo.

Cursores estáticos podem detectar as próprias atualizações, exclusões e inserções, embora não precisem fazer isso. Se um cursor estático específico detecta essas alterações é relatado por meio da opção SQL_STATIC_SENSITIVITY em SQLGetInfo. Cursores estáticos nunca detectam outras atualizações, exclusões e inserções.

A matriz de status da 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. Ela retorna SQL_ROW_UPDATED, SQL_ROW_DELETED ou SQL_ROW_ADDED para linhas atualizadas, excluídas ou inseridas pelo cursor, supondo que o cursor possa detectar essas alterações.

Os cursores estáticos normalmente são implementados bloqueando as linhas no conjunto de resultados ou fazendo uma cópia, ou instantâneo, do conjunto de resultados. Embora seja relativamente fácil fazer o bloqueio de linhas, isso tem a desvantagem de reduzir muito a simultaneidade. Fazer uma cópia permite maior simultaneidade e que o cursor acompanhe suas próprias atualizações, exclusões e inserções modificando a cópia. Contudo, é mais dispendioso fazere uma cópia e ela pode divergir dos dados subjacentes à medida que esses dados são alterados por outras pessoas.