Sesión03 - Creación de objetos (Oracle)

José Toro
José ToroProgramador en ToritoSoft

Este minitutorial tiene como objetivo captar todos los conceptos dictados en cada sesión en el curso de Base de Datos Avanzado II, así como brindar apoyo a los alumnos de la carrera técnica de Computación e Informática, que por algún motivo no hayan asistido a clases. UNIDAD 2. Creación de estructuras de datos Logro de la Unidad de Aprendizaje Al término de la unidad, el alumno diseña e implementa modelos de datos que incorporen reglas o restricciones mediante la definición de objetos tales como tablas, secuencias y sinónimos. Temario 2.1 Tema 3: CREACIÓN DE ESTRUCTURAS DE DATOS 2.1.1 Creación y modificación de tablas 2.1.2 Creación de restricciones 2.1.3 Manejo de índices 2.1.4 Manejo de secuencias 2.1.5 Manejo de sinónimos

/*
Sesión03 – Creación de Objetos
Estudiante: José Luis Toro Alcarraz
Curso: Base de Datos Avanzado II
Correo:i201010865@cibertec.edu.pe
*/
Objetivo de la sesión.
Describir algunos objetos de la base de datos y sus usos.
Crear, mantener y usar tablas, índices, constraints, secuencias y sinónimos.
1) Manejo de tablas. (Ver sesión anterior)
2) Manejo de constraints.
3) Manejo de secuencias.
4) Manejo de índices.
5) Manejo de sinónimos.
2) Manejo de constraints.







Fuerzan las reglas a nivel de tabla.
Evitan la eliminación de una tabla o de sus registros si hay dependencias.
Si no se asigna un nombre a un constraints Oracle Server genera un nombre con el
formato SYS_Cn.
Un constraint se puede crear al mismo tiempo que se crea la tabla o bien una vez creada la
tabla.
Se pueden definir a nivel de columna o de tabla.
Los constrtaints se pueden visualizar en el diccionario de datos.

Sentencias
CREATE TABLE [schema.] table
(column datatype [DEFAULT expr]
[column_constraint],

Utilice la sentence ALTER TABLE para:
 Agregar o borrar una restricción, sin
modificar su estructura.
 Activar o desactivar restricciones.
 Agregar una restricción NOT NULL
agregando la cláusula MODIFY.

Desactivar un constraint
ALTER TABLE table
DISABLE CONSTRAINT nom_constraint

Tipos de constraints
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

ALTER TABLE table
ADD CONSTRAINT nom_constraint
FOREING KEY(column)
REFERENCES table_dest (column);
ALTER TABLE emp
DROP CONSTRAINT emp_manager_fk;
ALTER TABLE departamento
DROP PRIMARY KEY CASCADE;
Activar un constraint
ALTER TABLE table
ENABLE CONSTRAINT nom_constraint
Ejemplo1: Cree la tabla CINE y verifique que los campos NOMBRE y DIRECCION no sean nulos.
SQL> CREATE TABLE CINE
(
CODCINE NUMBER (4),
NOMBRE VARCHAR2 (50) CONSTRAINT NN_CINE_NOMBRE NOT NULL,
DIRECCION VARCHAR2 (100) NOT NULL,
CAPACIDAD NUMBER (4),
FECHAINAUG DATE
);
Tabla creada.
Muestra la estructura de tabla CINE
SQL> DESC CINE;
Nombre
┐Nulo? Tipo
----------------------------------------- -------- ---------------------------CODCINE
NOMBRE
DIRECCION
CAPACIDAD
FECHAINAUG

NOT NULL
NOT NULL

NUMBER(4)
VARCHAR2(50)
VARCHAR2(100)
NUMBER(4)
DATE

Muestra los CONSTRAINTS de la tabla CINE.
SQL> SELECT CONSTRAINT_NAME, TABLE_NAME FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'CINE';
CONSTRAINT_NAME
TABLE_NAME
------------------------------ -----------------------------NN_CINE_NOMBRE
CINE
SYS_C0011190
CINE
Muestra los CONSTRAINTS de la tabla CINE y en que columna.
SQL> SELECT CONSTRAINT_NAME NOMBRE,TABLE_NAME TABLA,
SUBSTR(COLUMN_NAME,1,255)COLUMNA FROM ALL_CONS_COLUMNS
WHERE TABLE_NAME = 'CINE';
NOMBRE
TABLA
COLUMNA
------------------------------ ------------------------------ ---------------------------------SYS_C0011190
CINE
DIRECCION
NN_CINE_NOMBRE
CINE
NOMBRE
Eliminar la tabla CINE.
SQL> DROP TABLE CINE;
Tabla borrada.
Ejemplo2: Creamos nuevamente la tabla CINE y verificamos que los campos NOMBRE Y
DIRECCION sean únicos.
SQL> CREATE TABLE CINE
(
CODCINE NUMBER (4),
NOMBRE VARCHAR2 (50) CONSTRAINT UK_NOMBRE UNIQUE,
DIRECCION VARCHAR2 (100) UNIQUE,
CAPACIDAD NUMBER (6),
FECHAINAUG DATE
);
Tabla creada.
Eliminar la tabla CINE.
SQL> DROP TABLE CINE;
Tabla borrada.
Creamos la tabla CINE con su llave primaria y verifique que el valor de la columna NOMBRE sea
único.
SQL> CREATE TABLE CINE
(
CODCINE NUMBER (4) CONSTRAINT PK_CINE PRIMARY KEY,
NOMBRE VARCHAR2 (50) CONSTRAINT UK_NOMBRE UNIQUE,
DIRECCION VARCHAR2 (100),
CAPACIDAD NUMBER (6),
FECHAINAUG DATE
);
Tabla creada.
Creamos la tabla SALA con su llave primaria y referenciamos a la tabla CINE.
SQL> CREATE TABLE SALA
(
CODSALA NUMBER (4),
CODCINE NUMBER (4),
NOMBRE VARCHAR2 (20),
CAPACIDAD NUMBER (6),
CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA),
CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE) REFERENCES CINE(CODCINE)
);
Tabla creada.
Muestra los CONSTRAINTS de la tabla SALA y en que columna.
SQL> SELECT CONSTRAINT_NAME NOMBRE,TABLE_NAME TABLA,
SUBSTR(COLUMN_NAME,1,255)COLUMNA FROM ALL_CONS_COLUMNS
WHERE TABLE_NAME = 'SALA';
NOMBRE
TABLA
COLUMNA
------------------------------ ------------------------------ ---------------------------------FK_CODCINE

