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

Cómo crear una tabla anidada utilizando el tipo de datos definido por el usuario en la base de datos Oracle

¡Hola, chicos! Hoy aprenderemos cómo crear una colección de tipos de tablas anidadas usando un tipo de datos definido por el usuario. Espero que lo hayas pasado muy bien con el último tutorial donde aprendimos el proceso de creación de tablas anidadas con tipos de datos primitivos. Le sugiero que eche un vistazo a ese tutorial ya que vamos a usar los conceptos de allí.

De manera similar al tipo de datos primitivo, también se puede crear una tabla anidada utilizando tipos de datos definidos por el usuario. Para la demostración usaremos el usuario Oracle Object. Los objetos no requieren presentación, si alguna vez ha estudiado conceptos de POO. En Oracle, al igual que otros lenguajes de programación, el tipo de objeto es un tipo de datos que funciona de la misma manera que otros tipos de datos como Char, Varchar2, Number, etc. pero con más flexibilidad.

Para crear un objeto de Oracle, usamos nuestra antigua y confiable declaración 'Crear tipo'.

CREATE OR REPLACE TYPE object_type AS OBJECT (
  obj_id  NUMBER,
  obj_name  VARCHAR2(10)
);
/

La declaración anterior creará un objeto de Oracle con el nombre "tipo de objeto" con dos atributos obj_id y obj_name en una ejecución exitosa. Este tipo de datos se puede usar para crear una tabla anidada.

CREATE OR REPLACE TYPE My_NT IS TABLE OF object_type;
/

Creo que si revisó el último tutorial, encontrará esta declaración anterior muy familiar, excepto el tipo de elemento que es un tipo de datos primitivo allí. Aquí usamos un tipo de datos definido por el usuario que es un objeto de Oracle.

La declaración anterior se ha explicado en detalle en el último tutorial que puede consultar aquí.

¿Qué significa crear una tabla anidada usando Oracle Object?

Cada vez que crea una tabla anidada utilizando un objeto de Oracle, los atributos del objeto se convierten en las columnas de esa tabla. Por ejemplo, en nuestro caso, creamos una tabla anidada 'My_NT' utilizando el tipo de datos definido por el usuario, que es un objeto de Oracle 'Object_Type' que tiene dos atributos obj_id y obj_name. Estos dos atributos del objeto actuarán como las columnas de la tabla. La siguiente imagen te ayudará a entender esto más claramente.

Ahora que hemos creado la tabla anidada usando el tipo de datos definido por el usuario, es hora de ponerla a trabajar.

CREATE TABLE Base_Table(
  tab_id  NUMBER,
  tab_ele My_NT
)NESTED TABLE tab_ele STORE AS stor_tab_1;
/

La tabla anterior llamada 'Base_Table' es simple y tiene 2 columnas 'tab_id' y 'tab_ele'. La primera columna es de tipo de datos numéricos, mientras que la segunda columna es de tipo de tabla anidada. Esto significa que la segunda columna contiene una tabla y esa tabla es nuestra tabla anidada 'My_Nt'

Aunque esta 'Base_Table' es una tabla simple, una de sus columnas contiene una tabla anidada que plantea algunas preguntas como:

¿Cómo insertar datos en la tabla? ¿Cómo actualizar los datos de la tabla? ¿O cómo recuperar los datos de la tabla? Intentemos encontrar las respuestas a todas estas preguntas una a la vez.

¿Cómo insertar datos en la tabla anidada?

Sí, estoy de acuerdo en que insertar datos en una tabla que tiene una columna de tipo de tabla anidada puede ser complicado, pero de alguna manera tenemos que encontrar la forma de hacerlo. Como una tabla sin datos no nos sirve. ¿Derecha? Veamos cómo podemos hacer eso.

 INSERT INTO base_table (tab_id, tab_ele) VALUES
 (801,  -- value for 1st colum 
   My_NT (object_type (1,'Superman') -- values for 2nd column )
 );

Como puede ver en esta declaración INSERT, todo es igual que un Insert DML normal, excepto la línea número 3 donde estamos insertando datos en la segunda columna de la tabla. Para insertar datos en la columna que es del tipo de tabla anidada, primero debe escribir el nombre de su tabla anidada, que en este caso es 'My_NT', luego debe escribir el nombre de su objeto de Oracle, que aquí es 'Object_Type' seguido de los valores que desea insertar en su tabla. No olvide hacer coincidir los paréntesis para el nombre de la tabla y el nombre del objeto, de lo contrario obtendrá un error.

¿Cómo actualizar los valores de la tabla anidada?

UPDATE base_table SET tab_ele = My_NT(object_type(1,'SpiderMan')) WHERE tab_id = 801; 

La declaración DML anterior actualizará los valores en consecuencia en una ejecución exitosa.

¿Cómo recuperar datos de la tabla anidada?

Simplemente puede ejecutar la instrucción Select en su tabla para obtener los datos.

Select tab_id, tab_ele FROM base_table;

La siguiente imagen le mostrará el resultado devuelto por esta tabla.

Como puede ver, esta declaración SELECT le mostrará los datos de las columnas que son del tipo de datos principal, pero solo el nombre de su tabla anidada junto con el objeto de Oracle de la columna que define como un tipo de tabla anidada. Puede superar fácilmente este problema usando una expresión TABLE como esta.

SELECT * FROM TABLE(
  SELECT tab_ele FROM Base_Table WHERE tab_id = 801
)

La ejecución exitosa de la consulta anterior le mostrará los datos de la segunda columna de su tabla 'Base_Table' en un formato relacional.

Eso es todo por este tutorial, espero que hayas disfrutado y aprendido algo nuevo. Asegúrate de suscribirte y registrarte. ¡Que tengas un gran día!