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

Cómo crear matrices asociativas en la base de datos Oracle

La matriz asociativa se conocía anteriormente como tablas PL/SQL en PL/SQL 2 (versión PL/SQL que venía con Oracle 7) e índice por tabla en la base de datos Oracle 8. Después de la tabla anidada y los VARRAY, la matriz asociativa es el tercer tipo de colección que los desarrolladores utilizan mucho.

Averigüemos las respuestas de algunas preguntas sobre matrices asociativas que lo ayudarán a comprenderlas mejor. En esta sección también encontrará algunas de las principales diferencias y similitudes entre Associative Array y otras colecciones como VARRAY y Nested Tables.

¿Las matrices asociativas son limitadas o ilimitadas?

Al igual que las tablas anidadas, las matrices asociativas son una forma de colección ilimitada. Esto significa que no hay un límite superior en la cantidad de elementos que puede contener. No ocurre lo mismo con VARRAY, ya que las matrices de variables están limitadas por naturaleza.

¿Las matrices asociativas son persistentes o no persistentes?

A diferencia de las tablas anidadas y VARRAY, las matrices asociativas son una forma de recopilación no persistente . Esto significa que ni la matriz ni los datos se pueden almacenar en la base de datos, pero solo están disponibles en bloques PL/SQL.

¿Las matrices asociativas son escasas o densas?

Mientras que los VARRAY son matrices densamente pobladas, las tablas anidadas y las matrices asociativas son matrices escasamente pobladas lo que significa que la numeración de subíndices debe ser única pero no necesariamente secuencial.

¿Podemos crear una matriz asociativa como objeto de base de datos?

Debido a su naturaleza no persistente, las matrices asociativas no se pueden almacenar en el esquema. Solo se pueden crear en bloques PL/SQL pero no a nivel de esquema como objeto de base de datos.

¿Podemos reutilizar matrices asociativas?

Como se mencionó anteriormente, la matriz asociativa es una colección no persistente que no se puede crear a nivel de esquema, por lo que no se puede almacenar en el esquema y, por lo tanto, no se puede reutilizar.

¿La numeración de índices/numeración de subíndices en la matriz asociativa es implícita o explícita?

A diferencia de las tablas anidadas y VARRAY, la indexación en una matriz asociativa es explícita. Mientras que Oracle Engine asigna un subíndice/número de índice a los elementos de la tabla anidada y las colecciones VARRAY implícitamente en segundo plano, en la matriz asociativa los usuarios deben especificar el número de índice explícitamente al completar la colección.

¿Cómo se almacenan los datos en la matriz asociativa?

La matriz asociativa almacena datos en pares clave-valor donde el número de índice sirve como clave y los datos almacenados en la celda sirven como valor.

Estas son algunas preguntas básicas que puede esperar en su examen o entrevista. Siga leyendo para conocer las diferencias técnicas entre las matrices asociativas y otras colecciones.

¿Definir colección PL/SQL:matriz asociativa?
Usando la información derivada de las preguntas anteriores, podemos definir matrices asociativas como una colección homogénea unidimensional que almacena datos en un par clave-valor. Es de naturaleza escasa, ilimitada y no persistente.

¿Cuál es la sintaxis de la matriz asociativa PL/SQL?

TYPE aArray_name IS TABLE OF element_datatype [Not Null]
INDEX BY index_elements_datatype;

Como se dijo anteriormente, la matriz asociativa es un tipo de colección no persistente, por lo que no se puede crear como un objeto de base de datos independiente, por lo que no se puede reutilizar como el resto de las otras colecciones. Solo puede estar disponible en el bloque PL/SQL. Siempre asegúrese de crear su matriz asociativa en la sección DELCARATION de su bloque PL/SQL. [Lea aquí para saber cuántas secciones hay en el bloque PL/SQL?] Veamos la sintaxis en detalle:

Tipo :La palabra clave marca el comienzo de la instrucción.

aArray_name :Nombre de la matriz asociativa. Está completamente definido por el usuario y cumple con las normas de nomenclatura de Oracle Database.

ES TABLA DE :Frase reservada de la base de datos de Oracle mediante la cual el usuario le dice al compilador qué tipo de elementos contendrá la matriz?

Elemento_tipo de datos :tipo de datos de los elementos que va a contener la matriz. En Oracle Database, todas las colecciones son de naturaleza homogénea, lo que significa que todos los elementos de la colección deben tener el mismo tipo de datos.

No_null :Una cláusula opcional, que si se usa asegura que cada índice tenga un valor correspondiente en lugar de un NULL.

ÍNDICE POR :Cláusula mediante la cual el usuario especifica el tipo de datos del subíndice de la matriz.

Índice_elementos_tipo de datos :tipo de datos de los elementos de subíndice de la matriz.

Ejemplo:¿Cómo crear una matriz asociativa en la base de datos Oracle?

La matriz asociativa solo se puede crear dentro de un bloque PL/SQL, por lo que su alcance se limita al bloque en el que se crea, lo que significa que no se puede usar fuera de ese bloque. Veamos cómo crear una matriz asociativa en Oracle Database.

Paso 1:Crear matriz asociativa

	SET SERVEROUTPUT ON;
	DECLARE
	    TYPE books IS TABLE OF NUMBER
	        INDEX BY VARCHAR2 (20);

