SQL*Loader – (Parte 5): Rellenar columnas con datos derivados.

Rellenar columnas con datos derivados.

A partir de Oracle 8 se ha podido ver la introducción de objetos dentro de la Base de Datos, el concepto de definir un objeto es similar al de crear una Clase en Java o en C Una columna objeto se basa en un objeto, y se podrá cargar en ella tantos datos como atributos tenga ese objeto, mientras que en una columna normal solo se permite un solo valor.

CREATE OR REPLACE TYPE tipo_caracteristicas AS OBJECT (
caracteristica_nombre VARCHAR2(60),
caracteristica_tipo VARCHAR2(12),
caracteristica_elevacion NUMBER
);
/

Este tipo creado podrá ser la base para crear nuevos objetos y cada objeto nuevo creado tendrá los atributos correspondientes (caracteristica_nombre, caracteristica_tipo y característica_ elevación.
Estos tipos de objetos pueden ser almacenados bien en tablas objeto, o columnas objeto.

Ejemplo:

Definimos el Tipo de Objeto

CREATE TYPE tipo_persona AS OBJECT
(nombre VARCHAR(30),
dni NUMBER(9)) not final;

CREATE TYPE tipo_empleado UNDER tipo_persona
(empid NUMBER(5));

CREATE TABLE personal
(deptno NUMBER(3),
deptname VARCHAR(30),
person tipo_persona);

Creamos el Fichero de Control derivados.ctl

LOAD DATA
INFILE 'c:/SQL_LOADER/derivados.dat'
INTO TABLE personal
FIELDS TERMINATED BY ','
(deptno INTEGER EXTERNAL(3),
deptname CHAR,
1 person COLUMN OBJECT TREAT AS tipo_empleado  → declara derivado del tipo empleado 
                                                 (name CHAR, dni INTEGER EXTERNAL(9),
2 empid INTEGER EXTERNAL(5)))                  → se acepta por ser derivado del tipo empleado, 
                                                 si fuera declarado por defecto como objeto tipo 
                                                 persona, no se admitiría ya que ese atributo no 
                                                 le pertenece a ese tipo.

Datafile (sample.dat)

101,Mathematics,Johny Q.,301189453,10249, 237,Physics,»Albert Einstein»,128606590,10030,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *