You are on page 1of 110

Fundamentos II - A

Objetivos
Despus de completar esta leccin, usted debera ser

capaz de hacer lo siguiente :


Diferenciar los sistemas de privilegios desde el objeto

privilegios Otorgar privilegios a las tablas Conceder roles Distinguir entre los privilegios y los roles

Programa 1:
Privilegios del sistema

Creacin de un rol
Privilegios de Objetos Revocar privilegios de Objeto

Control de acceso de usuario


Administrador de una Base de datos

Nombre de usuario y contrasea Privilegios


Usuarios

Privilegios
Base de datos de seguridad: Sistema de seguridad La seguridad de los datos Privilegios del sistema: Realizacin de una accin

concreta dentro de la base de datos Objeto privilegios: Manipular el contenido de los objetos de la base de datos Schemas: Coleccin de objetos como tablas, vistas y secuencias

Sistema de privilegios
Ms de 100 privilegios estn disponibles.

El administrador de bases de datos de alto nivel tiene

privilegios del sistema para tareas tales como :


Creacin de nuevos usuarios Eliminacin de usuarios Eliminacin de tablas Copia de seguridad de las tablas

Creacin de Usuarios
El administrador de bases de datos (DBA) crea los usuarios con la

sentencia CREATE USER.

CREATE USER usuario IDENTIFIED BY clave; CREATE USER demo IDENTIFIED BY demo;

Sistema de privilegios de usuario


Despus de un usuario es creado, el DBA puede conceder

privilegios de sistema especficos para ese usuario.

GRANT privilegio [, privilegio...] TO usuario [, usuario| role, PUBLIC...];


Un desarrollador de aplicaciones, por ejemplo, puede tener los

siguientes privilegios del sistema:


CREATE CREATE CREATE CREATE CREATE

SESSION TABLE SEQUENCE VIEW PROCEDURE

Sistema de concesin de privilegios


El DBA puede conceder privilegios del sistema especfico

a un usuario.

GRANT TO

create session, create table, create sequence, create view demo;

Qu es un rol?
Usuarios

Administrador

Privilegio
La asignacin de privilegios sin un rol La asignacin de privilegios con un papel

La creacin y concesin de privilegios a un Rol


Crear un Rol:

CREATE ROLE Administrador;


Otorgar privilegios a un Rol

GRANT create table, create view TO Administrador;


Conceder un Rol a los usuarios:

GRANT Administrador TO BELL, KOCHHAR;

Cambio de contrasea
El DBA crea las cuentas de usuario y inicializa su

contrasea. Usted puede cambiar su contrasea usando el comando ALTER USER.

ALTER USER demo IDENTIFIED BY employ;

Privilegios de Objetos
Privilegios de Objetos ALTER DELETE Tabla Vista Secuencia

INDEX
INSERT REFERENCES SELECT UPDATE

Privilegios de Objetos
Privilegios de Objeto varan de objeto a objeto.

Un propietario tiene todos los privilegios sobre el objeto.


Un propietario puede dar privilegios especficos sobre los

objetos que es titular.

GRANT objecto_privilegio [(columnas)] ON objeto TO {usuarios|rol|PUBLIC} [WITH GRANT OPTION];

Concesin de privilegios de Objeto


Conceder privilegios de consulta en la tabla Empleados:

GRANT ON TO

select empleados demo;

Otorgar privilegios a actualizar columnas especficas a

usuarios y roles:

GRANT ON TO

update (departamento_nombre, locacin_id) departamentos demo, manager;

Pasando tus privilegios


Dar a un usuario la autoridad para asignar privilegios:

GRANT ON TO WITH

select, insert departamentos demo GRANT OPTION;

Permitir a todos los usuarios del sistema para consultar los

datos de Alice en la tabla DEPARTAMENTOS:

GRANT select ON alice.departamentos TO PUBLIC;

Confirmacin de los privilegios concedidos


Vista del Diccionario de Datos Descripcin
Privilegios de sistema otorgados a roles Privilegios de tablas concedidos a roles Funciones accesibles por el usuario Privilegios de sistema otorgados al usuario Permisos de objeto en los objetos del usuario Permisos de objeto al usuario

ROLE_SYS_PRIVS
ROLE_TAB_PRIVS USER_ROLE_PRIVS USER_SYS_PRIVS