SALA

CODCINE

PK_CODSALA
SALA
Elimin
Eliminamos la tabla SALA
ar la tabla SALA.
SQL> DROP TABLE SALA;

CODSALA

Tabla borrada.
Ejemplo3: Creamos la tabla SALA aplicando el CONSTRAINT CHECK en el campo capacidad, el
CONSTRAINT PRIMARY KEY al campo CODSALA y el CONSTRAINT FOREIGN KEY al campo
CODCINE.
SQL> CREATE TABLE SALA
(
CODSALA NUMBER (4),
CODCINE NUMBER (4),
NOMBRE VARCHAR2 (20),
CAPACIDAD NUMBER (6) CONSTRAINT CK_CAPACIDAD CHECK (CAPACIDAD>0),
CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA),
CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE) REFERENCES CINE(CODCINE)
);
Tabla creada.
Eliminamos la tabla CINE y SALA.
SQL> DROP TABLE SALA;
Tabla borrada.
SQL> DROP TABLE CINE;
Tabla borrada.
Ejemplo4: Creamos la tabla CINE para luego alterar la tabla agregando restricciones.
SQL> CREATE TABLE CINE
(
CODCINE NUMBER (4),
NOMBRE VARCHAR2 (50),
DIRECCION VARCHAR2 (100),
CAPACIDAD NUMBER (6),
FECHAINAUG DATE
);
Tabla creada.
Modificamos la tabla CINE agregándole un PRIMARY KEY al campo CODCINE y un UNIQUE al
campo nombre.
SQL> ALTER TABLE CINE
ADD CONSTRAINT PK_CODCINE PRIMARY KEY (CODCINE);
Tabla modificada.
SQL> ALTER TABLE CINE
ADD CONSTRAINT UK_NOMBRE UNIQUE (NOMBRE);
Tabla modificada.
Ejemplo5: Creamos la tabla SALA para luego alterar la tabla agregando restricciones.
SQL> CREATE TABLE SALA
(
CODSALA NUMBER (4),
CODCINE NUMBER (4),
NOMBRE VARCHAR2 (20),
CAPACIDAD NUMBER (6)
);
Tabla creada
Modificamos la tabla SALA agregando un PRIMARY KEY a CODSALA, un FOREIGN KEY a
CODCINE, un CHECK a CAPACIDAD y un NOT NULL a NOMBRE.
SQL> ALTER TABLE SALA
ADD CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA);
Tabla modificada.
SQL> ALTER TABLE SALA
ADD CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE)
REFERENCES CINE (CODCINE);
Tabla modificada.
SQL> ALTER TABLE SALA
ADD CONSTRAINT CK_CAPACIDAD CHECK (CAPACIDAD>0);
Tabla modificada
SQL> ALTER TABLE SALA
MODIFY (NOMBRE VARCHAR2 (20) CONSTRAINT NN_NOMBRE NOT NULL);
Tabla modificada
3) Manejo de secuencias
Primero estar seguros que estamos conectado con el usuario scott/tiger.
SQL> connect scott/tiger
Conectado.
NEXTVAL: Genera una nueva secuencia.
CURRVAL: Obtiene el ultimo valor de la secuencia.
DUAL: Tabla auxiliar de Oracle que permite ejecutar este tipo de secuencias sin necesidad de
usar la base de datos.
Ejemplo1: Creamos una secuencia cuyo valor con que inicia sea 1 y el incremento sea 2.
SQL> CREATE SEQUENCE MISECUENCIA
START WITH 1
INCREMENT BY 2;
Secuencia creada.
Luego comprobamos generando una nueva secuencia una y otra vez.
SQL> SELECT MISECUENCIA.NEXTVAL FROM DUAL;
NEXTVAL
---------1
SQL> SELECT MISECUECNIA.NEXTVAL FROM DUAL;
NEXTVAL
---------3
Ahora comprobamos cual fue el último valor de la secuencia.
SQL> SELECT MISECUENCIA.CURRVAL FROM DUAL;
CURRVAL
---------3
Ejemplo2: Insertar un registro a la tabla departamento del esquema Scott generando el código de
departamento mediante una secuencia.
Muestra la información de la tabla DEPARTAMENTO del esquema SCOTT
SQL> SELECT * FROM DEPT;
DEPTNO
--------------10
20
30
40

DNAME
--------------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON

Creamos una secuencia para la tabla DEPT.
SQL> CREATE SEQUENCE SEQ_DEPT
START WITH 50
INCREMENT BY 10;
Secuencia creada.
Insertamos un registro a la tabla DEPT.
SQL> INSERT INTO DEPT (DEPTNO, DNAME, LOC)
VALUES (SEQ_DEPT.NEXTVAL, 'SISTEMA','LIMA');
1 fila creada.
Selecciona todos los campos de la tabla DEPT. Y podremos observar que hemos generado una
secuencia.
SQL> SELECT * FROM DEPT;
DEPTNO DNAME
LOC
---------- -------------- ------------10 ACCOUNTING
NEW YORK
20 RESEARCH
DALLAS
30 SALES
CHICAGO
40 OPERATIONS
BOSTON
50 SISTEMA
LIMA
Ahora ejecuta la siguiente sentencia ¿qué ocurrirá?
SQL> SELECT SEQ_DEPT.NEXTVAL FROM DUAL;
NEXTVAL
---------60
SQL> INSERT INTO DEPT (DEPTNO, DNAME, LOC)
VALUES (SEQ_DEPT.NEXTVAL, 'RRHH','LINCE');
1 fila creada.
Nuevamente seleccionamos la tabla DEPT.
SQL> SELECT * FROM DEPT;
DEPTNO DNAME
LOC
---------- -------------- ------------10 ACCOUNTING NEW YORK
20 RESEARCH
DALLAS
30 SALES
CHICAGO
40 OPERATIONS
BOSTON
50 SISTEMA
LIMA
70 RRHH
LINCE
6 filas seleccionadas.
Eliminar una secuencia..
SQL> DROP SEQUENCE SEQ_DEPT;
Secuencia borrada.
4) Manejo de índices
Cuando se debe crear un índice.






Debe crear un índice si:
Una columna contiene un amplio rango de valores.
Una columna contiene un gran número de valores nulos.
Una o más columnas se utilizan juntas frecuentemente en una clausula WHERE o en una
condición de unión.
La tabla es grande y se espera que la mayoría de las consultas recuperen del 10 por ciento
de las filas.

Cuando no se debe crear un índice.




La tabla es pequeña.
Las columnas no se suelen utilizar como condición en la consulta.
Se espera que la mayoría de las consultas recuperen más del 10 por ciento de las filas de
la tabla.



La tabla se actualiza frecuentemente.
Se hace referencia a las columnas indexadas como parte de una expresión.

Índices basados en funciones.
 Un índice basado en función es un índice basado en expresiones.
 La expresión de índice se crea desde columnas de tabla, constantes, funciones SQL y
funciones definidas por el usuario
Ejemplo: CREATE INDEX upper_dept_name_idx ON departamento (UPPER(department_name));
Sintaxis
CREATE INDEX index
ON table (column[, column] …);
Ejemplo1: Estamos indicando a Oracle que cree la tabla "FACTURACION", con el campo
"CODIGO" y que éste sea clave primaria, por lo que creará un índice automáticamente para este
campo. Esta es una forma de crear índices, en la creación de la tabla:
SQL> CREATE TABLE FACTURACION
(
CODIGO NUMBER (10) NOT NULL,
FECHA DATE DEFAULT SYSDATE,
CODIGOCLIENTE NUMBER (10),
NOMBRECLIENTE VARCHAR2 (100),
OBSERVACION VARCHAR2 (2000),
CONSTRAINT PK_FACTURACION_CODIGO PRIMARY KEY (CODIGO)
) TABLESPACE USERS;
Tabla creada.
Tras crear la tabla insertaremos algunos registros
SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, NOMBRECLIENTE)
VALUES (1, 50, 'AJPDSOFT');
1 fila creada.
Ejemplo2: Crear un índice al campo NOMBRECLIENTE de la tabla FACTURACION.
SQL> CREATE INDEX IN_FACTURACION_NOMBRECLIENTE
ON FACTURACION (NOMBRECLIENTE);
═ndice creado.
Para ver el índice creado podemos ejecutar la siguiente consulta
SQL> SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXES
WHERE TABLE_NAME = 'FACTURACION';
INDEX_NAME
TABLE_NAME
------------------------------ -----------------------------PK_FACTURACION_CODIGO
FACTURACION
IN_FACTURACION_NOMBRECLIENTE FACTURACION
Para ver el índice creado podemos ejecutar también una consulta mas especifica.
SQL> SELECT INDEX_NAME NOMBRE, INDEX_TYPE TIPO, TABLE_NAME TABLA,
TABLESPACE_NAME TABLESPACE, SECONDARY SECUNDARIO
FROM ALL_INDEXES WHERE TABLE_NAME = 'FACTURACION';
NOMBRE
TIPO
TABLA
TABLESPACE
S
------------------------------ --------------------------- ------------------------------ ------------------------------ -PK_FACTURACION_CODIGO
NORMAL FACTURACION
USERS
N
IN_FACTURACION_NOMBRECLIENTE NORMAL FACTURACION

SYSTEM

N

