Académique Documents
Professionnel Documents
Culture Documents
1. INTRODUCCIN
Instalacin
Utilizaremos la
revisin
Release 2 de
Oracle 10g.
Instalacin
3. INSTALACIN
Es necesario
tener permisos
de administrador en el
equipo donde
se va a instalar
Oracle 10g
Instalacin
Instalacin
Instalacin
Instalacin
El servidor de
Oracle deber poder
atender las
solicitudes en
dicho puerto,
o lo que es lo
mismo, deber
tenerlo abierto
si se utiliza un
firewall para
proteger la
red.
Instalacin
Instalacin
Instalacin
Instalacin
En un entorno
de produccin
es conveniente
utilizar contraseas distintas
para cada
cuenta administrativa.
11
Instalacin
Instalacin
13
2. ARQUITECTURA DE RED
10
Tablas
1. INTRODUCCIN
Tablas
Tablas
Tablas
2. CREAR TABLAS
tablas.
Tablas
Tablas
Si desea incluir
caracteres que
no aparecen
en el alfabeto
ingls u otros,
como espacios
en blanco,
delimite el
identificador
con comillas
dobles (").
Tablas
Tablas
Tablas
Para el caso del campo PESO permitiremos que ste tenga como
mximo 8 dgitos de los cuales 3 sern para la parte decimal del valor.
Finalmente, en el caso del campo PRECIO vemos cmo podemos
almacenar valores monetarios. Como se puede necesitar gran precisin
y los valores pueden ser muy grandes, se utiliza una precisin de 19
dgitos, de los cuales 4 sern para la parte decimal.
A continuacin se muestran algunos ejemplos:
Valor
123.89
123.89
123.89
123.89
123.89
123.89
Tipo de datos
NUMBER
NUMBER(3)
NUMBER(6, 2)
NUMBER(6, 1)
NUMBER(4, 2)
NUMBER(6, -2)
Se almacena como
123.89
124
123.89
123.9
Supera la precisin
100
Tablas
Los tipos de datos que empiezan por una n almacenan las cadenas
de caracteres con el formato o codicacin Unicode, lo que permite
representar prcticamente cualquier carcter de cualquier idioma.
Esto se consigue almacenando cada carcter como 2 bytes en
lugar de un byte, que es la forma de almacenamiento de los tres tipos
no Unicode.
En resumen: se pueden representar ms caracteres en Unicode
(adems de que se sabe con seguridad que el carcter se representar
siempre de la misma forma, independientemente de la conguracin
del servidor) pero tambin el nmero mximo de caracteres que puede
almacenar un campo Unicode es justamente la mitad que uno no
Unicode.
Aclarado esto, tenemos el tipo CHAR para representar texto de
longitud ja y el tipo VARCHAR2 para representar texto de longitud
variable.
En la tabla Productos puede ver dos campos de texto de longitud
variable. En la columna Tamao se indica el nmero mximo de
caracteres admitido.
Tambin puede ver un campo de tipo CLOB. Este tipo se utiliza
para almacenar grandes fragmentos de texto. VARCHAR2 admite un
mximo de 4000 caracteres, por lo que si necesita ms, deber utilizar
CLOB.
Por ejemplo, hemos utilizado CLOB como el tipo de datos del
campo DESCRIPCION de un producto.
10
Tablas
Se puede
utilizar el
tipo CHAR(1)
para representar valores
booleanos;
esto es, que
son o verdadero ('1') o falso
('0').
11
Tablas
stos son los principales tipos de datos que utilizar en las bases
de datos Oracle, aunque es necesario comentar tambin la posibilidad
de introducir datos XML.
Oracle incorpora un tipo de datos para almacenar informacin
en formato XML. Esto se podra hacer tambin mediante tipos de
texto, pero con un tipo especco para ello conseguimos mayor
funcionalidad.
En Oracle 10g podremos hacer que el servidor interprete y valide
los documentos XML de forma que se encargue de comprobar si estn
bien formados e incluso si son vlidos respecto a un esquema XSD
donde se especican los tipos de datos del documento XML y sus
restricciones. Todo esto, como algo propio de la base de datos.
Otros tipos de datos disponibles en Oracle 10g:
TIMESTAMP WITH TIMEZONE: es una variante del tipo
de datos TIMESTAMP en el que se incluye la zona horaria del
servidor.
12
Tablas
6. SECUENCIAS
13
Tablas
14
Relaciones
1. INTRODUCCIN
Relaciones
Aunque no es
obligatorio,
por claridad
le recomendamos que utilice
el mismo nombre en ambas
tablas. As,
si el campo
clave principal
de la tabla
Categorias es
IDCATEGORIA,
cree un nuevo
campo con
las mismas
caractersticas
y nombre en la
tabla Productos.
Relaciones
Ve cmo es
til que ambos
campos tengan
el mismo nombre? De esta
forma, es fcil
identificarlos.
Relaciones
Relaciones
Relaciones
Relaciones
Relaciones
Propiedades de tabla
1. VALORES PREDETERMINADOS
Propiedades de tabla
Propiedades de tabla
2. RESTRICCIONES CHECK
Check.
Propiedades de tabla
Propiedades de tabla
Si desea
deshabilitar
temporalmente
una restriccin
Check, active
el atributo
Desactivado.
Esto puede ser
necesario, por
ejemplo, cuando se importan
datos provenientes de otra
base de datos
donde la informacin puede
no respetar
la restriccin
establecida.
Propiedades de tabla
3. RESTRICCIONES UNIQUE
Propiedades de tabla
ndices
1. INTRODUCCIN
ndices
2. CREAR NDICES
ndices
ndices
ndices
ndices
3. OPCIONES DE NDICE
ndices
ndices
ndices
ndices
ndices
11
ndices
12
Si durante la
instalacin de
Oracle no se
estableci el
inicio automtico del serviocio ISQL*Plus,
puede iniciarlo
manualmente
con el comando isqlplussvc
-start 5560,
donde se ha
utilizado el
puerto predeterminado
5560.
Si el nombre
del campo
o expresin
que utiliza
en el cdigo
SQL incluye
espacios en
blanco, entonces encirrelo
entre comillas
dobles. En otro
caso, esto no
es necesario,
pero tampoco
es incorrecto.
de
til.
3. SELECCIONES COMPLEJAS
SELECT.
datos.
Debe agrupar los resultados por cada uno de los campos indicados
en la clusula SELECT, excepto por los correspondientes al uso de las
funciones agregadas.
11
Le recomendamos que
obtenga la
gua de SQL
y de PL/SQL,
ya que es la
mejor referencia de ambos
lenguajes en
Oracle.
12
3. SUBCONSULTAS
No olvide
incluir la subconsulta entre
parntesis.
4. EL OPERADOR EXISTS
2. LA SENTENCIA INSERT
sencillas.
3. LA SENTENCIA UPDATE
4. LA SENTENCIA DELETE
5. LA TABLA DUAL
Otro ejemplo:
SELECT 'El usuario ' || USER || 'ha accedido al sistema.' AS LOGIN
FROM Dual;
6. NDICES Y CONSULTAS
Vistas
1. INTRODUCCIN
Vistas
Vistas
Los usuarios que utilicen esta vista no slo ven nicamente los
detalles de los clientes que nosotros queremos poner a su disposicin,
sino tambin aquellos clientes que cumplen con el ltro establecido.
De esta forma no necesitan tener acceso a la tabla Clientes para
obtener la informacin que realmente necesitan.
Vistas
Vistas
Es importante saber que una vista no puede ser editada una vez
ha sido creada sino que es necesario crearla de nuevo. Oracle Database
Control nos permite editar la vista realizando el proceso anteriormente
mencionado, ya que, al editarla, realmente estar crendola de nuevo
con la opcin Sustituir Vista si Existe.
Veamos cmo podramos utilizar esta vista como si se tratara de
una tabla ms. Para ello, utilizaremos iSQL*Plus.
Vistas
4. ACTUALIZACIN DE VISTAS
Vistas
Vistas
Vistas
5. VISTAS MATERIALIZADAS
Vistas
Al eliminar
una vista materializada que
se crea a partir
de una tabla
existente, esta
tabla "vuelve
a recuperar su
identidad como
tabla".
Vistas
11
Despus de
instalar Oracle
Sql Developer,
es una buena
idea crear un
acceso directo
en el escritorio al archivo
sqldeveloper.
exe, ya que no
aparece en el
men de Inicio
de Windows.
2. UN PROCEDIMIENTO SIMPLE
Utilice la
convencin
que desee a
la hora de
nombrar los
procedimentos
almacenados, pero sea
consistente y
sgala siempre.
Por ejemplo, nosotros
utilizaremos
el prefijo usp
(user stored
procedure).
Debe declarar
cada variable
en una lnea
distinta.
uspListarClientes:
3. PARMETROS
BEGIN
INSERT INTO Productos(IdProducto, Nombre, Precio,
Descripcion, ImageURL, Peso, IdCategoria)
VALUES (PRODUCTOS_SEQ.NEXTVAL, pnombre, pprecio,
pdescripcion, pimageurl, ppeso, pcategoria);
SELECT PRODUCTOS_SEQ.CURRVAL INTO nuevoproducto FROM Dual;
END USPNUEVOPRODUCTO;
En el caso
de los procedimientos o
funciones, no
debe escribir
la palabra
DECLARE en
su seccin de
declaracin.
10
11
Try
ConTienda.Open()
comando.ExecuteNonQuery()
lblMensaje.Text = "Producto nmero " & pNuevoProducto.Value
& " insertado correctamente."
.....
Catch ex As Exception
.....
Finally
ConTienda.Close()
End Try
End Sub
12
CarritoCompra:
El problema no est en la estructura de decisin IF - THEN ELSE sino en la sentencia SELECT INTO, donde toman valores las
variables existeProducto y cantidadAnterior.
Como el producto comprado no aparece en el carrito de la compra
del usuario, entonces tenemos que la consulta SELECT... INTO
Cantidad no va a producir ningn resultado sino una excepcin o
error.
La sentencia SELECT ... INTO tiene que proporcionar siempre
una nica la en su resultado. Si no obtiene ninguna, produce un error;
y si obtiene ms de una, tambin.
Podemos solucionar este problema aqu utilizando otra funcin
de agregacin. Por ejemplo, en lugar de solicitar la cantidad comprada
del producto, podramos utilizar la suma de dicha cantidad. En nuestro
caso, debera ser la misma. En este caso, ya no es necesario utilizar la
clusula GROUP BY:
SELECT COUNT(IdProducto), SUM(Cantidad) INTO
existeProducto, cantidadAnterior
FROM CarritoCompra
WHERE IdProducto = producto AND IdCarrito = carrito;
La estructura
sigue:
Si no se establece correctamente la
condicin de
salida, podra
crearse un
bucle infinito,
que nunca
terminara.
LOOP
FETCH lineas INTO producto, cantidadComprada,
precioProducto;
EXIT WHEN lineas%NOTFOUND OR lineas%NOTFOUND IS NULL;
INSERT INTO LineasOrden (IdOrden, IdProducto,
Cantidad, Subtotal)
VALUES (orden, producto, cantidadComprada,
cantidadComprada * precioProducto);
END LOOP;
10
REVERSE
LmiteInferior..LmiteSuperior
4. CURSORES IMPLCITOS
11
13
2. EXCEPCIONES
de datos.
ACCESS_INTO_NULL
COLLECTION_IS_NULL
LOGIN_DENIED
NOT_LOGGED_ON
PROGRAM_ERROR
ROWTYPE_MISMATCH
SELF_IS_NULL
SYS_INVALID_ROWID
create or replace
PROCEDURE
USPAGREGARACARRITO
( carrito IN VARCHAR2
, producto IN NUMBER
, cantidadComprada IN NUMBER
, fecha IN DATE
) AS
existeProducto NUMBER(1);
cantidadAnterior NUMBER(4);
BEGIN
BEGIN
SELECT COUNT(IdProducto), Cantidad INTO
existeProducto, cantidadAnterior
FROM CarritoCompra
WHERE IdProducto = producto AND IdCarrito = carrito
GROUP BY Cantidad;
EXCEPTION
WHEN NO_DATA_FOUND THEN
cantidadAnterior := 0;
END;
IF (existeProducto = 1) THEN
UPDATE CarritoCompra
SET Cantidad = cantidadAnterior + cantidadComprada,
FechaRegistro = fecha
WHERE IdCarrito = carrito AND
IdProducto = producto;
ELSE
INSERT INTO CarritoCompra (IdRegistro, IdCarrito,
IdProducto, Cantidad, FechaRegistro)
VALUES (CARRITO_SEQ.NEXTVAL, carrito, producto,
cantidadComprada, fecha);
END IF;
END USPAGREGARACARRITO;
3. TRANSACCIONES
11
Utilice siempre
los comandos
COMMIT y ROLLBACK en un
procedimiento
almacenado,
ya que si el
procedimiento finaliza
porque se ha
producido una
excepcin no
manejada, las
transacciones
iniciadas no se
cancelan.
12
13
14
15
Funciones y paquetes
1. INTRODUCCIN
2. CREAR FUNCIONES
Funciones y paquetes
Funciones y paquetes
Si la funcin
no dispone de
otros parmetros aparte del
valor devuelto, no utilice
parntesis al
definirla ni al
utilizarla.
Funciones y paquetes
Si usted sabe con certeza que los valores que est comparando
tienen el componente predeterminado de la hora (00:00:00), entonces
podr compararlos pensando exclusivamente en la diferencia en das;
si no, puede encontrar sorpresas.
Funciones y paquetes
3. UTILIZAR FUNCIONES
Funciones y paquetes
4. PAQUETES
Funciones y paquetes
Funciones y paquetes
CREATE OR REPLACE
PACKAGE PCKORDENES AS
caducidad CONSTANT NUMBER(2, 0) := 15;
PROCEDURE uspNuevaOrden (pcliente IN NUMBER,
pfechaOrden IN DATE, pfechaEnvio IN DATE DEFAULT NULL,
pidOrden OUT NUMBER);
PROCEDURE uspDetalleOrden (orden IN NUMBER,
carrito IN VARCHAR2);
FUNCTION fduOrdenCaducada (pFechaOrden IN DATE)
RETURN NUMBER;
END PCKORDENES;
Funciones y paquetes
CREATE OR REPLACE
PACKAGE BODY PCKORDENES AS
PROCEDURE uspNuevaOrden (pcliente IN NUMBER,
pfechaOrden IN DATE, pfechaEnvio IN DATE DEFAULT NULL,
pidOrden OUT NUMBER) AS
BEGIN
INSERT INTO Ordenes (IdOrden, IdCliente, FechaOrden,
FechaEnvio, Total)
VALUES (ORDENES_SEQ.NEXTVAL, pcliente, pfechaOrden,
pfechaEnvio, 0);
SELECT ORDENES_SEQ.CURRVAL INTO pidOrden FROM Dual;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Se ha producido el error'
|| SQLCODE || ': ' || SQLERRM);
END uspNuevaOrden;
PROCEDURE uspDetalleOrden (orden IN NUMBER,
carrito IN VARCHAR2) AS
BEGIN
INSERT INTO LineasOrden (IdOrden, IdProducto,
Cantidad, Subtotal)
SELECT orden, cc.IdProducto, cc.Cantidad,
cc.Cantidad * p.Precio
FROM CarritoCompra cc INNER JOIN Productos p
ON cc.IdProducto = p.IdProducto
WHERE cc.IdCarrito = carrito;
-- Actualizar total de la orden
UPDATE Ordenes
Funciones y paquetes
10
Desencadenadores (triggers)
1. INTRODUCCIN
Desencadenadores (triggers)
Desencadenadores (triggers)
Desencadenadores (triggers)
Desencadenadores (triggers)
Desencadenadores (triggers)
OrdenesCaducadas.
Desencadenadores (triggers)
Desencadenadores (triggers)
Desencadenadores (triggers)
IF (INSERTING) THEN
-- Se trata de una operacin INSERT
nuevo := 1;
ELSE
-- Se trata de una operacin UPDATE del campo Precio
nuevo := 0;
END IF;
INSERT INTO HistoriaPreciosProductos(IdProducto,
Precio, Fecha, PrimerPrecio)
SELECT :new.IdProducto, :new.Precio, SYSDATE, nuevo
FROM Dual;
END;
Utilice
INSERTING,
UPDATING o
DELETING en
funcin del
tipo de operacin que quiera saber si se
ha realizado.
HistoriaPreciosProductos.
Desencadenadores (triggers)
4. DESENCADENADORES INSTEAD OF
Desencadenadores (triggers)
11
Desencadenadores (triggers)
12
Desencadenadores (triggers)
Para que un
desencadenador no se
ejecute pero
tampoco sea
eliminado, elija el comando
Disable de su
men contextual. Ms tarde
podr habilitarlo de nuevo
con Enable.
13
2. JDEVELOPER
if (resultado == null)
return 2;
if (resultado.matches())
return 1;
else
return 0;
1.- Haga clic con el botn derecho del ratn en el proyecto y elija
New.
2.- Haga clic en el signo + de la categora General.
3.- Elija Deployment Proles.
4.- Seleccione Loadjava and Java Stored Procedures en el
panel de la derecha y acepte.
4. UTILIZAR LA FUNCIN
3. MEMORIA Y PROCESOS
11
4. PARMETROS DE INICIALIZACIN
La principal
ventaja de
utilizar un
archivo SPFILE
es que los
cambios efectuados durante
el funcionamiento de la
instancia quedan guardados
y se aplican
en posteriores
inicios de la
misma. Esto no
ocurre con un
archivo PFILE,
que es de slo
lectura durante el funcionamiento del
servidor.
13
14
particular.
15
Cree bases de
datos Unicode
siempre que
pueda interactuar con
aplicaciones
de distintos
idiomas.
17
Est claro que usted no puede (ni debe) retener toda esta
informacin. Sin embargo, ahora tiene los conocimientos necesarios
para acudir a las herramientas adecuadas y solicitar la informacin que
necesita en cada caso.
18
Esquemas
1. QU SON LOS ESQUEMAS?
Esquemas
2. EL ESQUEMA ACTUAL
Esquemas
Tenga en
cuenta que no
slo es necesario incluir
el esquema
si se accede
a un objeto
que est en
un esquema
distinto al del
usuario actual,
sino tambin
se necesitar
disponer de
los privilegios
de acceso
oportunos.
Esquemas
Esquemas
Esquemas
Esquemas
Seguridad (I)
1. AUTENTICACIN
Seguridad (I)
Seguridad (I)
Seguridad (I)
2. CREAR USUARIOS
Seguridad (I)
Bien, ste sera el nombre correcto del usuario que ser autenticado
por Windows para acceder a la base de datos. Sin embargo, existe un
parmetro en la conguracin de la base de datos que permite identicar
estos usuarios.
Puede eliminar
el prefijo que
identifica a los
usuarios del
sistema operativo, pero no
es conveniente
hacerlo excepto cuando slo
utilice autenticacin externa.
Seguridad (I)
3. PERFILES
Seguridad (I)
Una posibilidad podra ser editar este perl con los lmites que
necesitemos, pero tambin podemos crear nuevos perles y aplicarlos
a los usuarios adecuados.
Por ejemplo, es lgico pensar que no todos los usuarios deberan
poder consumir los mismo recursos del servidor. As, podramos crear
perles para administradores, directivos, programadores, usuarios
nales, etc.
Cada uno de estos perles dispondra de la composicin de lmites
o de la poltica adecuada de contraseas.
Seguridad (I)
Seguridad (I)
Seguridad (I)
10
Seguridad (I)
11
Seguridad (I)
esquema.
permite
ejecutar
Seguridad (II)
1. PRIVILEGIOS DE OBJETO
Seguridad (II)
Seguridad (II)
Si desea que
todos los usuarios tengan un
determinado
privilegio, puede aplicarlo en
un nico paso
si lo asigna al
usuario especial PUBLIC.
Seguridad (II)
2. EJECUCIN DE PROCEDIMIENTOS
Seguridad (II)
3. ROLES
Seguridad (II)
Seguridad (II)
Otra forma
de asignar y
revocar roles
es utilizar los
comandos
GRANT y
REVOKE, respectivamente.
Seguridad (II)
4. ROLES DE APLICACIN
Seguridad (II)
Es conveniente planificar
las copias de
seguridad
consistentes
u offline para
momentos
en los que se
espera que la
base de datos
no tenga actividad o que
tenga poca
actividad.
De esta forma, Oracle puede utilizar los archivo redo log para
recuperar la base de datos al estado ms actual, una vez se ha restaurado
una copia de seguridad.
Esto implica, por otra parte, que la base de datos sigue online o
totalmente activa tanto durante la realizacin de las copias de seguridad
como al restaurarlas.
De ah que
inconsistentes.
se
conozcan
como
copias
de
seguridad
10