Vous êtes sur la page 1sur 59

BASES DE DATOS B

SQL DEVELOPER
PL/SQL
UF3: LENGUAJE SQL 2
Gestión de Usuarios 2
Instalar SQL Developer de Oracle 3
Crear usuarios 3
Privilegios de usuario 4
Crear tablas 6
Crear un tablespace 6
Asignar un usuario a un tablespace 6
Modificar Tablespace 6
Roles 7
Bloques PL/SQL 8
Bloque anónimo 8
Procedimientos (Procedures) 10
Funciones 13
Estructuras de control 15
IF 15
CASE 16
ITERACIÓN - LOOP..EXIT WHEN 17
WHILE 18
FOR 19
Excepciones 20
Excepciones Oracle predefinidas 20
Excepciones Oracle NO predefinidas 22
Excepciones definidas por el usuario 23
Cursores 24
Cursores implícitos 24
Cursores explícitos 27
Entrada y salida de datos 31
Salida de datos 31
Entrada de datos 32
Triggers 33

UF4: BASES DE DATOS OBJETO-RELACIONALES 41


Tipos de objetos 41
Definición de tipos de objeto 42
Definición de métodos 43
Colecciones 45
Herencia 46
Identificadores, referencias 47
Tipos de datos colección 48
Tipo Varray 48
Tablas anidadas 49
Declaración e inicialización de Objetos 50
Sentencia SELECT 52

2
UF3: LENGUAJE SQL
Gestión de Usuarios
Al instalar Oracle, por defecto existen varias ​cuentas administrativas​ con permiso concedidos:
- SYS:​ Superadministrador (rol de DBA). No interesa modificar su esquema porque es
donde se crea el diccionario de datos.
- SYSTEM​: mismo rol que la anterior. Tiene tablas y vistas administrativas ya creadas.
- SYSMAN​: realiza tareas administrativas utilizando Enterprise Manager.
- DBSMNP​: controla la aplicación Enterprise Manager

Existen ​dos privilegios:


- SYSDBA
- Iniciar o frenar diferentes instancias de una base de datos
- Crear, modificar o borrar bases de datos.
- Recuperar bases de datos y conceder privilegios de sistema.
- SYSOPER
- mismas funciones que anterior excepto crear borrar y recuperar bases de datos.
La vista ​v$PWFILE_USERS​ nos permite examinar a los usuarios administrativos.

Características de los usuarios


- Nombre de usuario: único. 30 caractéres máximo. excepciones, signos $ y _.
- Configuración física (tablespace): espacio y límite de almacenamiento.
- Perfil asociado: recursos de los que dispone el usuario del sistema.
- Privilegios y roles: funciones que pueden realizar los usuarios.

Estado de la cuenta de un usuario


- Abierta
- Bloqueada
- Expirada
- Expirada y bloqueada
- Expirada en periodo de gracia

3
Instalar SQL Developer de Oracle
Desde la página de Oracle, descargamos e instalamos lo siguiente:
- Instalar Java JDK
- Instalar Oracle DataBase XE (Express Edition)
- Instalar SQL Developer

La ​primera conexión​ en SQL Developer ha de ser la SYSTEM, donde tenemos todos los
privilegios y la contraseña es la que pusimos en la DataBase de Oracle.

Clicamos en conexiones y le damos al icono de + (​nueva conexión​).

Nombre de conexión: SYSTEM


Usuario: SYSTEM
Contraseña: La misma que se puso en la instalación de Oracle.

Darle a probar y ver que el ​“Estado” es “Correcto”. ​Entonces pulsamos conectar.

Crear usuarios
Desde el usuario SYSTEM tenemos todos los privilegios, aunque quizás al principio hay que
lanzar el comando de poder crear usuarios:

Dar permisos para poder crear usuario


alter session set "_ORACLE_SCRIPT"=true;

Una vez dado este permiso (si fuese necesario), ya podemos crear un usuario:

Crear usuario
CREATE USER Ilerna IDENTIFIED BY ilerna123;

Aplicamos los permisos de solo conexión


GRANT create session to Ilerna;

??????
CONN Ilerna / ilerna123

Dar permisos para crear tablas


GRANT CREATE TABLE to Ilerna;