Ejemplo3: Para añadir un índice de tipo UNIQUE, obligando a que los valores del campo indexado
sean unívocos, es decir no se puedan repetir en el campo de la tabla.
SQL> CREATE UNIQUE INDEX IN_FACTURACION_CODCLI_FE
ON FACTURACION (CODIGOCLIENTE, FECHA);
═ndice creado.
De esta forma Oracle no permitirá que haya dos registros en la tabla "FACTURACION" con el
mismo valor en los campos "CODIGOCLIENTE" y "FECHA", es decir, sólo podrá añadirse una
factura por cliente y por día, un cliente no podrá tener dos facturas en un mismo día. Por ejemplo,
si insertamos este registró:
SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA)
VALUES (6900, 500, TO_DATE ('09/12/2013', 'DD-MM-YYYY'));
1 fila creada.
Intentaremos insertar un segundo registro con el mismo valor en CODIGOCLIENTE y en FECHA:
SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA)
VALUES (6910, 500, TO_DATE ('09/12/2013', 'DD-MM-YYYY'));
INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA)
*
ERROR en lÝnea 1:
ORA-00001: restricci¾n ·nica (SYS.IN_FACTURACION_CODCLI_FE) violada
Eliminar un índice.
SQL> DROP INDEX IN_FACTURACION_NOMBRECLIENTE;
═ndice borrado.
SQL> DROP INDEX IN_FACTURACION_CODCLI_FE;
═ndice borrado.
5) Manejo de sinónimos
 Proporciona nombre alternativos a objetos.
 Se facilita la referencia a objetos pertenecientes a otros usuarios.
 Reduce nombres largos de objetos.
 Nombre de sinónimo.
 Nombre de objeto al que lo asociamos.
 Usuario creador debe tener privilegio CREATE SYNONYM.
Sintaxs
CREATE [PUBLIC] SYNONYM synonym
FOR object;
Primero conectémonos con el usuario SYS.
SQL> connect sys/cibertec as sysdba
Conectado.
Seleccionamos la tabla CINE del esquema SCOTT desde el usuario SYS.
SQL> SELECT * FROM SCOTT.CINE;
ninguna fila seleccionada
Ahora creamos un sinónimo para la tabla CINE del esquema SCOTT.Y comprobamos haciendo un
SELECT a la tabla CINE
SQL> CREATE PUBLIC SYNONYM CINE FOR SCOTT.CINE;
Sin¾nimo creado.
SQL> SELECT * FROM CINE;
ninguna fila seleccionada
Eliminar un sinónimo.
SQL> DROP PUBLIC SYNONYM CINE;
Sin¾nimo borrado.

Más contenido relacionado

La actualidad más candente

Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)José Toro
5.1K vistas10 diapositivas
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracleluisguil
26.6K vistas166 diapositivas

La actualidad más candente(20)

Sesión12 - Trigger (Oracle)Sesión12 - Trigger (Oracle)
Sesión12 - Trigger (Oracle)
José Toro5.1K vistas
Curso Básico de Pl Sql OracleCurso Básico de Pl Sql Oracle
Curso Básico de Pl Sql Oracle
luisguil26.6K vistas
Introduccion a SQL Introduccion a SQL
Introduccion a SQL
Renatta Rodriguez1.5K vistas
VistasVistas
Vistas
dioselina12334 vistas
Forms 10g procedimientos y cursoresForms 10g procedimientos y cursores
Forms 10g procedimientos y cursores
Edwin Romero9.3K vistas
SQLSQL
SQL
Salvador Fernández Fernández699 vistas
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
guesta403644677 vistas
Utilizando DDL SQL oracle Z051 Cap 11Utilizando DDL SQL oracle Z051 Cap 11
Utilizando DDL SQL oracle Z051 Cap 11
Alexander Calderón1.5K vistas
Parte 08 my sqlParte 08 my sql
Parte 08 my sql
rosmeriramos601 vistas
Cap I PlsqlCap I Plsql
Cap I Plsql
Martin Coronel1.3K vistas
Consultas sqlConsultas sql
Consultas sql
Juan Carlos Prieto1K vistas
7.1.  procedimientos almacenados7.1.  procedimientos almacenados
7.1. procedimientos almacenados
Rigoberto Gonzalez Fuentes3.3K vistas
Comandos utilizados en sqlComandos utilizados en sql
Comandos utilizados en sql
Byron Eras48.8K vistas
Sentencias dml y ddlSentencias dml y ddl
Sentencias dml y ddl
kleberyauti823 vistas
Plsql y paquetesPlsql y paquetes
Plsql y paquetes
Fabián Alexander Moya4.3K vistas
Programación MySQL-EjerciciosProgramación MySQL-Ejercicios
Programación MySQL-Ejercicios
testgrupocomex51.8K vistas

Destacado(20)

Symfony Parte 2Symfony Parte 2
Symfony Parte 2
Rodrigo Miranda1.2K vistas
la embrilogiala embrilogia
la embrilogia
Sthefanny Pantoja294 vistas
Unitat 6.- Tipus de MercatUnitat 6.- Tipus de Mercat
Unitat 6.- Tipus de Mercat
iesriberadelsio1.7K vistas
Manual Netbeans Bases Datos2Manual Netbeans Bases Datos2
Manual Netbeans Bases Datos2
mtemarialuisa10.1K vistas
Pla ferroviariPla ferroviari
Pla ferroviari
primer_rodalies696 vistas
Imperialisme ColonialismeImperialisme Colonialisme
Imperialisme Colonialisme
jestiarte8K vistas
Java Concurrency IdiomsJava Concurrency Idioms
Java Concurrency Idioms
Alex Miller3.1K vistas
La gestion de projet AgileLa gestion de projet Agile
La gestion de projet Agile
Jonathan Roy1.8K vistas
Disruptor   tools in actionDisruptor   tools in action
Disruptor tools in action
Michael Barker4.7K vistas
Trial setTrial set
Trial set
Laxmi Eye Institute54.4K vistas
Intro to scaling DatabasesIntro to scaling Databases
Intro to scaling Databases
Heiko Seebach744 vistas
The 8051 assembly languageThe 8051 assembly language
The 8051 assembly language
hemant meena19.8K vistas
Conflict Resolution In KaiConflict Resolution In Kai
Conflict Resolution In Kai
Shunichi Shinohara2.4K vistas
Agile DevelopmentAgile Development
Agile Development
Dennis Degryse16.5K vistas

