No caso da execução de um comando do tipo SELECT que produz um conjunto resultado de linhas, é necessária a existência de um mecanismo para que uma aplicação possa recuperar o conjunto linha a linha. Isto é realizado através do conceito de cursor, que assim foi nomeado por apontar para a linha corrente no conjunto resultado da mesma forma que o cursor na tela de um monitor indica a posição corrente.
A execução de um comando SELECT por uma aplicação provoca então a associação de um determinado cursor ao conjunto resultado. Desta forma, quando uma aplicação executa um comando de leitura do tipo FETCH em relação ao conjunto resultado, o cursor associado é movido para a próxima linha e esta última é retornada para a aplicação.
A forma para associar um identificador de cursor a um comando SELECT varia segundo a linguagem de desenvolvimento e pode ser explícita ou implícita.
Frequentemente as aplicações também utilizam cursores para alterar dados. Por exemplo, um usuário pode querer visualizar todos os pedidos de um determinado cliente. O programa associa então um cursor a uma consulta sobre a tabela pedidos e exibe cada pedido na tela esperando por um sinal do usuário para avançar para a próxima linha. O procedimento segue desta forma até que o fim do conjunto resultado seja atingido. Neste exemplo em que a consulta recupera dados de uma única tabela e não efetua somatórios, o cursor implicitamente aponta para uma linha da tabela pedidos, considerando que cada linha do conjunto resultado provêm de uma única linha da tabela. Desta forma enquanto os dados são percorridos o usuário pode identificar dados a serem alterados na tabela. Por exemplo, a quantidade de um determinado pedido pode estar incorreta ou o usuário pode querer eliminar o pedido. Neste caso, a linha não é identificada por um predicado SQL e o programa utiliza o cursor para indicar qual linha deve ser alterada. A SQL oferece os comandos UPDATE POSICIONADO e DELETE POSICIONADO para este fim.
No exemplo seguinte onde os pedidos de um determinado cliente formam o conjunto resultado, seja C1 o identificador de cursor associado pela aplicação ao comando:
SELECT pedido, data, produto, quantidade FROM pedidos WHERE cod_cliente = 10
Para aumentar em 20% o campo quantidade da linha corrente, o seguinte comando seria executado pela aplicação:
UPDATE pedidos SET quantidade = quantidade * 1.2 WHERE CURRENT OF C1
Para eliminar o pedido representado pela linha corrente, o seguinte comando seria executado pela aplicação:
DELETE FROM pedidos WHERE CURRENT OF C1
No TSQL, um cursor pode ser movimentado incrementalmente para frente ou para
trás, ou ser movido para uma posição absoluta ou relativa.
Veja também Especificação de consulta atualizável e Comandos.