USER_TAB_PRIVS_MADE
USER_TAB_PRIVS_RECD USER_COL_PRIVS_MADE

Permisos de objeto en las columnas de los objetos del usuario


Permisos de objeto al usuario sobre columnas especficas

USER_COL_PRIVS_RECD

Objeto revocar privilegios


Utilizar la declaracin REVOKE para revocar los privilegios

concedidos a otros usuarios. Privilegios concedidos a los dems a travs de la clusula WITH GRANT OPTION tambin son revocados.
REVOKE {privilegios [, privilegios...]|ALL} ON objetos FROM {usuario[, usuario...]|rol|PUBLIC} [CASCADE CONSTRAINTS];

Revocar privilegios de objeto


Revocar los privilegios SELECT e INSERT otorgados a los

usuarios demo en la tabla DEPARTAMENTOS.

REVOKE ON FROM

select, insert departamentos demo;

Resumen
En esta leccin, usted debe haber aprendido sobre las

declaraciones que controlan el acceso a la base de datos y objetos de base de datos.


Sentencia CREATE USER GRANT Accin
Crea un usuario (Realizado generalmente por un DBA) Asigna a otros usuarios privilegios de acceso a objetos

CREATE ROLE
ALTER USER REVOKE

Crea una coleccin de privilegios (Realizado generalmente por un DBA)


Cambia la clave a un usuario Remueve privilegios sobre los objetos a usuarios

Objetivos
Despus de completar esta leccin, usted debera ser

capaz de hacer lo siguiente :


Aadir restricciones

Crear ndices
Crear ndices con la sentencia CREATE TABLE Crear ndices basados en funciones Eliminar columnas y establecer columnas como no

utilizadas (UNUSED) Realizar operaciones FLASHBACK Crear y utilizar tablas externas

Programa 2:
Usando el comando ALTER TABLE para aadir,

modificar y eliminar una columna La gestin de las restricciones


Aadiendo y eliminando una restriccin Aplazar las restricciones Activacin y desactivacin de una restriccin

Creacin de ndices Uso de la sentencia CREATE TABLE Crear ndices basados en funciones Eliminando un ndice Realizacin de operaciones de flashback Creacin y uso de tablas externas

Comando Alter Table


Utilice la sentencia ALTER TABLE para: Aadir una nueva columna Modificar una columna existente Definir un valor por defecto para la nueva columna Eliminar una columna

Comando ALTER TABLE


Utilice el comando ALTER TABLE para aadir,

modificar, o eliminar columnas:

ALTER TABLE tabla ADD (columna TipoDato[DEFAULT expresin] [, columna TipoDato]...); ALTER TABLE tabla MODIFY (columna TipoDato[DEFAULT expresin] [, columna TipoDato]...); ALTER TABLE tabla DROP COLUMN (columna);

Agregar una columna


Puede utilizar la clusula ADD para aadir columnas:

ALTER TABLE dept80 ADD (trabajo_id VARCHAR2(9));


La nueva columna se convierte en la ltima columna:

Modificacin de una columna


Usted puede cambiar una columna del tipo de datos, el

tamao y el valor por defecto

ALTER TABLE dept80 MODIFY (apellidos VARCHAR2(30));


Un cambio en el valor por defecto slo afecta a las

inserciones posteriores a la mesa.

Eliminar una Columna


Usar la clusula DROP COLUMN para eliminar columnas

que ya no necesite de la tabla:


ALTER TABLE DROP COLUMN dept80 trabajo_id;

Establecer la opcin UNUSED


Puede utilizar el comando SET UNUSED para marcar una o ms

columnas no utilizadas. Puede utilizar la opcin de DROP UNUSED COLUMNS para eliminar las columnas que estn marcados como no utilizadas.

ALTER TABLE <tabla_nombre> SET UNUSED(<columna_nombre>); OR ALTER TABLE <tabla_nombre> SET UNUSED COLUMN <columna_nombre>;

ALTER TABLE <tabla_nombre> DROP UNUSED COLUMNS;

Adicin de una restriccin


Utilice la sentencia ALTER TABLE para: Agregar o eliminar una restriccin, pero no modificar su estructura Activar o desactivar las restricciones Aadir una restriccin NOT NULL utilizando la clusula MODIFY
ALTER TABLE <tabla_nombre> ADD [CONSTRAINT <restriccin_nombre>] type (<columna_nombre>);