Similar a Sesión03 - Creación de objetos (Oracle)

ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdfJenny29068
3 vistas33 diapositivas
Comandos mysqlComandos mysql
Comandos mysqlMartin Soria
88 vistas13 diapositivas
Manual practico SQLManual practico SQL
Manual practico SQLAna Aguirre
340 vistas33 diapositivas
Manual practico SQLManual practico SQL
Manual practico SQLFreddy Poma Inga
16 vistas33 diapositivas

Similar a Sesión03 - Creación de objetos (Oracle)(20)

1 lab-2 -tablas-y-restricciones1 lab-2 -tablas-y-restricciones
1 lab-2 -tablas-y-restricciones
Jhonatan Paul Urbina Tolenino341 vistas
ManualPracticoSQL.pdfManualPracticoSQL.pdf
ManualPracticoSQL.pdf
Jenny290683 vistas
Comandos mysqlComandos mysql
Comandos mysql
Martin Soria88 vistas
Manual practico SQLManual practico SQL
Manual practico SQL
Ana Aguirre340 vistas
Manual practico SQLManual practico SQL
Manual practico SQL
Freddy Poma Inga16 vistas
Manual practicosqlManual practicosql
Manual practicosql
Fiorella Alatrista103 vistas
Manual practico-sqlManual practico-sql
Manual practico-sql
Liz Castelan Hernandez394 vistas
Sentencias SqlSentencias Sql
Sentencias Sql
fer951654 vistas
comandos-mysql.pdfcomandos-mysql.pdf
comandos-mysql.pdf
GustavoRojasValdivia24 vistas
Tutorial sql serverTutorial sql server
Tutorial sql server
Yessenia Giraldo302 vistas
CONSULTA SQL ROMEROCONSULTA SQL ROMERO
CONSULTA SQL ROMERO
NANCY ROMERO484 vistas
210927124637-Manual MySQL.pdf210927124637-Manual MySQL.pdf
210927124637-Manual MySQL.pdf
GermnAurelioOrtizBal17 vistas
Manual MySQL.pdfManual MySQL.pdf
Manual MySQL.pdf
quesadah13 vistas
Introduccion ddlIntroduccion ddl
Introduccion ddl
usamn133 vistas
Tm13 introduccion al_sqlTm13 introduccion al_sql
Tm13 introduccion al_sql
Julio Pari668 vistas
Tema 3.2 SQL.pptTema 3.2 SQL.ppt
Tema 3.2 SQL.ppt
AdrianJesusCastro37 vistas
Tema 3.2 SQL.pptTema 3.2 SQL.ppt
Tema 3.2 SQL.ppt
Dennis Añasco6 vistas
Trabajando con sql (parte 1)Trabajando con sql (parte 1)
Trabajando con sql (parte 1)
Juan Vade564 vistas

Último(20)

PRUEBAS LIBRES CC2 Y 3.pdfPRUEBAS LIBRES CC2 Y 3.pdf
PRUEBAS LIBRES CC2 Y 3.pdf
itedaepanavalvillard60 vistas
Tema 7. Riesgos internos (1a parte).pdfTema 7. Riesgos internos (1a parte).pdf
Tema 7. Riesgos internos (1a parte).pdf
IES Vicent Andres Estelles53 vistas
Contenidos y PDA 2° Grado.docxContenidos y PDA 2° Grado.docx
Contenidos y PDA 2° Grado.docx
Norberto Millán Muñoz49 vistas
UNIDAD 2.pdfUNIDAD 2.pdf
UNIDAD 2.pdf
GraceValeriaGuevaraN1.2K vistas
Gestion del Talento Humano  GTH1 Ccesa007.pdfGestion del Talento Humano  GTH1 Ccesa007.pdf
Gestion del Talento Humano GTH1 Ccesa007.pdf
Demetrio Ccesa Rayme24 vistas
Contenidos y PDA 3°.docxContenidos y PDA 3°.docx
Contenidos y PDA 3°.docx
Norberto Millán Muñoz55 vistas
Plan analítico en la NEM (2).pptxPlan analítico en la NEM (2).pptx
Plan analítico en la NEM (2).pptx
Norberto Millán Muñoz179 vistas
Misión en favor de los necesitados.pdfMisión en favor de los necesitados.pdf
Misión en favor de los necesitados.pdf
Alejandrino Halire Ccahuana56 vistas
2023 - Cuarto Encuentro - Sociedad y Videojuegos  2023 - Cuarto Encuentro - Sociedad y Videojuegos
2023 - Cuarto Encuentro - Sociedad y Videojuegos
Maestría en Comunicación Digital Interactiva - UNR101 vistas
Contenidos y PDA 6° Grado.docxContenidos y PDA 6° Grado.docx
Contenidos y PDA 6° Grado.docx
Norberto Millán Muñoz49 vistas

