DEV Community

Rafael Gebim
Rafael Gebim

Posted on

Exemplos práticos de Utilizaçaõ de Cursores Implícitos e Explícitos.

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;

Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

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;

Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

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;
Enter fullscreen mode Exit fullscreen mode

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)