Mostrar usuarios, tablespaces, etc… (desde SYSTEM)


SELECT * FROM DBA_USERS;

Ya con los permisos dados, podemos crear una nueva conexión que la llamaremos como
queramos (ejemplo: ilerna_CON), donde tenemos que poner el usuario Ilerna y el password
ilerna123 (que hemos indicado anteriormente al crear el usuario).

4
Privilegios de usuario

5
Dar ciertos privilegios a un usuario
GRANT SELECT, UPDATE, DELETE, INSERT to Ilerna;
GRANT SELECT on ILERNA​.​ALUMNOS to Ilerna;
GRANT CREATE SESSION, UPDATE ANY TABLE, DELETE ANY TABLE, DROP ANY
TABLE to Ilerna;
Dar todos los privilegios a un usuario​ (sentencia peligrosa)
GRANT ALL PRIVILEGES to Ilerna;
Quitar privilegios
REVOKE ALL PRIVILEGES to Ilerna;

6
Crear tablas
Desde la conexión del nuevo usuario creado, ya podremos crear tablas:

CREATE TABLE Alumnos (


DNI varchar2 (9),
Nombre varchar2 (20),
Apellidos varchar2 (20),
Fecha DATE );
**varchar2 es más óptimo que varchar a la hora de almacenar los datos

Insertar datos en tablas


INSERT INTO nombre_tabla VALUES (‘string’, 4);

Crear un tablespace
CREATE TABLESPACE test02 datafile 'C:\app\vmart\product\18.0.0\oradata\XE\test01.dbf'
size 100M;
**Depende la ubicación de oradata (Oraclexe - App - oracle - oradata - XE)

El tablespace es un fichero que contiene todos los datos de ese tablespace (tablas, procedures,
funciones, etc.)
Lo más correcto sería ​crear un tablespace de administrador​, crear un usuario administrador
dentro de ese tablespace, asignarle todos los privilegios, crear una conexión para ese usuario
administrador, y que ese administrador estuviera trabajando siempre a parte, y ​dejar el
tablespace SYSTEM limpio​.
Luego, podemos crear un tablespace para usuarios llamado, peor ejemplo, USUARIOS y asignar
permisos al tablespace, de modo que todos los usuarios pertenecientes a ese tablespace tendría
directamente esos permisos.

Asignar un usuario a un tablespace


ALTER USER ILERNA DEFAULT TABLESPACE TEST01;

Modificar Tablespace
Podemos ​alterar el tamaño​ de un tablespace:
ALTER DATABASE DATAFILE 'C:\app\vmart\product\18.0.0\oradata\XE\test01.dbf'
RESIZE 100M;
O también podemos añadir un nuevo fichero a ese mismo tablespace, de modo que un tablespace
puede componerse por varios ficheros, aunque esto no es muy común:
ALTER TABLESPACE TEST01 ADD DATAFILE
'C:\app\vmart\product\18.0.0\oradata\XE\test02.dbf'
SIZE 50M;
Para ​eliminar ​un tablespace:
DROP TABLESPACE TEST01;
*Si eliminamos el tablespace, el fichero sigue en el directorio.

7
Roles
Un rol es un grupo de privilegios a los que se les asigna un nombre. Mediante los roles no hace
falta especificar uno a uno los privilegios que se conceden a cada nuevo usuario. Basta con
asignarle un rol para que herede todos los privilegios de este.
Roles predefinidos por Oracle:
- Connect: incluye únicamente el privilegio CREATE SESSION (que permite conectarse a la
base de datos).
- RESOURCE: incluye CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR,
CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TIGGER y
CREATE TYPE. Además otorga el privilegio UNLIMITED TABLESPACE.
- DBA: incluye todos los privilegios del sistema mediante la opción WITH ADMIN OPTION.
SYS o SYSTEM lo poseen.
Normalmente se crea un rol y a posteriori se le asignan privilegios. Así, el grupo de usuarios
pertenecientes a este rol adoptan sus privilegios.
Ejemplo:

8
Bloques PL/SQL
Los bloques PL/SQL pueden ser bloques anónimos, un procedimientos o una funciones.

Bloque anónimo

Declaración de variables:

9
10
Procedimientos (Procedures)

SET SERVEROUTPUT ON​ //Con esto vemos los mensajes en consola. Sólo hay que lanzarla una
primera vez.
EXECUTE mensajillo;​ //Con esto ejecutamos el procedimiento anteriormente creado.
CALL mensajillo​ ​//Este método llama al procedimiento
**Dentro de un bloque (BEGIN-END) no podemos realizar llamadas ni executes. Sólo
instrucciones.

11
** “AS” e “IS” son dos sentencias similares, prácticamente es lo mismo, con diferencias técnicas
que no vamos a entrar. Estas instrucciones ya crean automáticamente un DECLARE, por lo que
no hay que añadirlo de nuevo.
En un procedimiento con I​ N/OUT​ no podemos pasarle un número directamente, sino una variable,
ya que esta puede almacenar el valor de salida exigido por el OUT.

Ejemplo Procedure
Creamos un PROCEDURE que duplique un número entero:

Luego, desde nuestra conexión, ejecutamos un procedimiento donde llamamos al PROCEDURE


creado anteriormente:

12
Los procedimientos que no tengan operaciones (no sé exactamente cómo es esto, son
procedimientos sencillos que solo imprimen texto, no tienen operaciones en su interior) no
necesitamos llamarlos desde un procedure como el ejemplo anterior, podemos usar las sentencia
EXECUTE (en teoría también CALL):

13
Funciones
Las funciones son muy similares a los procedimientos. Mientras que a los procedimientos tenemos
que darles parámetros de entrada y/o salida, las funciones, independientemente de los
parámetros, nos devuelven un valor, es decir, tienen RETURN.

Ejemplo Función

14
Ejemplo Función 2

15
Estructuras de control

IF

Ejemplo IF

16
CASE

Ejemplo CASE

17
ITERACIÓN - LOOP..EXIT WHEN

18
WHILE

Ejemplos WHILE

19
FOR

Ejemplo FOR

20
Excepciones

Tenemos tres tipos diferentes de excepciones:

Excepciones Oracle predefinidas


Vemos el contenido de la tabla alumnos.

Ahora, si hacemos un SELECT buscando el nombre MARTA. Si no existe o si se repite, nos


mostrará los errores:

21
Otra forma de desglosar las excepciones:

22
Excepciones Oracle NO predefinidas
No tienen una definición propia (como son TOO_MANY_ROWS o NO_DATA_FOUND)
Nosotros tenemos que generar la excepción, pero almacenarla a una ya conocida por Oracle.
Si la fecha fuese correcta, no da error:

Pero cuando introducimos una fecha incorrecta, salta el mensaje de la EXCEPTION:

23
Excepciones definidas por el usuario
Cuando no se produce error:

En cambio, si ponemos un nº negativo, lanzamos la excepción con el RAISE:

24
Cursores

Cursores implícitos

25
Ejemplo cursor implícito de un campo
Tenemos la siguiente tabla creada:

Con este cursor, hacemos que nos muestre el lugar donde el departamento sea el nº 10.

26
Ejemplo cursor implícito de varios campos

27
Cursores explícitos
Recogen más de un registro de nuestra base de datos. Los cursores explícitos sí que tenemos
que declararlos (DECLARE CURSOR).
Los cursores son áreas de memoria que almacenan datos extraídos de la Base de Datos mediante
una consulta SELECT o por manipulación de datos con sentencias de actualización o inserción de
datos.
La utilización de cursores es necesaria cuando:
- Se precisa tratamiento fila a fila.
- En sentencias SELECT que devuelven más de una fila.

28
Un cursor explícito con varios campos sería de la siguiente manera:

29
Cursores de actualización

Al trabajar con cursores de actualización se debe tener en cuenta que generan bloqueos en la
base de datos.

30
Ejemplo cursor de actualización

31
Entrada y salida de datos

Salida de datos

32
Entrada de datos

33
Triggers
Los triggers o disparadores son pequeñas funcionalidades que podemos aplicar al programa, con
la peculiaridad de que se van a ejecutar de una forma automática cuando se realice un
determinado evento.
Por ejemplo se utiliza en tablas anidadas. Cuando cambiamos el contenido de una tabla, eso
afectaría a una segunda tabla. Con los triggers automatizamos esta modificación de la segunda
tabla.

