Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
Privilegios administrativos:
- SYSDBA permite:
▪ 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:
▪ Realiza las 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 caracteres 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
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.
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
DEFAULT TABLESPACE nombre_tablespace;
QUOTA 15M ON nombre_tablespace;
Aplicamos los permisos de solo conexión
GRANT ALL PRIVILEGES TO ilerna;
Conexión del usuario
CONN Ilerna / ilerna123;
Dar permiso de conexión
GRANT CREATE SESSION TO ilerna;
Dar permisos ...
GRANT CREATE TABLE TO ilerna;
GRANT CREATE [SELECT, INSERT, UPDATE, DELETE] ON nombre_tabla TO ilerna;
GRANT ALTER ON nombre_tabla TO ilerna;
GRANT [DROP, UPDATE, DELETE] ANY TABLE TO ilerna;
Mostrar usuarios, tablespaces, etc… (desde SYSTEM)
SELECT * FROM DBA_USERS; DESCRIBE DBA_USERS;
Para saber a qué usuario estamos conectados
SHOW USER;
Creación de un tablespace
CREATE TABLESPACE nombre_tablespace DATAFILE “C:\RUTA..\nombre_fichero.dbf”
SIZE 100M AUTOEXTEND ON NEXT 100K MAXSIZE 200M;
MODIFICACIÓN DE USUARIO
ALTER USER ilerna ACCOUNT UNLOCK;
Borrado de usuario
DROP USER nombre_usuario [CASCADE]; Con CASCADE se eliminan primero los objetos asociados al usuario y luego al
usuario.
PERFILES: Definen un conjunto de recursos.
PRIVILEGIOS:
TIPO DE PRIVILEGIO: Select, Insert, update, delete, alter..
ON...:
- Nombre_tabla.
- * (sobre todas las tablas de la BBDD que se está utilizando.
- *.* (sobre todas las tablas de todas las BBDD.
- base_datos.nombre_tabla.
TO: indica el usuario a quien se otorga el permiso.
WITH: permite indicar ciertas opciones
LISTADO DE PRIVILEGIOS:
Quitar privilegios
REVOKE ALL PRIVILEGES
FROM ilerna;
Quitar todos los privilegios REVOKE ALL PRIVILEGES ON *.* FROM ilerna@localhost;
Quitar algún privilegio REVOKE [SELECT, INSERT, UPDATE, DELETE] ON nombre_tabla FROM ilerna@localhost;
2
Asignar un usuario a un tablespace
ALTER USER ILERNA DEFAULT TABLESPACE TEST01;
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
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.
Los roles simplifican la gestión dinámica de los privilegios. Pueden activarse o desactivarse temporalmente. Disminuye el número de
GRANT almacenados en el diccionario de datos, mejorando la productividad.
PL/SQL
Incluido en ORACLE DATABASE SERVER, tiene las siguientes características:
- Integrado con SQL
- Control de errores y excepciones
- Uso de variables
- Estructuras de control de flujo
- Soporta programación orientada a objetos
- Programación modulas: procedimientos y funciones
Intérprete de comandos: ORACLE. SQL*Plus Aplicación cuya única misión es enviar comandos al SGBD y mostrar los resultados
devueltos, en pantalla.
Definición:
Declaraciones (opcional)
Ejecutable (requerida)
Excepciones (opcional)
Los bloques PL/SQL pueden ser bloques anónimos, procedimientos o funciones, con el objetivo de conseguir modularidad.
Declaración de variables:
Tipos:
Compuesto: tablas, registros, tablas
anidadas y arrays.
LOB: Bloques de datos no estructurados
como gráficos, imágenes, vídeos y texto
de hasta 4GB.
3
Escalar:
Operadores:
FOR
Índice NO hace falta declararlo, ya que lo hace implícitamente al usar la estructura FOR, pero no se puede usar fuera de él.
4
PROCEDIMIENTOS Y FUNCIONES
Definición:
Especificación (nombre y tipo de argumentos). En el caso de las funciones, también se especifica el valor devuelto.
Cuerpo Formado por sentencias PL/SQL que realizarán el objetivo para el cuál se crea el procedimiento o función.
Parámetro formal: Nombre del parámetro definido en la función, donde funcionan como variables locales con la particularidad de que se
inician con el valor que tengan los parámetros actuales en el momento de llamarlo.
Parámetro actual: Son los valores que tienen los parámetros cuando se llaman a una función y que se asigna, en la invocación, a los
parámetros formales.
La diferencia entre procedimiento y función está en que la función va a devolver siempre un resultado que será un tipo de datos concreto,
que ha sido definido en su declaración. Para devolver dicho valor, usará la palabra reservada RETURN.
Llamada:
EXECUTE nombre_procedimiento();
CALL nombre_procedimiento();
O, dentro de un bloque:
BEGIN
Nombre_procedimiento [{parámetros}];
END;
CONTROL DE ERRORES
Excepción: Resultado que se obtiene tras ejecutar un bloque PL/SQL que posee un error.
La llamada al tratamiento de excepciones puede producirse de dos formas:
TIPOS
- EXCEPCIONES ORACLE PREDEFINIDAS: Lanzadas por Oracle de forma automática.
5
Ejemplo:
Con SQLCODE, mostraríamos el código del error Oracle y SQLERRM
devuelve el correspondiente mensaje de error. Se suelen utilizar, por
ejemplo, con WHEN OTHERS THEN:
https://docs.oracle.com/pls/db92/db92.error_search?remark=homepage&prefill=ORA-
Para poder manejarlas, lo primero que hay que hacer es crear un objeto tipo EXCEPTION;
6
AMPLIACIÓN SQLCODE Y SQLERRM:
Puesto que son funciones PL/SQL, no podríamos insertar sus valores dentro de una tabla (para guardar los errores) directamente, sino
que habría que crear variables donde almacenar esos valores y luego, insertar las variables en la tabla.
EJEMPLO:
Como put_line no admite booleanos, se puede utilizar un IF, para SQL%FOUNF / SQL%NOTFOUND.
CURSORES EXPLÍCITOS: Declarados y controlados por el programador cuando una consulta devuelve un conjunto de
registros. Puede ser a través de una consulta SELECT o bien por manipulación de datos con sentencias UPDATE o INSERT.
Algunas veces se utilizan con consultas de un único registro, por razones de eficiencia. Son más rápidos.
Se utilizan cuando se requiere tratamiento fila a fila y en sentencias SELECT que devuelven más de una fila.
- El cursor debe ser declarado antes de su uso. Debe tener un nombre y una consulta asociada determinada.
- Posteriormente, se debe recorrer el cursor hasta encontrar la información que interese o hasta que no haya más filas. Para ello,
habrá que declarar una variable “registro” de tipo “Rowtype” abrir el cursor, recorrerlo con un bucle for, realizando el FETCH
sobre la variable registro en cada iteración y finalmente, cerrando el cursor.
7
ESQUEMA CURSOR EXPLÍCITO:
BBDD Fin Sí
Declarar Abrir el cursor Leer fila del cursor Cerrar el cursor
?
No
Una vez lee una fila, se queda el cursor en la siguiente, por lo que podemos utilizar bucles para trabajar varios registros.
RECORRER UN CURSOR CON BUCLE LOOP OJO: RECORDAR SIEMPRE INCLUIR CONDICIÓN DE SALIDA!!
Recorrer un cursor con bucle FOR es MUCHO MÁS SENCILLO, porque hay comandos implícitos en el propio FOR.. de esta forma,
no hay que abrir/cerrar el cursor, ni hace falta crear una variable que almacene los registros, pues se almacenan en i, es decir, se hace
automáticamente un FETCH INTO i.
Como diferencia, señalar que la variable del FOR, i, es privada, por lo que sólo se puede manejar el cursor dentro del bucle.
CREACIÓN DE CURSOR DENTRO DEL PROPIO BUCLE FOR
Una de las características que tiene los cursores es la capacidad de modificar ‘al vuelo’ la fila donde se encuentra el cursor con
UPDATE o con DELETE. Si éste es el objetivo, el cursor debe crearse desde un inicio, con la cláusula FOR UPDATE.
FOR UPDATE sirve para bloquear las filas mientras son modificadas. Si no se bloquean, para cuando se llega al bucle, pueden haber
sido bloqueadas por otros usuarios y arrojar un error.
SET SERVEROUTPUT ON Para visualizar la información enviada a la pantalla. Sólo activamos esta variable una vez.
dbms_output.put_line Para enviar información a la pantalla.
ENTRADA
nombreVariable := &Texto_para_mostrar; El texto a mostrar debe ser una cadena de texto sin espacios en blanco.
Recomendable separar las palabras con guiones bajos.
TRIGGERS:
Son módulos PL/SQL compilados y almacenados en la BD, que tienen asociada una tabla y que se ejecuta al llevar a cabo una
instrucción SQL. Se utilizan para:
9
Un trigger puede dispararse por más de una operación, en cuyo caso, utilizaremos los predicados condicionales INSERTING,
DELETING, UPDATING (y UPDATING(columna)), para controlar el tipo de evento.
TRIGGERS TIPO ROW: Como se disparan por fila, se puede acceder a los datos de la fila.
Los triggers de tipo row son, por lo tanto útiles, no para controlar
la operación, sino para controlar los datos que se están manejando
dentro de la operación.
CLAÚSULA WHEN: La cláusula WHEN se puede utilizar para poner una condición que determine en qué circunstancias debe
dispararse el trigger.
OBJETO
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.
EN EL MODELO OBJETO-RELACIONAL
Las bases de datos objeto-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. (Permite sobrecarga)
Definición de tipos de objeto: Los usuarios pueden definir sus propios tipos de datos a partir de los tipos básicos provistos
por el sistema o por otros predefinidos anteriormente.
Para poder crear tipos de objetos se debe hacer uso de la sentencia CREATE TYPE. Está compuesta por los siguientes elementos:
Nombre.
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 ese tipo.
Métodos: Procedimientos o funciones. Se declaran con la
cláusula MEMBER.
Directiva: PRAGMA_REFERENCES.
Definición de métodos
La directiva PRAGMA_REFERENCES se utiliza para forzar las reglas anteriores. Las restricciones son:
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.
11
CUERPO de tipos de objeto
EJEMPLO DEFINICIÓN + CUERPO: OBJETO PERSONA:
DEFINICIÓN:
CUERPO:
Una vez definida la clase y el cuerpo, podemos utilizar este objeto como si de un tipo cualquier se tratase:
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.
De la misma forma que creamos objetos haciendo uso de los tipos definidos, también podemos
hacerlo con las tablas:
Para hacer un Insert indicaremos el tipo de objeto que estamos insertando:
12
HERENCIA
Una de las principales ventajas de la programación orientada a objetos (POO) es la herencia, que permite crear superclases abstractas
para que, en adelante, se puedan crear subclases más específicas que hereden atributos y métodos de las superclases.
En las bases de datos objeto-relacionales, 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.
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 del objeto al que apunta dicha referencia.
TIPO VARRAY
Un array es un conjunto de elementos ordenados del mismo tipo. Todos los elementos que lo componen poseen un índice que indica la
posición que ocupa en el array.
La forma de insertar datos exige especificar el tipo colec_telefono, para que el SGBD realice las comprobaciones oportunas:
TABLAS ANIDADAS
Una tabla es un conjunto de elementos del mismo tipo. NO EXISTE UN ORDEN PREDEFINIDO.
RESTRICCIONES: Sólo pueden tener UNA SOLA COLUMNA. El tipo de datos 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…
Para consultar, insertar, borrar o actualizar información en tablas anidadas, se realiza
igual que con las colecciones.
Mediante SQL Developer podemos conectarnos a una base de datos ya creada en Oracle y, a partir de ahí, seleccionamos
el panel de conexiones, Types:
INSERT
A través del comando INSERT directamente o utilizando el constructor:
Ejemplo de inserción en la tabla relacional departamento, de un registro que incluye una columna de tipo “person”:
UPDATE DELETE
14