Adicin de una restriccin


Aadir una clave fornea a la tabla EMP2 que indica que

un administrador debe existir como un empleado vlido en la tabla EMP2


ALTER TABLE emp2 modify empleado_id Primary Key;

ALTER TABLE emp2 ADD CONSTRAINT emp_jefe_fk FOREIGN KEY(jefe_id) REFERENCES emp2(empleado_id);

ON DELETE CASCADE
Eliminar filas hijas cuando la clave del padre es eliminada:
ALTER TABLE Emp2 ADD CONSTRAINT emp_dep_fk FOREIGN KEY (departamento_id) REFERENCES departamentos(departamento_id) ON DELETE CASCADE;

Aplazar Limitaciones
Las restricciones pueden tener los siguientes atributos: Aplazable o no aplazable (DEFERRABLE or NOT DEFERRABLE) Inicialmente diferido o Inicialmente inmediato (INITIALLY DEFERRED or INITIALLY IMMEDIATE)

ALTER TABLE dept2 ADD CONSTRAINT dept2_id_pk PRIMARY KEY (departamento_id) DEFERRABLE INITIALLY DEFERRED SET CONSTRAINTS dept2_id_pk IMMEDIATE ALTER SESSION SET CONSTRAINTS= IMMEDIATE

Aplaza la creacin de una restriccin

Cambia un especifico atributo de una restriccin


Cambia todas las restricciones para una sesin

Diferencia entre INITIALLY DEFERED y INITIALLY IMMEDIATE


INITIALLY DEFERRED
Espera la comprobacin de la restriccin hasta que finalice la transaccin Comprueba la restriccin al final de la ejecucin de la instruccin

INITIALLY IMMEDIATE

CREATE TABLE emp_new_sal (salary NUMBER CONSTRAINT sal_ck CHECK (salary > 100) DEFERRABLE INITIALLY IMMEDIATE, bonus NUMBER CONSTRAINT bonus_ck CHECK (bonus > 0 ) DEFERRABLE INITIALLY DEFERRED );

Eliminando una restriccin


Remueve la restriccin de la tabla EMP2:

ALTER TABLE emp2 DROP CONSTRAINT emp_jefe_fk;


Remueve la restriccin PRIMARY KEY en la tabla DEPT2 y

borra la correspondiente restriccin FOREIGN KEY en la columna EMP2.DEPARTAMENTO_ID:

ALTER TABLE dept2 DROP PRIMARY KEY CASCADE;

Desactivacin de las restricciones


Ejecutar la clusula DISABLE de la sentencia ALTER

TABLE para desactivar una restriccin de integridad. Aplicar la opcin CASCADE para deshabilitar las restricciones dependen de la integridad.

ALTER TABLE emp2 DISABLE CONSTRAINT emp_dep_fk;

Activar Restricciones
Activar

una restriccin de integridad actualmente desactivada en la definicin de tabla mediante el uso de la clusula ENABLE.

ALTER TABLE emp2 ENABLE CONSTRAINT emp_dep_fk;

Un ndice UNIQUE se crea automticamente si habilita

una clave UNIQUE o de una restriccin PRIMARY KEY.

Restricciones en cascada
La clusula CASCADE CONSTRAINTS se utiliza junto con la

clusula DROP COLUMN. La clusula CASCADE CONSTRAINTS elimina todas las restricciones de integridad referencial que se refieren a la clave primaria y nica definidas sobe las columnas borradas. La clusula CASCADE CONSTRAINTS tambin elimina todas las restricciones multicolumnas definidas en las columnas borradas.

Restricciones en cascada
Ejemplo:

ALTER TABLE emp2 DROP COLUMN empleado_id CASCADE CONSTRAINTS;

ALTER TABLE test1 DROP (col1_pk, col2_fk, col1) CASCADE CONSTRAINTS;

Cambiar el nombre de Columnas y restricciones


Utilice la clusula RENAME COLUMN de la sentencia ALTER

TABLE para cambiar el nombre de las columnas de la tabla


ALTER TABLE marketing RENAME COLUMN equipo_id TO id; a

