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

Cómo crear una tabla anidada como objeto de base de datos en Oracle

Si planea reutilizar la tabla anidada que desea crear, hacerlo como un objeto de base de datos es la mejor opción para usted. Puedes almacenarlos en tu base de datos de forma permanente y usarlos cuando quieras.

Además de crear una colección PL/SQL de tipo tabla anidada dentro de un bloque PL/SQL, también puede crearlos como objeto de base de datos y almacenarlos de forma permanente. Además puedes reutilizarlos cuando quieras. La tabla anidada creada como objeto de base de datos se puede basar en un tipo de datos primitivo o en un tipo de datos definido por el usuario. En este tutorial nos concentraremos en lo primero y dejaremos lo último para el próximo tutorial.

Cómo crear una colección de tipo de tabla anidada basada en un tipo de datos primitivo

Por tipo de datos primitivo nos referimos a los tipos de datos que están predefinidos por el lenguaje y son nombrados por una palabra clave reservada. Puede consultar este documento de Oracle para obtener más información sobre los tipos de datos PL/SQL.

Las siguientes tablas no tienen restricciones, índices ni nada diseñado en ellas y se crean únicamente para demostrar cómo crear una tabla anidada como objeto de base de datos.

Paso 1:Activar la salida del servidor

SET SERVEROUTPUT ON;

Paso 2:crear una colección de tipo de tabla anidada

CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2 (10);
/

La declaración anterior sobre una ejecución exitosa creará una tabla anidada con el nombre 'my_nested_table' que se basará en el tipo de datos primitivo VARCHAR2.

Paso 3:¿Cómo usar una tabla anidada?

El tipo de colección que creamos anteriormente se puede usar para especificar el tipo de una columna de una tabla.

CREATE TABLE my_subject(
	  sub_id    	NUMBER,
	  sub_name  	VARCHAR2 (20),
	  sub_schedule_day    my_nested_table
) NESTED TABLE sub_schedule_day STORE AS nested_tab_space;
/

La tabla anterior es una tabla normal, excepto que sus 3 columnas son del tipo de tabla anidada que puede contener múltiples valores. Para definir una columna de una tabla como tipo de tabla anidada, debe decirle al compilador el nombre de la columna y una tabla de almacenamiento. Puede hacerlo usando la cláusula NESTED ABLE y STORE AS, como hicimos aquí en la línea número 5. Usando la cláusula NESTED TABLE especificamos el nombre de la columna y usando la cláusula STORE AS especificamos la tabla de almacenamiento para la tabla anidada.

Puede consultar el tutorial de vídeo en el que he explicado paso a paso el proceso de creación de la tabla anterior.

Insertar filas en la tabla

INSERT INTO my_subject (sub_id, sub_name, sub_schedule_day)
VALUES (101, 'Maths', my_nested_table('mon', 'Fri'));

Inserta filas en la tabla anidada igual que inserta en la tabla normal. Sin embargo, para insertar datos en la columna del tipo de tabla anidada, primero debe escribir el nombre de la tabla anidada, que en nuestro caso es 'mi_tabla_anidada' (consulte el paso 2) y luego escribir los datos de acuerdo con el tipo de datos de su tabla anidada y enciérralo entre paréntesis.

Recuperar datos de la tabla

Se puede usar una instrucción SELECT DML simple para recuperar los datos de la tabla.

SELECT * FROM my_subject;

Esta declaración DML simple le mostrará todos los datos almacenados en la tabla que creamos anteriormente. Para ver los datos de una fila específica, puede usar la cláusula WHERE con SELECT DML

SELECT * FROM my_subject WHERE sub_id = 101;

Si lo desea, puede tomar la ayuda de la subconsulta para verificar los datos de la columna que definió como tipo de tabla anidada.

SELECT * FROM TABLE (
  SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101
);

La consulta anterior le mostrará los datos del sujeto que tiene el ID de sujeto 101 solo de la columna sub_schedule_day. En esta consulta usamos la expresión TABLE para abrir la instancia y mostrar los datos en formato relacional.

Actualizar datos de la tabla

Puede actualizar todos los valores de la columna que define como tabla anidada o puede actualizar una sola instancia de la misma.

Actualice todos los valores de la columna de tipo de tabla anidada.

UPDATE my_subject SET sub_schedule_day = my_nested_table('Tue', 'Sat') 
WHERE sub_id = 101;
/

La consulta anterior actualizará todos los valores de sub_schedule_day de 'Lun', 'Fri' a 'Tue' y 'Sat'. Ahora suponga que desea actualizar solo una sola instancia de esta columna reemplazando 'Sat' con 'Thu'. ¿Cómo harás eso?

Actualizar instancia única de tabla anidada

Para actualizar una sola instancia de columna de tipo de tabla anidada, puede volver a utilizar la ayuda de la expresión TABLE.

UPDATE TABLE
  (SELECT sub_schedule_day FROM my_subject 
  WHERE sub_id = 101) A
SET A.COLUMN_VALUE   = 'Thur' 
WHERE A.COLUMN_VALUE = 'Sat';

La consulta anterior actualizará el valor de 'Sábado' a 'Jueves' en la tabla.

Espero que hayas disfrutado leyendo y aprendido algo nuevo. Asegúrate de suscribirte a nuestro canal, ya que muchos tutoriales interesantes están en camino. ¡Gracias y que tengas un gran día!