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

Exemplos de cursores PLSQL - cursores explícitos, implícitos e de referência

Um cursor age logicamente como um ponteiro para um resultado definir. Você pode mover o cursor pelo conjunto de resultados, processando cada linha, até determinar que está no final do conjunto de resultados. Existem três tipos de sintaxe associados aos cursores:criar o cursor, buscar com o cursor e fechar o cursor. Além disso, há vários atributos de um cursor que você pode usar em suas comparações lógicas. A seguir estão os tipos de cursores no Oracle:

Cursores explícitos

Cursores explícitos são cursores que você declara e usa.

Cursores implícitos

PL/SQL permite que você inclua instruções SQL, incluindo instruções SELECT, como parte de seu código sem declarar um cursor, que é chamado de cursor implícito.

Cursores de referência

Um cursor faz referência a um conjunto de resultados. O REF CURSOR permite passar uma referência de cursor de uma unidade de programa PL/SQL para outra. Em outras palavras, ele permite que você crie uma variável que receberá um cursor e habilitará o acesso ao seu conjunto de resultados, mas neste blog estou dando exemplos apenas para Cursores Explícitos e Implícitos, vou dar exemplo para Cursores Ref e Cursor dinâmico em outro blog .Um exemplo de Explicit Cursor:DECLARE nemployeeid NUMBER; dstartdate DATA; denddate DATA; sjobid VARCHAR2 (20); -- declara cursor CURSOR curjob IS SELECT employee_id, start_date, end_date, job_id FROM hr.job_history;BEGIN OPEN curjob; LOOP FETCH curjob INTO nemployeeid, dstartdate, denddate, sjobid; SAIR QUANDO curjob%NOTFOUND; DBMS_OUTPUT.put_line( 'Employee ' || nemployeeid || 'havia emprego ' || sjobid || ' for ' || (denddate - dstartdate) || ' days.'); FIM DO LOOP; CLOSE curjob;END;/O mesmo exemplo é dado abaixo para cursor explícito, mas com For Loop, os cursores For Loop são mais inteligentes, pois não há necessidade de declarar variáveis ​​para buscar valores neles e não há necessidade de abrir ou fechar ou verificar se o ponteiro está no final do cursor. Aqui está o exemplo:DECLARE CURSOR curjob IS SELECT employee_id, start_date, end_date, job_id FROM hr.job_history;BEGIN FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line( ''Employee ' || jh_rec.employee_id || ' had job ' || jh_rec .job_id || ' para ' || ( jh_rec.end_date - jh_rec.start_date || ' dias.')); END LOOP;END;/Um exemplo de Cursor Implícito:DECLARE nempno NUMBER; CURSOR curjob IS SELECT employee_id, start_date, end_date, job_id FROM hr.job_history;BEGIN -- abaixo da consulta sql é o tipo de Cursor Implícito SELECT COUNT ( * ) INTO nempno FROM hr.job_history; DBMS_OUTPUT.put_line ( 'Existem ' || nempno || ' registros de histórico de funcionários.'); FOR jh_rec IN curjob LOOP DBMS_OUTPUT.put_line('Funcionário ' || jh_rec.employee_id || ' tinha trabalho ' || jh_rec.job_id || ' for ' || ( jh_rec.end_date - jh_rec.start_date || ' dias.' )); END LOOP;END;/