Uso de la clusula RENAME CONSTRAINT de la sentencia ALTER TABLE para cambiar el nombre de cualquier restriccin de la tabla.
ALTER TABLE marketing RENAME CONSTRAINT mktg_pk b TO new_mktg_pk;

Listado de ndices
Los ndices son creados: Automticamente

Creacin de PRIMARY KEY Creacin de UNIQUE KEY

Manualmente

La sentencia CREATE INDEX La sentencia CREATE TABLE

CREATE INDEX con la sentencia CREATE TABLE


CREATE TABLE Nuevo_EMP (empleado_id NUMBER(6) PRIMARY KEY USING INDEX (CREATE INDEX emp_id_idx ON Nuevo_EMP(empleado_id)), nombres VARCHAR2(20), apellidos VARCHAR2(25));

SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'Nuevo_EMP';

ndices basados en funciones


Un

ndice basado en funciones esta basado en expresiones. La expresin del ndice se construye a partir de columnas de la tabla, constantes, funciones SQL, y funciones definidas por el usuario.
CREATE INDEX Nombre_Depa_Mayscula_idx ON dept2(UPPER(departamento_nombre));

SELECT * FROM dept2 WHERE UPPER(departamento_nombre) = 'SALES';

La eliminacin de un ndice
Eliminar un ndice del diccionario de datos utilizando el

comando DROP INDEX:

DROP INDEX ndice;


Elimine el ndice NOMBRE_DEPA_MAYSCULA_IDX del

diccionario de datos :

DROP INDEX Nombre_Depa_Mayscula_idx;

Para eliminar un ndice, debe ser el propietario del ndice o

tener el privilegio DROP para cualquier ndice.

Eliminar TABLA ... de PURGE


DROP TABLE dept80 PURGE;

Sentencia para FLASHBACK TABLE


Permite recuperar las tablas a un determinado punto

en el tiempo con una sola declaracin Restaura los datos de las tablas junto con sus ndices y restricciones Permite volver a la tabla y su contenido a un cierto punto en el tiempo o SCN

SCN

Sentencia FLASHBACK TABLE


Herramienta de reparacin para modificaciones accidentales de tablas

Restaura una tabla para una fecha anterior en el tiempo Ventajas: Facilidad de uso, la disponibilidad y la rpida ejecucin Se realiza en el lugar Sintaxis:

FLASHBACK TABLE[schema.]table[, [schema.]table ]... TO { TIMESTAMP | SCN } expresin [ { ENABLE | DISABLE } TRIGGERS ];

Usando la sentencia FLASHBACK TABLE


DROP TABLE emp2;

SELECT original_name, operation, droptime FROM recyclebin;

FLASHBACK TABLE emp2 TO BEFORE DROP;

Tablas externas

Creacin de un Directorio para el cuadro exterior


Crear un objeto DIRECTORY que corresponde al directorio en

el sistema de archivos donde la fuente de datos externa reside.

CREATE OR REPLACE DIRECTORY emp_dir AS '//emp_dir';

GRANT READ ON DIRECTORY emp_dir TO hr;

Creacin de una tabla externa


CREATE TABLE <tabla_nombre> ( <col_nombre> <tipoDato>, ) ORGANIZATION EXTERNAL (TYPE <access_driver_type> DEFAULT DIRECTORY <directorio_nombre> ACCESS PARAMETERS ( ) ) LOCATION ('<locacion_especificada>') ) REJECT LIMIT [0 | <numero> | UNLIMITED];

Creacin de una tabla externa mediante ORACLE_LOADER


CREATE TABLE jubilados ( nombres CHAR(25), apellidos CHAR(25)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY emp_dir ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE NOBADFILE NOLOGFILE FIELDS TERMINATED BY ',' ( nombres POSITION ( 1:20) CHAR, apellidos POSITION (22:41) CHAR ) ) LOCATION (jub.dat') ) PARALLEL 5 REJECT LIMIT 200;

Consultar Tablas Externas


SELECT * FROM jubilados

JUBILADO S

jub.dat

Creacin de una tabla externa mediante ORACLE_DATAPUMP: Ejemplo


CREATE TABLE emp_ext (empleado_id, nombres, apellidos) ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY emp_dir LOCATION ('emp1.exp','emp2.exp') ) PARALLEL AS SELECT empleado_id, nombres, apellidos FROM empleados;

