sql >> Base de Datos >  >> RDS >> Oracle

¿Qué es el cursor en Oracle?

¿Qué es el cursor en Oracle

Oracle utiliza un área de trabajo denominada áreas privadas de SQL para ejecutar sentencias SQL y almacenar información. Un Cursor de Oracle es una construcción PL/SQL que le permite nombrar estas áreas de trabajo y acceder a su información almacenada

Tipos de Cursor en Oracle

  • Cursor implícito en Oracle
  • Cursor explícito en Oracle

Cursores explícitos

Los cursores explícitos tienen las siguientes etapas

1) Declare:Declaramos el nombre del cursor y definimos la estructura de la consulta

2) Abrir:la declaración abierta ejecuta la consulta y vincula cualquier variable a la que se haga referencia. Las filas identificadas por la consulta se denominan conjuntos activos. Y ahora eso está disponible para buscar

Qué es el conjunto activo: El conjunto de filas devuelto por una consulta de varias filas

Su tamaño es el número de filas que cumple con sus criterios de búsqueda

3) Recuperar:en esta etapa, las filas se recuperan del cursor y, después de cada recuperación, prueba el cursor en busca de filas restantes; si no hay filas, procede a cerrar el cursor

4) Cerrar:la declaración de cierre libera el conjunto activo de filas y podemos volver a abrir el cursor para recuperar el conjunto activo de actualización

Etapas en detalle

Declaración de un cursor

  • Nombre del cursor
  • Estructura de la Consulta
Sintaxis: CURSOR IS :Incluye la mayoría de las cláusulas habituales, pero no se permite la Cláusula INTOEjemplo: DECLARE CURSOR cur1 es SELECT dirección, salario, emp_no, emp_name FROM emp WHERE region='US'; ……………………………… COMIENZO ……………………………… FIN;

Abrir un Cursor

Aquí se realiza el análisis y la ejecución de consultas. Después de abrir el cursor, las filas devueltas por la consulta están disponibles para recuperarlas.

Sintaxis: Abrir  Esta declaración se usa dentro de la sección ejecutable del bloque. También establece un conjunto activo de filasEjemplo: ABRIR cur1; DECLARAR v_número de salario; CURSOR cur1 es SELECCIONAR salario DESDE emp DONDE region='US'; COMENZAR ABIERTO cur1; LOOP FETCH cur1 en v_salary; SALIR CUANDO cur1%NO ENCONTRADO; DBMS_OUTPUT.PUT_LINE (v_salario); FIN DEL BUCLE; CERRAR cur1; FIN; //pre> 

El cursor apuntará ahora a la primera fila del conjunto activo.

Obteniendo las filas

Después de abrir el cursor, la fila actual se carga en las variables. La fila actual es la fila a la que apunta actualmente el cursor La recuperación de datos en variable PL/SQL o host

La variable se realiza a través de la sentencia FETCH

Sintaxis:FETCH INTO;
  • Para cada valor de columna devuelto por la consulta asociada con el cursor, debe haber un

variable correspondiente en la lista INTO.

  • TAMBIÉN sus tipos de datos deben ser compatibles

CERRAR UN CURSOR

Cierra explícitamente el cursor, lo que permite que se vuelva a abrir, si es necesario.

Sintaxis: CERRAR ;Ejemplo: CLOSE cur1Ejemplo de uso de CLOSE  DECLARAR v_dirección emp.dirección%TYPE; CURSOR cur1 es la dirección seleccionada de emp; COMENZAR ABIERTO cur1; LOOP FETCH cur1 en v_address; SALIR CUANDO cur1%NO ENCONTRADO; DBMS_OUTPUT.PUT_LINE(dirección_v); FIN DEL BUCLE; CERRAR cur1; FIN; //pre> 

Atributos de cursor explícitos

Atributo Tipo Descripción
%ISOPEN Booleano Se evalúa como VERDADERO si el cursor está abierto
%NO ENCONTRADO Booleano Se evalúa como VERDADERO si la búsqueda más reciente no devuelve una fila
%ENCONTRADO Booleano Se evalúa como VERDADERO si la búsqueda más reciente devuelve una fila
%ROWCOUNT NÚMERO Evalúa el número total de filas devueltas hasta el momento

Concepto avanzado con cursor Oracle

Cursor y registros de Oracle

1) Ya hemos leído acerca de los registros PLSQL.

2) Podemos procesar las filas del conjunto activo obteniendo valores en un registro PL/SQL también

3) También podemos definir un registro plsql basado en la lista seleccionada de las columnas en los cursores explícitos también

Ejemplo

DECLARAR CURSOR dept_cursor es Seleccione deptno,dept_name FROM dept; dept_record dept_cursor%rowtype; COMENZAR ABRIR dept_cursor; LOOP FETCH dept_cursor EN dept_record; Insertar en dept_temp (deptno, deptname) valores (dept_record.deptno, dept_record.dept_name); SALIR CUANDO dept_cursor%notfound; FIN DEL BUCLE; Comprometerse; CERRAR dept_cursor; FIN; //pre> 

Cursor con parámetros/cursor parametrizado en Oracle

Sintaxis:CURSOR cursor_name(parameter_name datatype, ) IS Select_statement;

1) Pasar valores de parámetros a un cursor cuando se abre el cursor y se ejecuta la consulta

2) Abra un cursor explícito varias veces con diferentes conjuntos activos cada vez

Abrir nombre_cursor(valor_parámetro, ……);

Ejemplo

DECLARAR CURSOR cur1(v_deptno número) es Seleccione deptname,dept_loc,dept_pincode from dept where deptno=v_deptno; Dept_record cur1%rowtype; l_número de departamento:=111; COMENZAR ABIERTO cur1(112); LOOP FETCH cur1 en dept_record; SI cur1%ENCONTRADO ENTONCES Dbms_output.put_line(dept_record.deptname); ELSE Salir; TERMINARA SI; FIN DEL BUCLE; CERRAR cur1; OPEN cur1(l_deptno); LOOP FETCH cur1 en dept_record; SI cur1%ENCONTRADO ENTONCES Dbms_output.put_line(dept_record.deptname); ELSE Salir; TERMINARA SI; FIN DEL BUCLE; CERRAR cur1; FIN; //pre> 

 Artículos relacionados

Cómo trabajar con fecha en Oracle sql
Tablas de Oracle PLSQL
Todo sobre los registros de Oracle PLSQL
Las 25 preguntas más frecuentes de la entrevista de Oracle plsql
Estructura de bloque de Oracle PLSQL y variable de Oracle PLSQL
Atributos del cursor