sql >> Base de Datos >  >> RDS >> Database

Cursor de referencia fuerte PL/SQL con tipo de datos de registro definido por el usuario

Cursor de referencia fuerte con tipo de datos de registro definido por el usuario

En el tutorial anterior, aprendimos cómo crear un cursor de referencia fuerte PL/SQL utilizando una variable de tipo de datos de registro basada en tablas. Allí demostré el uso de un fuerte cursor de referencia para manejar los datos de todas las columnas de la tabla de empleados. En consecuencia, esto genera una preocupación. ¿Qué pasa si queremos los datos de alguna columna específica de la tabla? Eso es exactamente lo que abordaremos en el tutorial de hoy.

Sin embargo, antes de continuar con este tutorial, le sugiero que se familiarice con el conocimiento de los cursores de referencia PL/SQL. Especialmente el cursor de referencia fuerte y el tipo de datos de registro definido por el usuario. Además, para su comodidad, proporciono todos los enlaces necesarios aquí:

  • Cómo crear un cursor de referencia fuerte usando un registro basado en tablas
  • ¿Qué son los tipos de datos de registros definidos por el usuario?

El tutorial anterior mostró con éxito cómo un cursor de referencia PL/SQL Strong recuperó y manejó datos de todas las columnas de una fila. Pero, ¿y si queremos los datos de una columna específica de una fila? Digamos que solo queremos ver el correo electrónico o el salario de un empleado. En consecuencia, no queremos gastar los costosos recursos en recuperar toda la información innecesaria. Entonces, ¿podemos usar este mismo cursor de referencia para eso? Vamos a averiguarlo.

¿Podemos usar el cursor de referencia fuerte que creamos en el tutorial anterior para recuperar datos de una columna específica?

La respuesta a esa pregunta es No, no podemos .

Porque ese Strong Ref Cursor se creó utilizando el tipo de datos de registro basado en tabla. Para ilustrar, cuando creamos un tipo de datos de registro basado en una tabla, el motor de Oracle crea una estructura de datos compuesta. Esta estructura está repleta de campos correspondientes a cada columna de la tabla especificada.

Además, todos estos campos se asignan automáticamente con el mismo nombre y el mismo tipo de datos que las columnas de la tabla base. Pero cuando se trata de inicializar un registro usando una columna específica, tenemos que hacer todo este trabajo manualmente.

Para entenderlo más claramente, consulte el tutorial 34 de PL/SQL. Allí he discutido cómo inicializar el tipo de datos de registro y su funcionamiento en detalle.

Entonces, ¿cuál es la solución a este problema?

Podemos resolver fácilmente este problema. Podemos crear un cursor de referencia fuerte PL/SQL con la variable de tipo de datos de registro definido por el usuario.

Ejemplo:Cursor de referencia fuerte PL/SQL con variable de tipo de datos de registro definida por el usuario.

Por ejemplo, queremos crear un cursor de referencia fuerte con la instrucción SELECT. Que devuelve solo el salario del empleado cuya identificación de empleado es 100.

SET SERVEROUTPUT ON;
DECLARE
	--Create User-Defined Record Datatype
    TYPE my_rec IS RECORD (
        emp_sal employees.salary%TYPE
        );
	--Declare Strong Ref Cursor
    TYPE RefCur IS REF CURSOR RETURN my_rec;
    cur_var REFCUR;
	--Another anchored datatype variable for holding data
    at_var  employees.salary%TYPE;
BEGIN
   OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO at_var;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE ('Salary of the employee is '||at_var);
END;
/

Entonces, rompamos este código y veamos qué está pasando aquí.

Sección de declaración

DECLARE
    TYPE my_rec IS RECORD (
        emp_sal employees.salary%TYPE
        );
    TYPE RefCur IS REF CURSOR RETURN my_rec;
    cur_var REFCUR;
    at_var  employees.salary%TYPE;

Aquí está nuestra sección de declaración. En las primeras tres líneas de esta sección, creamos nuestro tipo de datos de registro definido por el usuario con el nombre my_rec. Además, este tipo de datos de registro definido por el usuario tiene solo un campo que es emp_sal. Emp_sal es un campo de tipo de datos anclado que está diseñado sobre la columna de salario de la tabla de empleados. Debido a que emp_sal es de tipo de datos anclado, se le asignará automáticamente el tipo de datos y el ancho de datos de la columna base, que en este caso es salario.

Inmediatamente después de eso, declaramos nuestro cursor de referencia fuerte PL/SQL con el nombre "RefCur". El tipo de retorno de este cursor de referencia fuerte es “my_rec” . Seguido de la declaración del cursor, creamos una variable de cursor con el nombre cur_var. Además, esta variable se usa para hacer referencia al cursor de referencia fuerte que se encuentra más adelante en el código.

Además de la variable del cursor, también tenemos otra variable declarada en esta sección. Esta variable es "at_var", esta es nuevamente una variable de tipo de datos anclada. Se utiliza para almacenar los datos devueltos por el cursor.

Ahora vayamos a la sección de ejecución.

Sección de Ejecución

BEGIN
    OPEN cur_var FOR SELECT salary FROM employees WHERE employee_id = 100;
    FETCH cur_var INTO at_var;
    CLOSE cur_var;
    DBMS_OUTPUT.PUT_LINE('Salary of the employee is '||at_var);
END;
/

Esta sección de ejecución tiene cuatro líneas de códigos ejecutables. Veamos cuáles son.

Línea 1:Declaración abierta para

Esta declaración abre dinámicamente el cursor mencionado. A partir de entonces, adjunta la instrucción SELECT que se especifica justo después de la palabra clave FOR.

En nuestro caso, esta declaración abre el cursor de referencia fuerte usando la variable de cursor "cur_var":una declaración SELECT. Que devuelve los datos solo de la "columna de salario" de la tabla de empleados.

Línea 2:Obtener instrucción

Esta declaración obtendrá los datos del cursor de referencia y los almacenará en la variable "at_var". Igualmente importante es asegurarse de que el tipo de datos de los datos obtenidos y el de la variable en la que se almacenan los datos deben coincidir. De lo contrario habrá un error.

Línea 3:Cerrar declaración

La tercera línea es una declaración cerrada. Cerrar un cursor con el que haya terminado es una buena práctica.

Línea 4:Declaración de salida

Finalmente, la última sentencia de la sección de ejecución es la sentencia DBMS_OUTPUT. Y muestra el salario del empleado al usuario.

Estas cuatro líneas completan la sección de ejecución de este bloque PL/SQL. Además, la ejecución exitosa de este código debería mostrarle el salario con la cadena formateada.

¿Eres de los que aprenden mejor viendo vídeo? Luego, aquí está el video tutorial sobre el cursor de referencia fuerte con el tipo de datos de registro definido por el usuario.

Eso es todo por este tutorial. Asegúrese de compartir este blog en sus redes sociales y ayudar a otros a aprender. Puedes suscribirte al canal de YouTube para tutoriales más interesantes. ¡Gracias y que tengas un gran día!