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

Métodos de recopilación:funciones PRIMERO y ÚLTIMO en la base de datos Oracle

Bienvenido una vez más a la serie sobre métodos de recopilación en Oracle Database. Hasta ahora, en esta serie hemos cubierto Recuento de funciones de recopilación ( ) y Existencia de funciones de recopilación ( ). Espero que hayas disfrutado leyendo. Hoy, en este tutorial de PL/SQL, aprenderemos los métodos de recopilación Primero ( ) y Último ( ).

¿Qué son los métodos de recopilación FIRST ( ) y LAST ( )?

Usamos las funciones de colección First &Last para conocer los primeros y últimos valores de índice definidos en una colección.

¿Podemos utilizar estos métodos de recopilación con cualquier tipo de recopilación?

¡Sí! Puede usar ambas funciones con los tres tipos de colecciones que son matriz asociativa, tabla anidada y VARRAY.

¿Cuándo el método de recopilación PRIMERO ( ) y ÚLTIMO ( ) devuelven un valor nulo?

Ambas funciones devuelven nulo cuando se aplican a una colección vacía o cuando se aplican a una colección de inicialización que no tiene elementos.

¿Puede enumerar la especificación de función para ambas funciones?

¡Por supuesto! Por qué no. La especificación para la función de colección FIRST ( ) es:

FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2

Y la especificación de función para la función de colección LAST ( ) es:

FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2

Información:
Para una matriz asociativa indexada por cadenas, estos métodos devuelven cadenas; "más bajo" y "más alto" están determinados por el orden del conjunto de caracteres en uso en esa sesión.

¿Qué sucede si solo hay 1 elemento en mi VARRAY?

En ese caso, la función de recopilación PRIMERO ( ) siempre es 1 y el método de recopilación ÚLTIMO ( ) siempre es igual a CONTAR.

¿Qué sucede si apliqué estas funciones a una colección no inicializada?

Lo digo en serio, ¿por qué lo harías? De todos modos, si aplicó la función de colección FIRST &LAST a una colección no inicializada, generará la excepción COLLECTION_IS_NULL.

Ejemplo:¿Cómo usar la función de colección PRIMERO y ÚLTIMO con la colección?

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    DBMS_OUTPUT.PUT_LINE ('First Index of the Nested table is ' || col_var.FIRST);
    DBMS_OUTPUT.PUT_LINE ('Last Index of the Nested table is ' || col_var.LAST);
END;
/

En el ejemplo anterior, creamos una tabla anidada con el nombre NT_TAB y la inicializamos usando la variable de colección col_var. Esta tabla anidada tiene 5 índices en los que hemos almacenado los valores. El índice más bajo en esta tabla anidada es 1, que tiene un valor de 10, y el índice máximo es 5 con un valor de 50. Por lo tanto, en la ejecución, el resultado del primer DBMS_OUTPUT será 1 y del segundo DBMS_OUTPUT será 5.

Continúe, copie el código y verifique el resultado usted mismo.

¿Qué sucede si eliminamos el primer elemento de la tabla anidada? ¿Cuál será entonces el resultado de la función de recopilación PRIMERO?

¡Esa es una muy buena pregunta! Si elimina el primer elemento de la función de recopilación, la función de recopilación PRIMERO devolverá el subíndice que es mayor que 1 y contiene algunos datos. Veamos el ejemplo:

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
col_var.DELETE(1);
    DBMS_OUTPUT.PUT_LINE ('First Index after DELETE is ' || col_var.FIRST);
END;
/

En el ejemplo anterior, eliminamos el primer elemento de la tabla anidada nt_tab mediante el método de recopilación DELETE. Después de eliminar el primer elemento que es 10 en el índice 1, el nuevo subíndice más bajo ahora es 2, que tiene algunos datos almacenados. Por lo tanto, en la ejecución, el resultado será 2.

¿Qué sucede si elimino el elemento de la mitad de la colección?

Si elimina los datos del medio, la función de recopilación LAST devolverá un valor mayor que el valor devuelto por el método COUNT.

¿Podemos ver los datos almacenados en los índices de la colección utilizando los métodos de recopilación FIRST y LAST?

Cuando estaba explicando este mismo concepto en una clase, una estudiante levantó la mano y me preguntó.

Señor, hasta ahora vemos que estas funciones devuelven el número de índice de la colección. ¿Qué sucede si queremos ver los datos almacenados en esos archivos index. ¿Hay alguna forma de ver los datos almacenados en el índice utilizando estos métodos de recopilación PRIMERO Y ÚLTIMO?

La respuesta a esta pregunta es ¡sí! Por supuesto . Junto con el número de subíndice, puede usar estas funciones para ver los datos almacenados en el índice más bajo y más alto de la colección.

Por ejemplo

SET SERVEROUTPUT ON;
DECLARE
    TYPE nt_tab IS TABLE OF NUMBER;
    col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
BEGIN
    -- This output statement will return 10 which is the value stored at the first index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.FIRST));
    -- This output statement will return 50 which is the value stored at the last index
    DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.LAST));
END;
/

Para ver los datos almacenados en el primer y último índice, solo tiene que colocar las llamadas de función de estas funciones dentro del paréntesis de la variable de colección que es col_var tal como lo hicimos en el ejemplo anterior.

Ahora la pregunta es ¿y si RECORTAMOS la colección? ¿Cuál será entonces la salida de la función de colección LAST? Continúe y vea el videotutorial donde he explicado cuál será el resultado del método de colección LAST cuando recortes la colección usando el ejemplo.

Eso es todo acerca de estos métodos de recopilación. Espero que hayas encontrado útil este blog. ¡Gracias y que tengas un gran día!