Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

O que é cursor no oracle

O que é cursor no oracle


Oracle Usa uma área de trabalho chamada áreas SQL Privadas para executar Instruções SQL e armazenar informações. Um Cursor Oracle é uma construção PL/SQL que permite nomear essas áreas de trabalho e acessar suas informações armazenadas

Tipos de cursor no Oracle
  • Cursor implícito no Oracle
  • Cursor explícito no Oracle

Cursores explícitos


Os cursores explícitos têm os seguintes estágios

1) Declare:Declaramos o nome do cursor e definimos a estrutura da consulta

2) Open: A instrução open executa a consulta e vincula qualquer variável referenciada. As linhas identificadas pela consulta são chamadas de conjuntos ativos. E agora que está disponível para buscar

O que é Conjunto Ativo: O conjunto de linhas retornado por uma consulta de várias linhas

Seu tamanho é o número de linhas que atende aos seus critérios de pesquisa

3) Busca:Nesta etapa, as linhas são buscadas do cursor e, após cada busca, você testa o cursor para quaisquer linhas restantes, se não houver linhas, você continua fechando o cursor

4) Fechar:A instrução close libera o conjunto ativo de linhas e podemos abrir novamente o cursor para buscar atualizar o conjunto ativo

Etapas em detalhes


Declarando um cursor
  • Nome do cursor
  • Estrutura da consulta
Syntax:
 CURSOR  IS   :  It includes most of the usual clauses, but INTO Clause is not allowed
Example:
 DECLARE
 CURSOR cur1 is SELECT address,salary,emp_no,emp_name FROM emp WHERE region=’US’;
 ………………………………
 BEGIN
 ………………………………
 END;

Abrindo um cursor

Aqui a execução de análise e consulta é feita. Após abrir o cursor as linhas retornadas pela consulta ficam disponíveis para busca.
Syntax:
 Open <cursor name>
 This statement is used within the executable section of the block.
 It also establishes an active set of the rows
Example:
  OPEN cur1;
 DECLARE
 v_salary number;
 CURSOR cur1 is SELECT salary FROM emp WHERE region=’US’;
 BEGIN
 OPEN cur1;
 LOOP
 FETCH cur1 into v_salary;
 EXIT WHEN cur1%NOTFOUND;
 DBMS_OUTPUT.PUT_LINE (v_salary);
 END LOOP;
 CLOSE cur1;
 END;
 /

O cursor agora apontará para a primeira linha no conjunto ativo.

Buscando as linhas

Depois que o cursor é aberto, a linha atual é carregada em variáveis. A linha actualéa linha para a qual o cursor está a apontar de momento A obtenção de dados para a variável ou máquina PL/SQL

A variável é feita através da instrução FETCH
Syntax: 
 FETCH  INTO ;
  • Para cada valor de coluna retornado pela consulta associada ao cursor, deve haver um

variável correspondente na lista INTO.
  • TAMBÉM seus tipos de dados devem ser compatíveis

FECHAR UM CURSOR

Ele fecha explicitamente o cursor, permitindo que ele seja reaberto, se necessário.
Syntax:
 CLOSE <cursor-name>;
Example: 
 CLOSE cur1
Example of Using CLOSE <Cursor Name>
 DECLARE
 v_address emp.address%TYPE;
 CURSOR cur1 is select address from emp;
 BEGIN
 OPEN cur1;
 LOOP
 FETCH cur1 into v_address;
 EXIT WHEN cur1%NOTFOUND;
 DBMS_OUTPUT.PUT_LINE(v_address);
 END LOOP;
 CLOSE cur1;
 END;
 /

Atributos explícitos do cursor
Atributo Tipo Descrição
%ISOPEN Booleano Avalia como TRUE se o cursor estiver aberto
%NOTFOUND Booleano Avalia como TRUE se a busca mais recente não retornar uma linha
%FOUND Booleano Avalia como TRUE se a busca mais recente retornar uma linha
%ROWCOUNT NÚMERO Avalia o número total de linhas retornadas até agora

Conceito avançado com cursor Oracle


Cursor e registros do Oracle

1) Já lemos sobre registros PLSQL.

2) Podemos processar as linhas do conjunto ativo buscando valores em um registro PL/SQL também

3) Também podemos definir um registro plsql com base na lista selecionada das colunas nos cursores explícitos também

Exemplo
DECLARE 
 CURSOR dept_cursor is Select deptno,dept_name  FROM   dept;
 dept_record dept_cursor%rowtype;
 BEGIN
 OPEN dept_cursor;
 LOOP
 FETCH dept_cursor INTO dept_record;
 Insert into dept_temp (deptno, deptname) values (dept_record.deptno, dept_record.dept_name);
 EXIT WHEN dept_cursor%notfound;
 END LOOP;
 Commit;
 CLOSE dept_cursor;
 END;
 /

Cursor com Parâmetros/cursor parametrizado no oracle
Syntax: 
 CURSOR cursor_name(parameter_name datatype,  )
 IS
 Select_statement;

1) Passar valores de parâmetro para um cursor quando o cursor é aberto e a consulta é executada

2) Abra um cursor explícito várias vezes com diferentes conjuntos ativos a cada vez
Open cursor_name(parameter_value , ……);

Exemplo
DECLARE 
 CURSOR cur1(v_deptno number) is
 Select deptname,dept_loc,dept_pincode from dept where deptno=v_deptno;
 Dept_record      cur1%rowtype;
 l_deptno  number:=111;
 BEGIN
 OPEN  cur1(112);
 LOOP
 FETCH cur1 into dept_record;
 IF cur1%FOUND THEN
 Dbms_output.put_line(dept_record.deptname);
 ELSE
 Exit;
 END IF;
 END LOOP;
 CLOSE cur1;
 OPEN cur1(l_deptno);
 LOOP
 FETCH cur1 into dept_record;
 IF cur1%FOUND THEN
 Dbms_output.put_line(dept_record.deptname);
 ELSE
 Exit;
 END IF;
 END LOOP;
 CLOSE cur1;
 END;
 /

 Artigos relacionados

Como trabalhar com data no Oracle sql
Tabelas Oracle PLSQL
Tudo sobre registros Oracle PLSQL
25 perguntas mais comuns em entrevistas com Oracle PLSQL
Estrutura de Blocos Oracle PLSQL e Variável Oracle PLSQL
Atributos do cursor