Sesión03 - Creación de objetos (Oracle)

  • 1. /* Sesión03 – Creación de Objetos Estudiante: José Luis Toro Alcarraz Curso: Base de Datos Avanzado II Correo:i201010865@cibertec.edu.pe */ Objetivo de la sesión. Describir algunos objetos de la base de datos y sus usos. Crear, mantener y usar tablas, índices, constraints, secuencias y sinónimos. 1) Manejo de tablas. (Ver sesión anterior) 2) Manejo de constraints. 3) Manejo de secuencias. 4) Manejo de índices. 5) Manejo de sinónimos. 2) Manejo de constraints.       Fuerzan las reglas a nivel de tabla. Evitan la eliminación de una tabla o de sus registros si hay dependencias. Si no se asigna un nombre a un constraints Oracle Server genera un nombre con el formato SYS_Cn. Un constraint se puede crear al mismo tiempo que se crea la tabla o bien una vez creada la tabla. Se pueden definir a nivel de columna o de tabla. Los constrtaints se pueden visualizar en el diccionario de datos. Sentencias CREATE TABLE [schema.] table (column datatype [DEFAULT expr] [column_constraint], Utilice la sentence ALTER TABLE para:  Agregar o borrar una restricción, sin modificar su estructura.  Activar o desactivar restricciones.  Agregar una restricción NOT NULL agregando la cláusula MODIFY. Desactivar un constraint ALTER TABLE table DISABLE CONSTRAINT nom_constraint Tipos de constraints NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK ALTER TABLE table ADD CONSTRAINT nom_constraint FOREING KEY(column) REFERENCES table_dest (column); ALTER TABLE emp DROP CONSTRAINT emp_manager_fk; ALTER TABLE departamento DROP PRIMARY KEY CASCADE; Activar un constraint ALTER TABLE table ENABLE CONSTRAINT nom_constraint
  • 2. Ejemplo1: Cree la tabla CINE y verifique que los campos NOMBRE y DIRECCION no sean nulos. SQL> CREATE TABLE CINE ( CODCINE NUMBER (4), NOMBRE VARCHAR2 (50) CONSTRAINT NN_CINE_NOMBRE NOT NULL, DIRECCION VARCHAR2 (100) NOT NULL, CAPACIDAD NUMBER (4), FECHAINAUG DATE ); Tabla creada. Muestra la estructura de tabla CINE SQL> DESC CINE; Nombre ┐Nulo? Tipo ----------------------------------------- -------- ---------------------------CODCINE NOMBRE DIRECCION CAPACIDAD FECHAINAUG NOT NULL NOT NULL NUMBER(4) VARCHAR2(50) VARCHAR2(100) NUMBER(4) DATE Muestra los CONSTRAINTS de la tabla CINE. SQL> SELECT CONSTRAINT_NAME, TABLE_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'CINE'; CONSTRAINT_NAME TABLE_NAME ------------------------------ -----------------------------NN_CINE_NOMBRE CINE SYS_C0011190 CINE Muestra los CONSTRAINTS de la tabla CINE y en que columna. SQL> SELECT CONSTRAINT_NAME NOMBRE,TABLE_NAME TABLA, SUBSTR(COLUMN_NAME,1,255)COLUMNA FROM ALL_CONS_COLUMNS WHERE TABLE_NAME = 'CINE'; NOMBRE TABLA COLUMNA ------------------------------ ------------------------------ ---------------------------------SYS_C0011190 CINE DIRECCION NN_CINE_NOMBRE CINE NOMBRE Eliminar la tabla CINE. SQL> DROP TABLE CINE;
  • 3. Tabla borrada. Ejemplo2: Creamos nuevamente la tabla CINE y verificamos que los campos NOMBRE Y DIRECCION sean únicos. SQL> CREATE TABLE CINE ( CODCINE NUMBER (4), NOMBRE VARCHAR2 (50) CONSTRAINT UK_NOMBRE UNIQUE, DIRECCION VARCHAR2 (100) UNIQUE, CAPACIDAD NUMBER (6), FECHAINAUG DATE ); Tabla creada. Eliminar la tabla CINE. SQL> DROP TABLE CINE; Tabla borrada. Creamos la tabla CINE con su llave primaria y verifique que el valor de la columna NOMBRE sea único. SQL> CREATE TABLE CINE ( CODCINE NUMBER (4) CONSTRAINT PK_CINE PRIMARY KEY, NOMBRE VARCHAR2 (50) CONSTRAINT UK_NOMBRE UNIQUE, DIRECCION VARCHAR2 (100), CAPACIDAD NUMBER (6), FECHAINAUG DATE ); Tabla creada. Creamos la tabla SALA con su llave primaria y referenciamos a la tabla CINE. SQL> CREATE TABLE SALA ( CODSALA NUMBER (4), CODCINE NUMBER (4), NOMBRE VARCHAR2 (20), CAPACIDAD NUMBER (6), CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA), CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE) REFERENCES CINE(CODCINE) );
  • 4. Tabla creada. Muestra los CONSTRAINTS de la tabla SALA y en que columna. SQL> SELECT CONSTRAINT_NAME NOMBRE,TABLE_NAME TABLA, SUBSTR(COLUMN_NAME,1,255)COLUMNA FROM ALL_CONS_COLUMNS WHERE TABLE_NAME = 'SALA'; NOMBRE TABLA COLUMNA ------------------------------ ------------------------------ ---------------------------------FK_CODCINE SALA CODCINE PK_CODSALA SALA Elimin Eliminamos la tabla SALA ar la tabla SALA. SQL> DROP TABLE SALA; CODSALA Tabla borrada. Ejemplo3: Creamos la tabla SALA aplicando el CONSTRAINT CHECK en el campo capacidad, el CONSTRAINT PRIMARY KEY al campo CODSALA y el CONSTRAINT FOREIGN KEY al campo CODCINE. SQL> CREATE TABLE SALA ( CODSALA NUMBER (4), CODCINE NUMBER (4), NOMBRE VARCHAR2 (20), CAPACIDAD NUMBER (6) CONSTRAINT CK_CAPACIDAD CHECK (CAPACIDAD>0), CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA), CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE) REFERENCES CINE(CODCINE) ); Tabla creada. Eliminamos la tabla CINE y SALA. SQL> DROP TABLE SALA; Tabla borrada. SQL> DROP TABLE CINE; Tabla borrada. Ejemplo4: Creamos la tabla CINE para luego alterar la tabla agregando restricciones.
  • 5. SQL> CREATE TABLE CINE ( CODCINE NUMBER (4), NOMBRE VARCHAR2 (50), DIRECCION VARCHAR2 (100), CAPACIDAD NUMBER (6), FECHAINAUG DATE ); Tabla creada. Modificamos la tabla CINE agregándole un PRIMARY KEY al campo CODCINE y un UNIQUE al campo nombre. SQL> ALTER TABLE CINE ADD CONSTRAINT PK_CODCINE PRIMARY KEY (CODCINE); Tabla modificada. SQL> ALTER TABLE CINE ADD CONSTRAINT UK_NOMBRE UNIQUE (NOMBRE); Tabla modificada. Ejemplo5: Creamos la tabla SALA para luego alterar la tabla agregando restricciones. SQL> CREATE TABLE SALA ( CODSALA NUMBER (4), CODCINE NUMBER (4), NOMBRE VARCHAR2 (20), CAPACIDAD NUMBER (6) ); Tabla creada Modificamos la tabla SALA agregando un PRIMARY KEY a CODSALA, un FOREIGN KEY a CODCINE, un CHECK a CAPACIDAD y un NOT NULL a NOMBRE. SQL> ALTER TABLE SALA ADD CONSTRAINT PK_CODSALA PRIMARY KEY (CODSALA); Tabla modificada. SQL> ALTER TABLE SALA ADD CONSTRAINT FK_CODCINE FOREIGN KEY (CODCINE) REFERENCES CINE (CODCINE); Tabla modificada.
  • 6. SQL> ALTER TABLE SALA ADD CONSTRAINT CK_CAPACIDAD CHECK (CAPACIDAD>0); Tabla modificada SQL> ALTER TABLE SALA MODIFY (NOMBRE VARCHAR2 (20) CONSTRAINT NN_NOMBRE NOT NULL); Tabla modificada 3) Manejo de secuencias Primero estar seguros que estamos conectado con el usuario scott/tiger. SQL> connect scott/tiger Conectado. NEXTVAL: Genera una nueva secuencia. CURRVAL: Obtiene el ultimo valor de la secuencia. DUAL: Tabla auxiliar de Oracle que permite ejecutar este tipo de secuencias sin necesidad de usar la base de datos. Ejemplo1: Creamos una secuencia cuyo valor con que inicia sea 1 y el incremento sea 2. SQL> CREATE SEQUENCE MISECUENCIA START WITH 1 INCREMENT BY 2; Secuencia creada. Luego comprobamos generando una nueva secuencia una y otra vez. SQL> SELECT MISECUENCIA.NEXTVAL FROM DUAL; NEXTVAL ---------1 SQL> SELECT MISECUECNIA.NEXTVAL FROM DUAL; NEXTVAL ---------3 Ahora comprobamos cual fue el último valor de la secuencia. SQL> SELECT MISECUENCIA.CURRVAL FROM DUAL;
  • 7. CURRVAL ---------3 Ejemplo2: Insertar un registro a la tabla departamento del esquema Scott generando el código de departamento mediante una secuencia. Muestra la información de la tabla DEPARTAMENTO del esquema SCOTT SQL> SELECT * FROM DEPT; DEPTNO --------------10 20 30 40 DNAME --------------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON Creamos una secuencia para la tabla DEPT. SQL> CREATE SEQUENCE SEQ_DEPT START WITH 50 INCREMENT BY 10; Secuencia creada. Insertamos un registro a la tabla DEPT. SQL> INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (SEQ_DEPT.NEXTVAL, 'SISTEMA','LIMA'); 1 fila creada. Selecciona todos los campos de la tabla DEPT. Y podremos observar que hemos generado una secuencia. SQL> SELECT * FROM DEPT; DEPTNO DNAME LOC ---------- -------------- ------------10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 SISTEMA LIMA Ahora ejecuta la siguiente sentencia ¿qué ocurrirá? SQL> SELECT SEQ_DEPT.NEXTVAL FROM DUAL;
  • 8. NEXTVAL ---------60 SQL> INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (SEQ_DEPT.NEXTVAL, 'RRHH','LINCE'); 1 fila creada. Nuevamente seleccionamos la tabla DEPT. SQL> SELECT * FROM DEPT; DEPTNO DNAME LOC ---------- -------------- ------------10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 50 SISTEMA LIMA 70 RRHH LINCE 6 filas seleccionadas. Eliminar una secuencia.. SQL> DROP SEQUENCE SEQ_DEPT; Secuencia borrada. 4) Manejo de índices Cuando se debe crear un índice.      Debe crear un índice si: Una columna contiene un amplio rango de valores. Una columna contiene un gran número de valores nulos. Una o más columnas se utilizan juntas frecuentemente en una clausula WHERE o en una condición de unión. La tabla es grande y se espera que la mayoría de las consultas recuperen del 10 por ciento de las filas. Cuando no se debe crear un índice.    La tabla es pequeña. Las columnas no se suelen utilizar como condición en la consulta. Se espera que la mayoría de las consultas recuperen más del 10 por ciento de las filas de la tabla.
  • 9.   La tabla se actualiza frecuentemente. Se hace referencia a las columnas indexadas como parte de una expresión. Índices basados en funciones.  Un índice basado en función es un índice basado en expresiones.  La expresión de índice se crea desde columnas de tabla, constantes, funciones SQL y funciones definidas por el usuario Ejemplo: CREATE INDEX upper_dept_name_idx ON departamento (UPPER(department_name)); Sintaxis CREATE INDEX index ON table (column[, column] …); Ejemplo1: Estamos indicando a Oracle que cree la tabla "FACTURACION", con el campo "CODIGO" y que éste sea clave primaria, por lo que creará un índice automáticamente para este campo. Esta es una forma de crear índices, en la creación de la tabla: SQL> CREATE TABLE FACTURACION ( CODIGO NUMBER (10) NOT NULL, FECHA DATE DEFAULT SYSDATE, CODIGOCLIENTE NUMBER (10), NOMBRECLIENTE VARCHAR2 (100), OBSERVACION VARCHAR2 (2000), CONSTRAINT PK_FACTURACION_CODIGO PRIMARY KEY (CODIGO) ) TABLESPACE USERS; Tabla creada. Tras crear la tabla insertaremos algunos registros SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, NOMBRECLIENTE) VALUES (1, 50, 'AJPDSOFT'); 1 fila creada. Ejemplo2: Crear un índice al campo NOMBRECLIENTE de la tabla FACTURACION. SQL> CREATE INDEX IN_FACTURACION_NOMBRECLIENTE ON FACTURACION (NOMBRECLIENTE); ═ndice creado. Para ver el índice creado podemos ejecutar la siguiente consulta SQL> SELECT INDEX_NAME, TABLE_NAME FROM USER_INDEXES WHERE TABLE_NAME = 'FACTURACION';
  • 10. INDEX_NAME TABLE_NAME ------------------------------ -----------------------------PK_FACTURACION_CODIGO FACTURACION IN_FACTURACION_NOMBRECLIENTE FACTURACION Para ver el índice creado podemos ejecutar también una consulta mas especifica. SQL> SELECT INDEX_NAME NOMBRE, INDEX_TYPE TIPO, TABLE_NAME TABLA, TABLESPACE_NAME TABLESPACE, SECONDARY SECUNDARIO FROM ALL_INDEXES WHERE TABLE_NAME = 'FACTURACION'; NOMBRE TIPO TABLA TABLESPACE S ------------------------------ --------------------------- ------------------------------ ------------------------------ -PK_FACTURACION_CODIGO NORMAL FACTURACION USERS N IN_FACTURACION_NOMBRECLIENTE NORMAL FACTURACION SYSTEM N Ejemplo3: Para añadir un índice de tipo UNIQUE, obligando a que los valores del campo indexado sean unívocos, es decir no se puedan repetir en el campo de la tabla. SQL> CREATE UNIQUE INDEX IN_FACTURACION_CODCLI_FE ON FACTURACION (CODIGOCLIENTE, FECHA); ═ndice creado. De esta forma Oracle no permitirá que haya dos registros en la tabla "FACTURACION" con el mismo valor en los campos "CODIGOCLIENTE" y "FECHA", es decir, sólo podrá añadirse una factura por cliente y por día, un cliente no podrá tener dos facturas en un mismo día. Por ejemplo, si insertamos este registró: SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA) VALUES (6900, 500, TO_DATE ('09/12/2013', 'DD-MM-YYYY')); 1 fila creada. Intentaremos insertar un segundo registro con el mismo valor en CODIGOCLIENTE y en FECHA: SQL> INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA) VALUES (6910, 500, TO_DATE ('09/12/2013', 'DD-MM-YYYY')); INSERT INTO FACTURACION (CODIGO, CODIGOCLIENTE, FECHA) * ERROR en lÝnea 1: ORA-00001: restricci¾n ·nica (SYS.IN_FACTURACION_CODCLI_FE) violada Eliminar un índice. SQL> DROP INDEX IN_FACTURACION_NOMBRECLIENTE;
  • 11. ═ndice borrado. SQL> DROP INDEX IN_FACTURACION_CODCLI_FE; ═ndice borrado. 5) Manejo de sinónimos  Proporciona nombre alternativos a objetos.  Se facilita la referencia a objetos pertenecientes a otros usuarios.  Reduce nombres largos de objetos.  Nombre de sinónimo.  Nombre de objeto al que lo asociamos.  Usuario creador debe tener privilegio CREATE SYNONYM. Sintaxs CREATE [PUBLIC] SYNONYM synonym FOR object; Primero conectémonos con el usuario SYS. SQL> connect sys/cibertec as sysdba Conectado. Seleccionamos la tabla CINE del esquema SCOTT desde el usuario SYS. SQL> SELECT * FROM SCOTT.CINE; ninguna fila seleccionada Ahora creamos un sinónimo para la tabla CINE del esquema SCOTT.Y comprobamos haciendo un SELECT a la tabla CINE SQL> CREATE PUBLIC SYNONYM CINE FOR SCOTT.CINE; Sin¾nimo creado. SQL> SELECT * FROM CINE; ninguna fila seleccionada Eliminar un sinónimo. SQL> DROP PUBLIC SYNONYM CINE; Sin¾nimo borrado.