Ejemplo Trigger 1
Tenemos creadas la tabla TABLA_CUENTA con 2 registros:

34
Y las dos siguientes tablas vacías:

35
Creamos el siguiente TRIGGER (disparador) que realizará acciones cuando insertemos valores en
la tabla_retiro:

Ahora procedemos a añadir datos a tabla_retiro, para ver si funciona el trigger:

Vemos que la fila se ha añadido correctamente.

36
Ahora vamos a analizar lo que ha hecho el tigger: Ha modificado la tabla_cuenta y la
audita_retiros de forma automática:

Si nuevamente queremos hacer un retiro de 60€, no nos deja porque los fondos son insuficientes:

37
En cambio si retiramos 10€, si nos vuelve a dejar:

38
39
Otros ejemplos Trigger

40
41
UF4: BASES DE DATOS OBJETO-RELACIONALES
Las bases de datos que hemos visto hasta ahora pueden crear entidades y atributos. También
pueden modelar o ir modificando todas estas características, mientras que las bases de datos
objeto-relacionales son como una extensión del modelo relacional que hemos visto. No utilizan
algunas reglas que antes sí llevábamos a cabo, pero añaden otra nueva solución a la hora de
modelar la información.
La mayor diferencia que existe entre los dos modelos es la existencia de tipos de objetos. Los
tipos se crean mediante sentencias ODL (​Object Definition Language​) y van a ser la base del
desarrollo de las bases de datos objeto-relacionales.

Tipos de objetos
Un tipo de objeto representa una entidad del mundo real que consta de las siguientes partes:
- Un nombre que permite identificar el tipo objeto
- Unos atributos que caracterizan el objeto
- Unos métodos que definen las operaciones sobre los datos de ese tipo escritos en
PL/SQL.

Características
La principal característica que debemos destacar de las bases de datos objetos-relacionales es
que combinan el modelo relacional, evolucionan con la incorporación de conceptos del modelo
orientado a objetos.
En el modelo objeto-relacional:
- Cada registro de una tabla se considera un objeto.
- Y la definición de la tabla, su clase.
Este modelo tiene capacidad para gestionar tipos de datos complejos, lo cual, contradice algunas
de las restricciones establecidas por el modelo relacional.

Las bases de datos relacionales se caracterizan porque se basan en una programación orientada
a objetos (POO) que se desarrolla basándose en tres elementos fundamentales:

Encapsulamiento:​ Mecanismo que vamos a seguir para agrupar los atributos y métodos dentro
de un nuevo concepto que denominamos clase.
Herencia:​ Mecanismo por el cual una clase derivada va a heredar los atributos de otra.
Polimorfismo:​ Cuando una clase derivada debe verse como la clase principal.

Tipos de datos Objeto


Los objetos han entrado en el mundo de las bases de datos en forma de dominios. Dos
implicaciones muy importantes que se producen por el hecho de utilizar una clase como dominio:
- Es posible almacenar múltiples valores en una columna de una misma fila ya que un objeto
suele contener múltiples valores.
- Es posibles almacenar procedimientos en las relaciones porque un objeto está enlazado
con el código de los procesos que sabe realizar (los métodos de su clase).

42
Definición de tipos de objeto
Para poder crear tipos de objetos se debe hacer uso de la sentencia ​CREATE TYPE​. Está
compuesta por los siguientes elementos:
- Para identificar el tipo de objetos se utiliza un ​nombre​.
- Unos ​atributos ​que pueden ser de un tipo de datos básico o de un tipo definido por el
usuario, que representan la estructura y los valores de los datos de es tipo.
- Unos ​métodos ​que son procedimientos o funciones. Se declaran con la cláusula
MEMBER.

43
Definición de métodos
Un método miembro de un tipo de objeto debe cumplir las siguientes características:
- No puede insertar, actualizar o borrar las tablas de la base de datos.
- No se puede ejecutar en paralelo o remotamente si va a acceder a los valores de una
variable dentro de un módulo.
- No puede modificar una variable de un módulo excepto si se invoca desde una cláusula
SELECT, VALUES o SET.
- No puede invocar a otro módulo o subprograma que rompa alguna de las reglas anteriores.