Resumen
En esta leccin, usted debe haber aprendido cmo: Aadir restricciones Crear ndices Crear ndices con la sentencia CREATE TABLE Crear la ndices basados en funciones Eliminar columnas y establecer columnas como no utilizadas (UNUSED) Realizar operaciones FLASHBACK Crear y utilizar tablas externas

Objetivos
Despus de completar esta leccin, usted debera ser capaz de hacer lo siguiente: Utilizar vistas del diccionario de datos para buscar datos de tus objetos Varias consultas de vistas del diccionario de datos

Programa 3:
Introduccin al diccionario de datos Consultar vistas del diccionario para:

Informacin de tablas Informacin de columnas Informacin de restricciones

Consultar vistas del diccionario para:

Informacin de vistas Informacin de secuencia Informacin de Sinnimo Informacin de ndices

Aadir un comentario a una tabla y consultar la vista

del diccionario para comentar la informacin

Diccionario de Datos
Servidor Oracle Tablas que contienen los datos de negocio: EMPLEADOS DEPARTAMENTOS LOCACIONES TRAB_HISTORIAL ... Vistas del Diccionario de datos: DICTIONARY USER_OBJECTS USER_TABLES USER_TAB_COLUMNS ...

Estructura del diccionario de datos


Servidor Oracle

Se compone de: Base de tablas Vistas de accesibilidad del usuario

Estructura del diccionario de datos


Ver convencin de nomenclatura:
Vista Prefix USER ALL DBA V$ Propsito
Vista de usuarios (lo que est en su esquema; lo que poseen) Vista de usuarios extendida (lo que puede acceder) Vista de administradores de Base de datos (lo que esta en los esquemas de todos) Datos relacionados con el rendimiento

Cmo usar la Vista del Diccionario


Comience con DICTIONARY. Contiene los nombres y

descripciones de las tablas y vistas.


DESCRIBE DICTIONARY

SELECT * FROM dictionary WHERE table_name = 'USER_OBJECTS';

Visualizar USER_OBJECTS y ALL_OBJECTS


USER_OBJECTS: Consulta USER_OBJECTS para ver todos los objetos que usted posee Es una forma til de obtener una lista de todos los nombres de objeto y los tipos en su esquema, adems de la siguiente informacin:

Fecha de creacin Fecha de la ltima modificacin Estado (vlido o no vlido)

ALL_OBJECTS: consulta ALL_OBJECTS para ver todos los objetos a los que tiene acceso

Visualizar USER_OBJECTS
SELECT object_name, object_type, created, status FROM user_objects ORDER BY object_type;

Informacin de Tablas
USER_TABLES:
DESCRIBE user_tables

SELECT table_name FROM user_tables;

Informacin de Columnas
USER_TAB_COLUMNS:
DESCRIBE user_tab_columns

Informacin de Columnas
SELECT column_name, data_type, data_length, data_precision, data_scale, nullable FROM user_tab_columns WHERE table_name = 'EMPLEADOS';

Informacin de restricciones
USER_CONSTRAINTS describe la definiciones de las

restricciones sobre sus tablas. USER_CONS_COLUMNS se describen las columnas que son propiedad de usted y que se especifican en las restricciones.
DESCRIBE user_constraints

USER_CONSTRAINTS: Ejemplo
SELECT constraint_name, constraint_type, search_condition, r_constraint_name, delete_rule, status FROM user_constraints WHERE table_name = 'EMPLEADOS';

Consultando USER_CONS_COLUMNS
DESCRIBE user_cons_columns

SELECT constraint_name, column_name FROM user_cons_columns WHERE table_name = 'EMPLEADOS';

Informacin de Vistas
1
DESCRIBE user_views

SELECT DISTINCT view_name FROM user_views;

SELECT text FROM user_views WHERE view_name = 'EMP_DETALLES_VIEW';

Informacin de Secuencias
DESCRIBE user_sequences

Confirmando Secuencias
Verificar los valores de su secuencia en la tabla

USER_SEQUENCES del diccionario de datos.


sequence_name, min_value, max_value, increment_by, last_number user_sequences;

SELECT FROM

La columna LAST_NUMBER muestra el siguiente

nmero de secuencia, si esta especificado nocache.

Informacin de ndices
USER_INDEXES proporciona informacin acerca de

