BASE DE DATOS
Creación del Esquema de Datos
Al terminar esta lección, estarás capacitadopara: Describir cada sentencia DDL. Crear , Modificar y Borrar Tablas. Crear Restricciones. Crear Índices. Crear y Usar Secuencias. Usar la información del Diccionario de
datos.
Tablas
Su nombre va de 1 a 30 caracteres. Su propietario(Owner), es quien la crea Para que otro usuario tenga acceso se debe entregar
privilegios.
GRANT {object_priv|ALL} 1 [{nombre columnas}0]ON objeto TO {usuario|rol}1|PUBLICWITH GRANT OPTION;
REVOKE {privilegio |ALL} [{nombre columnas}0]ON objeto FROM {usuario|role } 1 |PUBLIC[CASCADE CONSTRAINTS]WITH GRANT OPTION;
Tablas
Cuando otro usuario la use debe referenciarla como:owner.nombre_tabla
Máximo de columnas 254.
Columnas
Tipo de dato y su tamaño
CHAR Máximo de 255. Por defecto 1.NUMBER Máximo de 105 dígitos. Por defecto 44.INTEGER Numérico sin decimal. Por defecto 38.DATE Hasta el 31 de diciembre de 4712.LONG Tipo caracter con tamaño variable hasta 65535 bytes.
Permite una sola columna LONG por tabla.No se puede usar en subconsultas, funciones o índices.
RAW dato en binario puro (imágenes y sonido) con un ancho máximo de 255.
LONGRAW Igual que LONG, pero para almacenar datos en binario puro.
Columnas
Su nombre va de 1 a 30 caracteres.
valor obligatorio: NOT NULL.
Rango de valores: Checkchequear que el columna> valor o se encuentre entre dos valores.
Clave Primaria: valor único y no nulo (NOT NULL). Clave Externa: Columna de la tabla que hace
referencia a un valor que tiene que estar registrado enotra tabla.
CREATE TABLE nombre tabla (nombre col tipo de datos [default expresion][NOT NULL] [PRIMARY KEY USING INDEX (CREATE INDEX nombre archivo indice ON nombre tabla (nomble col))][table_constraint][table_ref_constraint],
);
Ejemplo:
CREATE TABLE clientes(codigo integer NOT NULL PRIMARY KEY,fecha date NOT NULL,nombre char(30) NOT NULL,telefono char(20) NOT NULL,direccion char(100),anotacion LONG);
TablasEjemplo:
CREATE TABLE clientes(codigo INTEGER NOT NULL,nombre CHAR(30) NOT NULL,Direccion CHAR(100),anotacion LONG,PRIMARY KEY (codigo));
CREATE TABLE ventas(codigo INTEGER NOT NULL,fecha DATE NOT NULL,articulo CHAR(10),valor NUMBER(6,2) NOT NULL CHECK (valor>0),FOREIGN KEY (codigo) REFERENCES clientes(codigo));
ALTER TABLE nombre tablaADD ( column datatype [DEFAULT expr ][, column datatype ]...);
ALTER TABLE nombre tablaMODIFY (column data type [DEFAULT expr ][, column datatype]...);
ALTER TABLE nombre tablaDROP (column );
Ejemplo:
ALTER TABLE empleadoADD (estado_civil VARCHAR2(9) check
(estado_civil=‘casada(o) or ’ estado_civil=‘casada(o)));
ALTER TABLE empleadoMODIFY (apell_emp VARCHAR2(35));
create sequence NOMBRESECUENCIA
start with VALORENTERO
increment by VALOR ENTERO + o -
maxvalue VALOR ENTERO
minvalue VALOR ENTERO, si se omite el valor es 1
cycle | nocycle; al llegar al maxvalue se reinicia, defecto es nocycle.
SintaxisSEQUENCE
create sequence nro_oc;
La secuencia nro_oc,
se inicia en 1
se incrementa en 1 y
su valor máximo es
999999999999999999999999
nocycle;
Creando Sequence
create sequence sec_nro_libro start with 1 incrementby 1maxvalue 99999 minvalue 1;
create sequence sec_nro_docto increment by 5 cycle;
create sequence sec_nro_factura increment by 1 minvalue 5 nocycle;
Creando Sequence
Dado que la secuencia (sequence) es una tabla, para obtener los datos se usa la sentencia select y se usan las pseudo columnas :
nexval : representa el valor siguientecurrval: representa el valor actual
Forma de obtención de los valores:Nro_oc.nexval oNro_oc.currval o select nexval from Nro_oc oselect currval from Nro_oc
UsandoSEQUENCE
Los valores nexval y currval pueden ser usados en las sentencias insert y update
Ejemplo:
insert OC values (Nro_oc.currval, fecha,…..)
inserta el valor actual de la secuencia
insert OC values (Nro_oc.nexval, fecha,…..)
inserta el siguiente valor de la secuencia
UsandoSEQUENCE
DROP SEQUENCE NOMBRE;
borra la tabla sequence
select * from all_sequences;
muetra todas las secuencias existentes
select * from all_objects
muetra todos los objetos de la BD
BorrarSEQUENCE y Otros
Nombre de la tabla Descripción
ACCESSIBLE_COLUMNS columns of all tables, views, and clusters
ACCESSIBLE_TABLES tables and views accessible to the user
AUDIT_ACTIONSmaps action type numbers to action typenames
ALL_INDEXES descriptions of indexes on accessible
ALL_SEQUENCES descriptions of the user's own sequences
ALL_TABLES description of tables accessible to the user.....
USER_TABLES descriptions of the user's own tables
USER_TAB_COLUMNScolumns of the user's tables, views, andclusters
USER_TAB_GRANTS grants on objects where the user is the owner,grantor, or grantee
CodigoRegion (PK)NombreRegion
NombreCortoRegion
Region
RutAcreedor (PK)NombreFantasia
RazonSocial Not nullCodigoGiroEmpresa (FK)
Nacionalidad (0:Nac, 1:Ext)FechaIngresoRegistro
FechaCaducidadRegistroIndicadorDefinitivo (0:Provisional,1:Definitivo)
CodigoActividad (FK)
AcreedorRutAcreedor (FK)(PK)
Sucursal (PK)TipoSucursal (0:Matriz, 1:Sucursal)
NombreSucursalDireccion
CodigoCiudad (FK)
SucursalAcreedor
CodigoCiudad (PK)NombreCiudad
CodigoPais (FK)CodigoProvincia
Ciudad
CodigoPais (PK)NombrePaisNacionalidadIndTlc (0:Sin
Tratado, 1:Con Tratado)
Pais
CodigoProvincia (PK)NombreProvincia
CodigoRegion (FK)
Provincia
CodigoGiro (PK)DecripcionGiro
Giros
Codigo (PK)DescripcionActividad
Actividad
Crear Esquema de modelo
Lenguaje PL/SQL
Tanto Procedimientos Almacenados como lafunciones son subprogramas en PL/SQL utilizadospara realizar tareas complejas y repetitivas
Son compilados y almacenados en la BD
Tanto las funciones como los SP reciben valoresdesde el medio exterior, es decir, parámetros deentrada.
Los parámetros pueden tener características de IN,OUT o INOUT.
La diferencia fundamental entre SP y funciones esque estás últimas retornan valores.
CREATE OR REPLACE PROCEDURE nombre[(parámetros [IN|OUT|INOUT] tipo de datos [{Default|:=}expresion][,…..])]IS|AS
declaraciones,…….Begin
sentencias……..SQL y PL/SQLEnd procedure;
CREATE OR REPLACE PROCEDURE EJEMPLO ()as
DECLAREv_date VARCHAR2(10);v_day NUMBER; v_month NUMBER; v_year NUMBER;
BEGIN v_date := '18/10/1975';pkg_javasp.splitDate( v_date v_day, v_month, v_year); dbms_output.put_line('-------------------------------------------');dbms_output.put_line('SPLIT DATE: '); dbms_output.put_line('-------------------------------------------'); dbms_output.put_line('DIA: ' || v_day); dbms_output.put_line('MES: ' || v_month);dbms_output.put_line('ANIO: ' || v_year);dbms_output.put_line('-------------------------------------------');
END;
Estructura de código PL/SQL
DECLARE
-- Las declaraciones son opcionales
BEGIN
-- El cuerpo del programa es necesario
EXCEPTION
-- Los manejadores de excepciones son opcionales
END;
Lenguaje PL/SQL
Control de flujo:
WHILE condición LOOP
SENTENCIAS;
END LOOP;
FOR variable IN valorinicial .. valorfinal LOOP
SENTENCIAS;END LOOP;
Lenguaje PL/SQL
Tipo de datos más comunes:
Float, integer, int,
numeric,real,
character, char, varchar2,string,
date, boolean,
number.
Lenguaje PL/SQL
Uso de sentencias DML en PL/SQL Clausula SELECT ... INTO para asignar el valor devuelto por SELECT a una variable.
El resultado de la expresión SELECT ... INTO debe ser una sola fila. Si el resultado es más de una fila se carga la excepción TOO_MANY_ROWS.
Estructura de registro con el atributo %ROWTYPE
Permite definir una estructura del tipo de datos de las columnas de la tabla.
Lenguaje PL/SQL
EXCEPCIONES (EXCEPTION)
Una excepción es una condición de error específica y un programa PL/SQL produce una excepción específica cuando detecta un error, pasando al control de manejo de excepciones del programa principal.
Oracle identifica cerca de 20 excepciones inclusive NO_DATA_FOUND y TOO_MANY_ROWS
Se puede manejar excepciones definidas por el usuario.
Lenguaje PL/SQL
Cursores
Es un área de trabajo para una sentencia SQL.
Permite definir un apuntador al resultado de una expresión SELECT de varias filas.
Se declara un objeto del tipo cursor con una expresión SELECT. Se abre el cursor con OPEN cursor.
Se extrae las filas del cursor con FETCH.
El objeto del tipo cursor maneja atributos como %FOUND, %NOTFOUND, %ISOPEN y %ROWCOUNT para el control y manejo del cursor.
Cierra el cursor con CLOSE cursor.
Lenguaje PL/SQL
FIN