La directiva ​PRAGMA_REFERENCES​ se utiliza para forzar las reglas anteriores.


Donde restricciones puede ser cualquiera de las siguientes o incluso una combinación de ellas:
- WINDS​: evita que el método pueda modificar las tablas de la base de datos.
- RNDS​: evita que el método pueda leer las tablas de la base de datos.
- WNPS​: evita que el método modifique variables del paquete PL/SQL.
- RNPS​: evita que el método pueda leer las variables del paquete PL/SQL.

44
Ejemplo crear tipo de objeto

Una vez definida la clase y el cuerpo, podemos utilizar este objeto como si de un tipo cualquier se
tratase:

45
Ejemplo 2 crear tipo de objeto

46
Colecciones
Para poder contar con atributos multivaluados (1:N) es necesario que los organicemos en una
estructura de datos (array).
Estas colecciones de datos las podemos generar de un tipo de dato (Number, Varchar2, etc…) o
sobre un tipo de objeto.

Estas colecciones de datos las podemos utilizar en la definición de una clase (objeto) o como
definición de un campo de una tabla.

Tablas derivadas de objetos


De la misma forma que creamos objetos haciendo uso de los tipos definidos, también podemos
hacerlo con las tablas:

Para hacer un insert debemos indicar el tipo de objeto que estamos insertando:

47
Herencia
Una de las principales ventajas de la programación orientada a objetos (POO) es la herencia.
Se pueden crear ​superclases ​abstractas para que, en adelante, se puedan crear subclases más
específicas que hereden atributos y métodos de las superclases.
El ​supertipo ​define los atributos o métodos que van a compartir con los subtipos, todos los
objetos que hereden de él. Los subtipos también pueden definir sus propios atributos y métodos.

La cláusula​ NOT FINAL​ hace referencia a que este objeto no es el último: es decir, cuando
creemos subtipos de objetos que cuelguen de este, tendremos que declarar el objeto con esta
cláusula. En el caso de no poner la cláusula al crear este objeto, cuando queramos colgar otros
objetos de este nos devolverá error, aunque nos compilará el objeto.

Tipo persona

Subtipo empleado. Utilizamos la cláusula ​UNDER

*Heredamos los atributos y los métodos añadiendo características propias de tipo_person y


sobreescribimos el método printme.

48
Identificadores, referencias
El tipo ​REF​ o referencia es un contenedor de un identificador de objeto (object identifier - OID). Es
un puntero a un objeto.
Con la palabra reservada ​DEREF​ obtenemos el valor de un objeto al que apunta dicha referencia.

49
Tipos de datos colección
Se definen para poder implementar relaciones 1:N. Un dato de tipo colección está formado por un
número indefinido de elementos, todos del mismo tipo. Así es posible almacenar un conjunto de
tuplas en un único atributo, en forma de array o de tabla anidada.
Los tipos para colecciones también tienen, por defecto, unas funciones constructoras de
colecciones cuyo nombre coincide con el del tipo.

Tipo Varray
Un array es un conjunto de elementos ordenados del mismo tipo.

50
Tablas anidadas
Una tabla es un conjunto de elementos del mismo tipo. A diferencia del array, en este tipo no
existe un orden predefinido.
Restricciones:
- Solo pueden tener una columna
- El tipo de dato que almacena puede ser básico o definido por el usuario.

Las columnas que son tablas anidadas junto con los atributos que son tablas de objetos necesitan
de una tabla independiente donde almacenar las filas de dichas tablas. Para especificar esta tabla
se utiliza la cláusula ​NESTED TABLE… STORE AS…

51
Ejemplo Colección de tipo de Objeto en Tabla

52
Ejemplo 2 Colección de tipo de Objeto

53
Ejemplo 3 colecciones de tipo de Objeto

54
55
Declaración e inicialización de Objetos
Para declarar un objeto en la base de datos Oracle tenemos que crear un nuevo tipo de daots.
Podemos hacerlo de dos formas diferentes:

56
57
Sentencia SELECT

Inserción (​INSERT​), modificación (​UPDATE)​ y borrado (​DELETE​)

Ejemplo

58
59