sus ndices. USER_IND_COLUMNS describe las columnas que comprende los ndices y las columnas de los ndices de tus tablas.
DESCRIBE user_indexes

USER_INDEXES: Exemplos
a
SELECT index_name, table_name, uniqueness FROM user_indexes WHERE table_name = 'EMPLEADOS';

SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'EMP_LIB';

Consultando USER_IND_COLUMNS
DESCRIBE user_ind_columns

SELECT INDEX_NAME, COLUMN_NAME, TABLE_NAME FROM user_ind_columns WHERE INDEX_NAME = 'LNAME_IDX';

Informacin de Sinnimos
DESCRIBE user_synonyms

SELECT * FROM user_synonyms;

Adicin de Comentarios a una tabla


Usted puede agregar comentarios a una tabla o

columna utilizando la declaracin COMMENT:

COMMENT ON TABLE empleados IS 'Informacin del empleado'; COMMENT ON COLUMN empleados.nombres IS 'nombres del empleado';

Los comentarios pueden ser vistos a travs de la vista

del diccionario de datos:

ALL_COL_COMMENTS USER_COL_COMMENTS ALL_TAB_COMMENTS USER_TAB_COMMENTS

Resumen
En esta leccin, debi aprender la manera de encontrar

informacin acerca de sus objetos a travs de las siguientes vistas del diccionario:
DICTIONARY
USER_OBJECTS USER_TABLES USER_TAB_COLUMNS

USER_CONSTRAINTS
USER_CONS_COLUMNS USER_VIEWS USER_SEQUENCES

USER_INDEXES
USER_SYNONYMS

Objectives Despus de completar esta leccin, usted debera ser


capaz de hacer lo siguiente: Manipular los datos mediante subconsultas Especificar explcitamente los valores en el INSERT y UPDATE Describir las caractersticas de multitablas INSERTs Utilice los siguientes tipos de multitablas INSERTs:

Incondicional INSERT Pivotantes INSERT Condicional INSERT ALL Condicional INSERT FIRST

Combinar filas de una tabla Seguimiento de los cambios a los datos durante un

perodo de tiempo

Programa 4:
Manipular los datos mediante subconsultas

Especificar explcitamente los valores en el INSERT y

UPDATE Utilice los siguientes tipos de multitablas INSERTs :


Incondicional INSERT Pivotantes INSERT Condicional INSERT ALL Condicional INSERT FIRST

Combinar filas de una tabla Seguimiento de los cambios a los datos durante un

perodo de tiempo

Uso de subconsultas para manipular los datos


Puede usar subconsultas en declaraciones del lenguaje de manipulacin de datos (LMD) : Recuperar datos a travs de una vista en lnea Copiar datos de una tabla a otra Actualizacin de datos en una tabla basada en los valores de otra tabla Eliminar filas de una tabla basada en las filas de otra tabla

Recuperacin de datos mediante una subconsulta como Fuente de datos


SELECT departamento_nombre, ciudad FROM departamentos NATURAL JOIN (SELECT l.locacion_id, l.ciudad, l.pais_id FROM loc l JOIN paices p ON (l.pais_id = p.pais_id) JOIN regiones USING(region_id) WHERE region_nombre = 'Europe');

Insercin usando una subconsulta como un objeto


INSERT INTO (SELECT l.locacion_id, l.ciudad, l.pais_id FROM loc l JOIN paices p ON(l.pais_id = p.pais_id) JOIN regiones USING(region_id) WHERE region_nombre = 'Europe') VALUES (3300, 'Cardiff', 'UK');

Insercin usando una subconsulta como un objeto


Verificar los resultados.

SELECT location_id, city, country_id FROM loc

Uso de la palabra clave WITH CHECK OPTION en declaraciones LMD

La palabra clave WITH CHECK OPTION prohbe

el cambio de filas que no estn en la subconsulta.


INSERT INTO ( SELECT locacion_id, ciudad, pais_id FROM loc WHERE pais_id IN (SELECT pais_id FROM paices NATURAL JOIN regiones WHERE region_nombre = 'Europe') WITH CHECK OPTION ) VALUES (3600, 'Washington', 'US');

Panorama general de uso explcito del valor por defecto


Usar la palabra clave DEFAULT como un valor de columna