En el código anterior, creamos una matriz asociativa con el nombre 'Libros ' que puede contener elementos de NÚMERO tipos de datos y subíndices del tipo de datos VARCHAR2.

Paso 2:Crear variable de matriz asociativa

Isbn Books;

Necesita una variable de matriz asociativa para hacer referencia a la matriz en el programa. La variable de matriz se puede crear muy fácilmente. Solo tienes que escribir el nombre de la variable (que es ‘isbn’ en nuestro caso) que está definido por el usuario seguido del nombre de la matriz asociativa.

Paso 3:Insertar datos en la matriz asociativa

Como se mencionó anteriormente, la matriz asociativa contiene datos en pares clave-valor. Por lo tanto, a diferencia del resto de las otras colecciones, los usuarios deben insertar tanto el subíndice de la matriz (la clave) como los datos.

BEGIN
-- How to insert data into the associative array 
isbn('Oracle Database') := 1234;
isbn('MySQL') := 9876; 

Al igual que la tabla anidada y los VARRAY, insertamos datos en la matriz asociativa en la sección de ejecución del bloque PL/SQL. Si se dio cuenta aquí, a diferencia de otras colecciones, no usamos la declaración INSERT DML para insertar los datos, sino que la insertamos usando la variable de matriz 'isbn' . A continuación, puede ver la sintaxis de la declaración de inserción para una matriz asociativa usando una variable de matriz.

Array_variable (subscript/key) := data; 

Como puede ver, para insertar los datos en la matriz asociativa, primero debe escribir el nombre de la variable de la matriz seguido del subíndice de la matriz y luego los datos de su matriz.

Paso 4:¿Cómo actualizar los datos de la colección – Matriz asociativa?

Actualizar los valores de la matriz asociativa es tan fácil como insertarlos. Si desea cambiar algún valor, escriba la misma declaración que se usa para la inserción con los valores modificados. Por ejemplo, suponga que desea cambiar el valor de la clave MySQL de 9876 a 1010 y luego simplemente escriba

	-- How to update data of associative array.	
	 	isbn('MySQL') := 1010; 

Nuevamente, no necesita escribir la ACTUALIZACIÓN DML para actualizar los valores. Simplemente usa la variable de matriz.

Paso 5:¿Cómo recuperar datos de la matriz asociativa de colección?

Al igual que no necesitamos Insertar instrucción DML para insertar valores o Actualizar DML para actualizar valores, tampoco necesitamos Seleccionar DML para recuperar valores.

Suponga que desea ver el valor almacenado en la clave 'Oracle Database'. Para eso solo necesitas escribir…

-- how to retrieve data using key from associative array.  	
	  DBMS_OUTPUT.PUT_LINE ('Value '||isbn ('Oracle Database'));

Combinemos todos estos fragmentos de código en un solo programa.

SET SERVEROUTPUT ON;
DECLARE
    TYPE books IS TABLE OF NUMBER
        INDEX BY VARCHAR2(20);
    isbn Books;
BEGIN
    	-- How to insert data into the associative array 
    	isbn('Oracle Database') := 1234;
    	isbn('MySQL') := 9876;
    	DBMS_OUTPUT.PUT_LINE('Value Before Updation '||isbn('MySQL'));

    	-- How to update data of associative array.
    	isbn('MySQL') := 1010;
    
-- how to retrieve data using key from associative array.  
    	DBMS_OUTPUT.PUT_LINE('Value After Updation '||isbn('MySQL'));
END;
/

Aquí está el programa con algunas modificaciones mínimas. El programa PL/SQL anterior muestra cómo recuperar un valor específico usando la clave. Puede ver el video tutorial para aprender cómo recuperar todos los valores de la matriz asociativa usando bucles. Allí lo he explicado con gran detalle.

Antes de terminar este tutorial, hay algunos consejos que creo que debería saber. Estos punteros son –

  • Soporte de matriz asociativa PL/SQL BINARY_INTEGER, PLS_INTEGER, POSITIVE, NATURAL, SIGNTYPE o VARCHAR2 como tipo de datos de índice.
  • RAW, NUMBER, LONG-ROW, ROWID y CHAR son tipos de datos de índice no admitidos.

En el caso del tipo de datos de elementos, la colección PL/SQL admite arreglos asociativos:

  • Tipo de datos escalares PL/SQL :DATE, BLOB, CLOB, BOOLEAN o NUMBER &VARCHAR2 con sus subtipos.
  • Datos inferidos :Término utilizado para los tipos de datos que se heredan de una columna de tabla, una expresión de cursor o una variable de paquete predefinida
  • Tipo definido por el usuario: Un tipo de objeto o tipo de colección definido por el usuario.

Ese es un tutorial detallado sobre la colección PL/SQL:matriz asociativa. Este tutorial cubre todos los temas que puede esperar en el examen de certificación de la base de datos de Oracle, así como en la entrevista. Espero que hayas disfrutado leyendo.

Puede ayudar a otros a aprender algo nuevo y ayudarnos a llegar a más personas compartiendo este blog en sus redes sociales. No olvides etiquetarnos porque nos encanta saludar a todos nuestros seguidores, espectadores y suscriptores. ¡Gracias y que tengas un gran día!