Oracle SQL Nested Tables and Object Types Implementation
Classified in Arts and Humanities
Written on in
English with a size of 2.71 KB
Oracle Nested Tables and Object Types
1. Implementing Nested Tables
Define the object type and the nested table structure:
CREATE OR REPLACE TYPE detalle_tip AS OBJECT (
id_producto NUMBER(3),
cantidad NUMBER(10)
);
CREATE TYPE nest_detalle AS TABLE OF detalle_tip;Create the parent table and store the nested table:
CREATE TABLE orden (
id_orden NUMBER,
fecha DATE NOT NULL,
detalles nest_detalle
) NESTED TABLE detalles STORE AS store_detalles;Insert and query data:
INSERT INTO orden VALUES (100, SYSDATE, nest_detalle(detalle_tip(10, 1000)));
SELECT id_orden, t2.id_producto FROM orden t, TABLE(t.detalles) t2;
SELECT id_orden, fecha, t2.id_producto, t2.cantidad FROM orden t, TABLE(t.detalles) t2;2. Varrays and Nested Tables in Companies
CREATE TYPE dueno AS VARRAY(5) OF VARCHAR2(16);
CREATE TYPE phone_nested AS TABLE OF VARCHAR2(12);
CREATE TABLE company2 (
name VARCHAR2(20),
phone phone_nested
) NESTED TABLE phone STORE AS phone_nr_table;
INSERT INTO company2 VALUES ('abc', phone_nested('243-4758', '485-2534'));3. Complex Object-Relational Modeling
CREATE TYPE nombreUdt AS OBJECT (nombres VARCHAR2(30), apellidos VARCHAR2(30));CREATE TYPE direccionUdt AS OBJECT (calle VARCHAR2(30), numeroCalle CHAR(5), ciudad VARCHAR2(20), cp CHAR(5));CREATE TYPE telefonosUdt AS VARRAY(10) OF VARCHAR2(15);CREATE TYPE PersonaUdt AS OBJECT (SSN CHAR(9), Nombre nombreUdt, fechaNacimiento DATE, Direccion direccionUdt, telefonos telefonosUdt) NOT FINAL;CREATE TYPE CursoUdt;CREATE TYPE RefCursosUdt AS TABLE OF REF CursoUdt;CREATE TYPE CursoTomadoUdt;CREATE TYPE RefCursoTomadoUdt AS TABLE OF REF CursoTomadoUdt;CREATE TYPE instructorUdt;CREATE TYPE diplomaUdt AS OBJECT (nombre VARCHAR2(15), anio CHAR(4));CREATE TYPE diplomasUdt AS VARRAY(10) OF diplomaUdt;CREATE TYPE estudianteUdt UNDER PersonaUdt (numEstud CHAR(6), departamento VARCHAR2(20), diplomas diplomasUdt, cursoInscrito RefCursosUdt, cursoTomado RefCursoTomadoUdt);CREATE TYPE RefEstudiantesUdt AS TABLE OF REF estudianteUdt;CREATE OR REPLACE TYPE CursoUdt AS OBJECT (numCurso CHAR(10), nombreCurso VARCHAR2(40), creditos INTEGER, anio INTEGER, departamento VARCHAR2(20), RequisitoDeRef RefCursosUdt, tienePrerequisito RefCursosUdt, cursoTomado RefCursoTomadoUdt, estudianteInscrito RefEstudiantesUdt, maestroRef REF instructorUdt);