cuando el valor por defecto de la columna es la deseada. Esto permite al usuario controlar donde y cuando el valor por defecto debe aplicarse a los datos. Explcita por defecto se pueden utilizar en INSERT y UPDATE.

Usando explicito valores predeterminados


DEFAULT with INSERT:

INSERT INTO deptm3 (department_id, department_name, manager_id) VALUES (300, 'Ingeniera', DEFAULT);
DEFAULT with UPDATE:

UPDATE deptm3 SET manager_id = DEFAULT WHERE department_id = 10;

Copia de filas de otra tabla


Sentencia INSERT utilizando una subconsulta.
INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%';

No utilice la clusula VALUES.


Coincide el nmero de columnas en la clusula INSERT

con la subconsulta.

Listado de Multitablas INSERT


Target_a

Tabla_Almacenamiento INSERT ALL INTO target_a VALUES(,,) INTO target_b VALUES(,,) INTO target_c VALUES(,,) SELECT FROM Tabla_Almacenamiento WHERE ;

Target_b

Subconsulta

Target_c

Listado de Multitablas INSERT


Utilice el comando INSERT ... SELECT para insertar

filas en varias tablas como parte de una nica declaracin LMD. Multitablas INSERT se utilizan en los sistemas de almacenamiento de datos para transferir datos de una o ms fuentes de funcionamiento a un conjunto de tablas de destino. Ofrecen gran mejora del rendimiento en:

LMD nico frente a mltiples INSERT ... SELECT LMD nico frente a un procedimiento para llevar a cabo mltiples inserciones usando la sintaxis if ... then

Tipos de Multitablas INSERT


Los diferentes tipos de multitablas INSERT son: Incondicional INSERT Condicional INSERT ALL Pivotantes INSERT Condicional INSERT FIRST

Multitablas INSERT
Sintaxis de mltiples INSERT:
INSERT [clausur_insercin_condicional] [clausur_de_insercin valor_clausur] (subconsulta)

Clausur_insercin_condicional :

[ALL] [FIRST] [WHEN condicin THEN] [clausur_de_insercin valor_clausur] [ELSE] [clausur_de_insercin valor_clausur]

Incondicional INSERT ALL


Seleccione los valores EMPLEADO_ID, HIRE_DATE,

SUELDO y JEFE_ID de la tabla EMPLEADOS para aquellos empleados cuyos EMPLEADO_ID es superior a 200. Introduzca estos valores en las tablas SAL_HISTORIAL and MGR_HISTORIAL utilizando un multitablas INSERT.

INSERT ALL INTO sal_historial VALUES(EMPID,HIREDATE,SAL) INTO mgr_historial VALUES(EMPID,MGR,SAL) SELECT empleado_id EMPID, hire_date HIREDATE, sueldo SAL, jefe_id MGR FROM empleados WHERE empleado_id > 200;

Condicional INSERT ALL: Ejemplo


Empleados antes de 1995
EMP_HISTORI AL

Empleados
Con comisin de ventas

EMP_VENTAS

Condicional INSERT ALL


INSERT ALL WHEN fechaContrato < '01-ENE-95' THEN INTO emp_historial VALUES(EMPID,FECCONT,SAL)

WHEN COMM IS NOT NULL THEN


INTO emp_ventas VALUES(EMPID,COMM,SAL) SELECT empleado_id EMPID, fechaContrato FECCONT, sueldo SAL, comision_pct COMM FROM empleados

Condicional INSERT FIRST: Ejemplo


Escenario: Si el sueldo de un empleado es 2,000, El registro es insertado en la tabla SAL_BAJOS solamente.

Sueldo < 5,000 SAL_BAJOS

5000 <= Sueldo <= 10,000 SAL_MEDIOS EMPLEADOS Otros casos SAL_ALTOS

Condicional INSERT FIRST


INSERT FIRST WHEN sueldo < 5000 THEN INTO sal_bajo VALUES (empleado_id, apellidos, sueldo) WHEN sueldo between 5000 and 10000 THEN INTO sal_medio VALUES (empleado_id, apellidos, sueldo)

ELSE
INTO sal_alto VALUES (empleado_id, apellidos, sueldo) SELECT empleado_id, apellidos, sueldo FROM empleados

Pivotantes INSERT
Convertir el conjunto de registros de ventas desde Base de

Datos no relacional a formato relacional.


