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

Método de recopilación:funciones PRIOR y SIGUIENTE en la base de datos Oracle

Como vimos en la Introducción a los métodos de recopilación de PL/SQL, hay 7 funciones de recopilación en Oracle Database. Entre estas siete funciones ya hemos aprendido los primeros cinco métodos. Prior y Next son los dos últimos métodos/funciones de recopilación de PL/SQL que aún quedan por explorar.

Por lo tanto, en el blog de PL/SQL de hoy exploraremos en detalle estos dos métodos de recopilación intactos.

¿Qué son las funciones de recopilación anterior y siguiente?

Siempre es bueno tener algunas funciones bajo la manga que pueden ayudarlo a navegar a través del contenido de su colección. La función Anterior y Siguiente podría ser esas funciones.

Ambas funciones toman un índice de la colección como entrada y devuelven el resultado.

Por ejemplo, el método de recopilación PL/SQL PRIOR toma un índice como entrada y devuelve el valor almacenado en el índice más bajo anterior. Mientras que el método de recopilación NEXT devuelve el valor del siguiente índice superior.

¿Son funciones o procedimientos de recopilación anterior y siguiente?

Tanto Anterior como Siguiente son funciones.

¿Podemos usar ambas funciones con los tres tipos de colecciones?

Sí, las funciones de recopilación Anterior y Siguiente se pueden utilizar con los tres tipos de recopilaciones.

¿Cuándo devolverán nulo los métodos de recopilación PL/SQL anterior y siguiente?

El método de recopilación anterior devuelve nulo cuando no hay valores de subíndice inferiores disponibles y el método de recopilación siguiente devuelve nulo cuando no hay valores de subíndice superiores disponibles para devolver.

En palabras simples, podemos decir que ambas funciones de colección devuelven Nulo si se usan con los índices Primero y Último de una colección, respectivamente .

¿Cuál será el resultado de los métodos de colección Next y Prior si los usamos con una matriz asociativa?

Si el método de recopilación PRIOR y NEXT se utilizan con matrices asociativas, devolverán una salida de tipo de datos VARCHAR2 o LONG.

Escuché que estos métodos generan algún tipo de excepción. ¿Es cierto?

Si es cierto. Si alguna de estas funciones se aplica a una tabla anidada no inicializada o a un Varray, generan la excepción COLLECTION_IS_NULL.

¿Puede demostrarnos cómo usar estas funciones en nuestro código?

¡Seguro Por qué no! Le mostraré la aplicación de las funciones de recopilación Anterior y Siguiente con la ayuda de un código muy sencillo.

Ejemplo de Método de Recolección Previo.

En este método, aprenderemos a usar el método de recopilación Prior con tabla anidada.

SET SERVEROUTPUT ON;
DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

En el bloque PL/SQL anónimo anterior, tenemos dos declaraciones de salida con 'Llamada de función anterior'. La primera declaración de salida devolverá el número de índice anterior al número de índice 3 que tiene algún valor almacenado. En nuestro caso, el índice anterior al número de índice 3 es 2. Por lo tanto, 2 será la salida de la primera declaración de salida.

En la segunda declaración de salida, llamamos a la función Prior y la proporcionamos como entrada al objeto de colección.

var_nt(var_nt.PRIOR(3)) 

El motor de Oracle ejecutará primero la función de colección Prior (llamémosla parte 1) y, utilizando el resultado de la parte 1, ejecutará el objeto de colección (llamémosla parte 2) y producirá el resultado final, que será 18 en nuestro caso. Continúe, copie el código e intente ejecutarlo usted mismo.

¿Qué sucederá si eliminamos el índice más bajo anterior de la tabla anidada?

Entonces ahora la pregunta es, ¿qué sucederá si elimina el índice más bajo anterior, que es 2 en nuestro código? En ese caso, el resultado definitivamente no será el mismo. La función anterior devuelve el índice más bajo anterior. Pero ese índice debe contener algún valor.

Inténtalo tú mismo. Aquí está el código.

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        var_nt.DELETE(2);
        dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
        dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
END;
/

Ejemplo de método de recopilación a continuación.

Puede usar el método de recopilación PL/SQL Siguiente igual que usó la función Prior en el código anterior. El método de recopilación NEXT devuelve el valor del siguiente índice superior. Aquí está el ejemplo

DECLARE
    TYPE my_nested_table IS
        TABLE OF NUMBER;
    var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
BEGIN
        dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); 
        dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); 
END;
/

Ambos ejemplos son casi iguales excepto la llamada a la función de colección. En la sección de ejecución de este bloque PL/SQL nuevamente tenemos dos declaraciones de salida. La primera declaración de salida devolverá el siguiente número de índice no vacío, mientras que la segunda devolverá los datos almacenados en ese índice. El funcionamiento de ambas declaraciones será el mismo que discutimos anteriormente. Continúe, copie el código y vea el resultado.

Ese fue el tutorial detallado sobre el método de recopilación PL/SQL Siguiente y Anterior. Espero que hayas disfrutado leyendo y aprendido algo nuevo. Asegúrate de compartir este blog en tus redes sociales. Para compartir este blog en tu Facebook haz clic aquí y para twitter haz clic aquí.

¡Gracias y que tengas un gran día!