Cursores são estruturas de manipulação de registros resultantes de consultas na linguagem de progrmação PL/SQL. São divididos em Cursores Implicitos e explicitos.
Cursores implicitos são automaticamente criados e gerenciados pelo sistema (nos exemplos a seguir são utilizados o banco de dados da oracle), eles são utilizados com comandos/palavras reservadas e não requer declaração são utilizados para requisições mais simples,atualizações, inserçoes e exclusões.
Alguns exemplos de utilização de um cursor implicito.
No exemplo a seguir o Cursor SQL%FOUND realiza um verificação se houve alteração nos registro e imprime no console o retorno com as frases refentes se houve ou não a alteração nos registros, um método inverso a esse seria a utilização do SQL%NOTFOUND, pois ele retorna a informação inversa ao SQL%FOUND retornando True qaundo não houvesse registros alterados.
UPDATE tabela SET coluna = novo_valor WHERE condição;
IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE('A alteração afetou registros.');
ELSE
DBMS_OUTPUT.PUT_LINE('Nenhum registro foi afetado.');
END IF;
Em outro exemplo de Cursor Implicito o cursor SQL%ROWCOUNT retorna a quantidade de registros que sofreram alterações no caso a quantidade de registros deletados.
DELETE FROM tabela WHERE condição;
DBMS_OUTPUT.PUT_LINE('Número de registros deletados: ' || SQL%ROWCOUNT);
Chegando agora nos Cursores Explicitos diferentemente do anterior ele precisa ser declarado explicitamente pelo desenvolvedor e por isso proporciona uma gama maior de utilizações na manipulação das consultas , aceitando parametros e podendo ser realizado com Loop ou For deixando-o mais elaborado. Necessita seguir uma ondem de criação com declaração, abertura, busca e fechamento do cursor.
Exemplo de utilização do cursor Explicito com For e Loop onde para cada registro que se adeque a condição fornecida será impresso o valor da coluna daquele registro.
DECLARE
CURSOR meu_cursor IS SELECT coluna FROM tabela WHERE condição;
BEGIN
FOR registro IN meu_cursor LOOP
DBMS_OUTPUT.PUT_LINE('Valor da coluna: ' || registro.coluna);
END LOOP;
END;
No exemplo abaixo é utilizado um cursor explicito com parametro para percorrer e imprimir todos os registros onde 'cargo' tenha como registro "Gerente"
DECLARE
CURSOR meu_cursor (cargo_param VARCHAR2) IS
SELECT coluna FROM tabela WHERE cargo = cargo_param;
BEGIN
FOR registro IN meu_cursor('Gerente') LOOP
DBMS_OUTPUT.PUT_LINE('Valor da coluna para Gerentes: ' || registro.coluna);
END LOOP;
END;
Uma demosntração de como um cursor Explicito pode ter uma estrutura bem mais complexa é com a utilização de um implicito juntamente com a declaração de um cursor explicito.
DECLARE
CURSOR meu_cursor IS SELECT coluna FROM tabela WHERE condição;
variavel_valor VARCHAR2(50);
BEGIN
OPEN meu_cursor;
FETCH meu_cursor INTO variavel_valor;
WHILE meu_cursor%FOUND LOOP
DBMS_OUTPUT.PUT_LINE('Valor da coluna: ' || variavel_valor);
FETCH meu_cursor INTO variavel_valor;
END LOOP;
CLOSE meu_cursor;
END;
Esses são somente alguns exemplos de utilização de Cursores, A utilização deles pode se adequar a praticamente maioria das aplicações e sistemas, com destaque aos cursores Explicitos que possibilitam a uma infinidade de maneiras de utilização, cabe ao desenvolvedor encontrar a maneira mais efetiva de utilização no seu código.
Top comments (0)