Emp_ID 176 Sem_ID 6 Lun 2000 Mar 3000 Mie 4000

Jue 5000

Vie 6000

Empleado_ID 176 176

Semana 6 6

Ventas 2000 3000

176
176

6
6

4000
5000

176

6000

Pivotantes INSERT
INSERT ALL INTO info_ventas VALUES (empleado_id, semana_id, sales_LUN) INTO info_ventas VALUES (empleado_id, semana_id, venta_MAR) INTO info_ventas VALUES (empleado_id, semana_id, venta_MIE) INTO info_ventas VALUES (empleado_id, semana_id, venta_JUE) INTO info_ventas VALUES (empleado_id, semana_id, venta_VIE) SELECT EMPLEADO_ID, semana_id, ventas_LUN, ventas_MAR, ventas_MIE, ventas_JUE, ventas_VIE FROM Almacen_datos_ventas;

Declaracin MERGE
Proporciona la capacidad condicional de actualizar,

insertar o eliminar datos en una tabla de base de datos Realiza un UPDATE si existe la fila, y un INSERT si se trata de una nueva fila:

Evita actualizaciones separadas Aumenta el rendimiento y facilidad de uso Es til en aplicaciones de almacenamiento de datos

Sintaxis de la declaracin MERGE


Condicionalmente puede insertar, actualizar o borrar filas

de una tabla mediante el uso de la declaracin de MERGE.

MERGE INTO nombre_tabla alias_tabla USING (tabla|vista|sub_consulta) alias ON (join condicin) WHEN MATCHED THEN UPDATE SET col1 = col1_val, col2 = col2_val WHEN NOT MATCHED THEN INSERT (lista_columna) VALUES (columna_valores);

Ejemplo: Combinar filas


Insertar o actualizar registros en la tabla COPY_EMP3

para que coincida con la tabla Empleados

MERGE INTO copy_emp3 c USING (SELECT * FROM EMPLEADOS ) e ON (c.empleado_id = e.empleado_id) WHEN MATCHED THEN UPDATE SET c.nombres = e.nombres, c.apellidos = e.apellidos, ... DELETE WHERE (E.COMMISSION_PCT IS NOT NULL) WHEN NOT MATCHED THEN INSERT VALUES(e.empleado_id, e.nombres, e.apellidos, e.email, e.telefono_numero, e.fecha_contrato, e.trabajo_id, e.sueldo, e.comision_pct, e.jefe_id, e.departamento_id);

Ejemplo: Combinar filas


TRUNCATE TABLE copy_emp3; SELECT * FROM copy_emp3; 0 rows selected MERGE INTO copy_emp3 c USING (SELECT * FROM EMPLOYEES ) e ON (c.employee_id = e.employee_id) WHEN MATCHED THEN UPDATE SET c.first_name = e.first_name, c.last_name = e.last_name, ... DELETE WHERE (E.COMMISSION_PCT IS NOT NULL) WHEN NOT MATCHED THEN INSERT VALUES(e.employee_id, e.first_name, ... SELECT * FROM copy_emp3; 20 rows selected.

Cambiando los datos de seguimiento


Versin Consulta SELECT

Versiones de filas recuperadas

Ejemplo de VERSIONS en Consultas Flashback


SELECT sueldo FROM empleados3 WHERE empleado_id = 107; UPDATE empleados3 SET sueldo = sueldo * 1.30 WHERE empleado_id = 107;

COMMIT; SELECT sueldo FROM empleados3 VERSIONS BETWEEN SCN MINVALOR AND MAXVALOR WHERE empleado_id = 107;

Clusula VERSIONS BETWEEN


SELECT versions_starttime FECHA_INICIO", versions_endtime FECHA_FINAL", sueldo FROM empleados VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE WHERE apellidos = 'Ramirez Ortiz';

Resumen
En esta leccin, usted debe haber aprendido cmo: Usar declaraciones DML y control de transacciones Describir las caractersticas de multitablas INSERTs Utilizar los siguientes tipos de multitablas INSERTs:

Unconditional INSERT Pivoting INSERT Conditional INSERT ALL Conditional INSERT FIRST

Combinar filas de una tabla Manipular los datos mediante el uso de subconsultas Seguimiento de los cambios a los datos a lo largo de

un perodo de tiempo

You might also like