Sei sulla pagina 1di 148

PL - SQL

PL SQL
Es un lenguaje de programacin que se utiliza para acceder a las base de datos Oracle desde distintos entornos. Su utilizacin es dentro del administrador de bases de datos Oracle y sus principales caractersticas son:

La posibilidad de utilizar sentencias SQL para manipular datos en Oracle Sentencias de control de flujo para organizar esta manipulacin de datos.

PL SQL

Dentro del lenguaje, es posible declarar constantes y variables, definir procedimientos y funciones y atrapar errores en tiempo de ejecucin

PL/SQL y el trfico de red


Servidor de base de datos ORACLE
Servidor de base de datos ORACLE

SQL

SQL

SQL

SQL . SQL .

Aplicacin Cliente

Aplicacin Cliente

Requisitos previos
Poseer conocimientos de diseo de base de datos relacionales. As como del lenguaje SQL Y conocer mnimamente los fundamentos de la Programacin estructurada.

Cualidades de un buen diseo de base de datos


Reflejar la estructura del problema en el mundo real Ser capaz de representar todos los datos esperados, incluso con el paso del tiempo Evitar el almacenamiento de informacin redundante. Proporcionar un acceso eficaz a los datos. Ser claro, coherente y de fcil comprensin

El modelo relacional - Caractersticas

Todos los datos se representan en tablas

Incluso los resultados de cualquier consulta son otra tabla.

Las tablas estn compuestas por filas y columnas. Las filas y las columnas, en principio, carecen de orden

Las filas slo se ordenan si se le indica a la base de datos que lo haga, mediante el correspondiente comando. De no ser as, el orden ser arbitrario, y puede cambiar en caso de tratarse de una base datos dinmica. El orden de las columnas lo determina cada consulta.

El modelo relacional - Caractersticas


Cada tabla tiene una clave primaria, un identificador nico, compuesto por una o ms columnas. La mayora de las claves primarias estn formadas por una nica columna (p.ej., CIUDAD_ID). Para establecer una relacin entre dos tablas es necesario incluir, en forma de columna, en una de ellas la clave primaria de la otra. A esta columna se le llama clave secundaria.

Etapas en el diseo de una Base de Datos


Recopilacin y anlisis de requerimientos Diseo Conceptual Modelo E-R Diseo Lgico Diseo Fsico Implementacin en un DBMS Teora de la Normalizacin

DISEO CONCEPTUAL: MODELO E-R


Es un proceso creativo Se distinguen las siguientes clases de objetos:

Entidades Atributos Interrelaciones Cardinalidades Mnimas y mximas en las interrelaciones Generalizaciones Identificadores

Las Entidades
Son los objetos principales en el modelo E-R que representan objetos, personas, cosas o eventos de inters sobre las que se quiere almacenar informacin relevante. En el diagrama E-R las entidades se representan mediante rectngulos.

Los Atributos

Se utilizan para detallar las entidades asignndoles propiedades descriptivas tales como color, nombre y peso Existen dos tipos de atributos:

Identificadores Sirven para distinguir de manera nica cada ocurrencia de la entidad

Descriptores Sirven para describir cada ocurrencia de la entidad

Las Entidades

Las Interrelaciones

Una relacin es una asociacin o relacin matemtica entre varias entidades Las Interrelaciones se caracterizan por su nombre, grado (numero de entidades que participan en la Interrelacin) y al cardinalidad (nmero de instancias o elementos de una entidad que pueden asociarse a un elemento de la otra entidad relacionada ) Se representan en el diagrama E-R mediante flechas y rombos.

Las cardinalidades

Se definen las cardinalidades mnimas y mximas que intervienen en una relacin como el numero mnimo y mximo de una ocurrencia de una entidad que puedan relacionarse con una nica ocurrencia de otra u otras entidades. Grficamente se representan en el Modelo E-R con una etiqueta (0,1),(0,n),(1,1),(1,n),(n,n), situada en la lnea que conecta la entidad con el rombo que representa el tipo de relacin. Ejemplo

(n,1)

(1,n)
PROYECTO

PARTICIPA

(0,1)
EMPLEADO

LA RELACION INDICA QUE SOLO UN EMPLEADO PUEDE PARTICIPAR EN UN PROYECTO Y QUE HAY EMPLEADOS QUE NO PARTICIPAN EN PROYECTOS Y QUE EN UN PROYECTO OBLIGATORIAMENTE DEBE HABER POR LO MENOS UN EMPLEADO Y QUE COMO MAXIMO HABRAN MUCHOS EMPLEADOS

OTROS EJEMPLOS DE CARDINALIDAD


1.

2.
3.

Una a una (1:1) : PAIS y CAPITAL. Una a muchas (1:N): CLIENTE y PEDIDOS. Muchas a muchas (N:N). : PERSONAS y VIVIENDAS

Generalizaciones
Nos permiten especializar una entidad (que se denominar supertipo) en subtipos, o tambin se puede decir generalizar los subtipos en un supertipo. Normalmente se utiliza la jerarqua es_un de las redes semnticas para identificar las generalizaciones. Un supertipo es_un subtipo.

Si un programador es un empleado y una secretaria es un empleado, entonces podramos decir que el tipo de entidad PROGRAMADOR y SECRETARIA es un subtipo de entidad EMPLEADO; o de manera equivalente, que el tipo de entidad EMPLEADO es un supertipo de la entidad PROGRAMADOR Y SECRETARIA.

Para identificar las generalizaciones hay que encontrar una serie de atributos comunes a todas las entidades que intervienen en la generalizacin. Estos atributos comunes describirn al supertipo y los compartir el subtipo; y los atributos particulares describirn al subtipo pero no los compartir el supertipo.

En el ejemplo anterior todas las propiedades de EMPLEADO se aplican a los programadores y secretaria pero no sucede lo contrario. Las propiedades que se aplican al supertipo son heredados por el subtipo.

En el ejemplo anterior se muestra una generalizacin total porque no existen EMPLEADOS que no sean ni INGENIEROS, ni SECRETARIAS, ni TECNICOS; adems, es una generalizacin exclusiva, es decir, un EMPLEADO es un INGENIERO, o SECRETARIA o TECNICO pero no puede ser varias cosas a la vez

Identificadores
Es uno o varios atributos de una entidad (o de varias entidades) que tiene la propiedad de identificar en forma nica todas las ocurrencias (registros) de una entidad. Los identificadores se clasifican: Identificador interno simple: Cuando est formado por un solo atributo, y ste pertenece a la entidad.

Identificador interno compuesto: Cuando est formado por ms de un atributo, y stos pertenecen a la entidad. Identificador externo simple: Cuando est formado por un solo atributo, y ste no pertenece a la entidad. Identificador externo compuesto: Cuando est formado por ms de un atributo, y stos pertenecen a otra entidad.

Identificador Mixto: Cuando est formado por ms de un atributo, y stos pertenecen a ms de una entidad.

Notaciones en el Modelo E-R

Proceso de diseo en el modelo E-R


Identificar las entidades y las interrelaciones que debe presentar la base de datos. Determinar las cardinalidades de las interrelaciones establecidas entre las distintas entidades y clasificar estas interrelaciones entre los siguientes tipos:

Uno a uno (p.ej., una parcela slo tiene una direccin). Uno a muchos (p.ej., en una parcela pueden ocurrir varios incendios). Muchos a muchos (p.ej., la venta de parcelas: una misma parcela la pueden vender varios propietarios y cada propietario puede vender varias parcelas).

Dibujar el diagrama Entidad/Interrelacin. Determinar los atributos de cada entidad. Definir la clave primaria (nica) de cada entidad.

Lenguaje Estructurado de Consulta (SQL)


Definicin

Importancia

SQL es un lenguaje formal que se utiliza para manipular informacin y el esquema en una base de datos.

Hoy en da las bases de datos relacionales estn implementadas en casi todas las empresas; el SQL toma una gran importancia desde este punto de vista; adems su fcil comprensin y su facilidad para obtener informacin en forma ordenada y ocupando poco espacio lo han hecho el lenguaje de manipulacin de informacin de bases de datos ms extendido.

Comandos Sql para Oracle


Existen cuatro tipos

DDL (Lenguaje de Definicin de Datos) Permiten crear y definir nuevas bases de datos, tablas, campos y restricciones. Lo forman las instrucciones CREATE, ALTER, DROP y RENAME

DML (Lenguaje de Manipulacin de Datos) Permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos; adems insertar y actualizar informacin. Lo forman las instrucciones SELECT, INSERT, UPDATE, MERGE y DELETE.

Comandos Sql

DCL (Lenguaje de Control de Datos) Administran los derechos y restricciones de los usuarios. Lo forman las instrucciones GRANT y REVOKE.

INSTRUCCIONES DE TRANSFERENCIA Administran las modificaciones creadas por las instrucciones DML. Lo forman las instrucciones ROLLBACK, COMMIT y SAVEPOINT

LENGUAJE DE DEFINICION DE DATOS

CREATE

CREATE TABLE nombre Tabla (nombre_campo1 Tipo_de_variable [(tamao)] [Null/Not Null] [Primay Key] [Check (condicin)], nombre_campo2 Tipo_de_variable [(tamao)] [Null/Not Null] [FOREIGN KEY(Clave Secundaria) REFERENCES Tabla_Primaria(Clave_Primaria_Tabla_Primaria1), [CONSTRAINT pk_NombreRestriccion PRIMARY KEY (clave1, clave2)], [CONSTRAINT fk_NombreRestriccion FOREIGN KEY (clave secundaria) REFERENCES TablaPrimaria(ClavePrimaria)], etc... );

RESTRICIONES

Una restriccin es una condicin de obligado cumplimiento para una o ms columnas de la tabla. A cada restriccin se le pone un nombre, en el caso de no poner un nombre (en las que eso sea posible) entonces el propio Oracle le coloca el nombre.

Sintaxis
CREATE TABLE nombreTabla | ALTER TABLE nombreTabla {ADD | MODIFY} (campo tipo [propiedades] [,...] CONSTRAINT nombreRestriccin tipoRestriccin (columnas) [,CONSTRAINT nombrerestriccin tipoRestriccin (columnas) ...)

CREATE TABLE cliente( dni VARCHAR2(9) PRIMARY KEY, nombre VARCHAR(50)) ; CREATE TABLE cliente( dni VARCHAR2(9) CONSTRAINT cliente_pk PRIMARY KEY, nombre VARCHAR(50)) ; CREATE TABLE alquiler(dni VARCHAR2(9), cod_pelicula NUMBER(5), CONSTRAINT alquiler_pk PRIMARY KEY(dni,cod_pelicula) ;

CREATE TABLE Clientes ( Cli_Cod Integer Not Null Primary Key, Cli_Descripcion Varchar2(30) Not Null, Cli_Direccion Varchar2(30) Not Null );

CLAVE FORANEA
CREATE TABLE alquiler(dni VARCHAR2(9), cod_pelicula NUMBER(5), CONSTRAINT alquiler_pk PRIMARY KEY(dni,cod_pelicula), CONSTRAINT dni_fk FOREIGN KEY (dni) REFERENCES clientes(dni), CONSTRAINT pelicula_fk FOREIGN KEY (cod_pelicula) REFERENCES peliculas(cod) );

VALIDACION
Son restricciones que dictan una condicin que deben cumplir los contenidos de una columna. Una misma columna puede tener mltiples CHECKS en su definicin.

EJEMPLO
CREATE TABLE ingresos(cod NUMBER(5) PRIMARY KEY, concepto VARCHAR2(40) NOT NULL, importe NUMBER(11,2), CONSTRAINT importe_min CHECK (importe>0), CONSTRAINT importe_max CHECK (importe<8000) );

CREATE TABLE curso( cod_curso CHAR(7) PRIMARY KEY, fecha_inicio DATE, fecha_fin DATE, tItulo VARCHAR2(60), cod_siguientecurso CHAR(7), CONSTRAINT fecha_ck CHECK(fecha_fin>fecha_inicio), CONSTRAINT cod_ste_fk FOREIGN KEY(cod_siguientecurso) REFERENCES curso ON DELETE SET NULL);

VALORES UNICOS

Las restricciones de tipo UNIQUE obligan a que el contenido de uno o ms campos no puedan repetir valores. Hay dos formas de colocar esta restriccin:

CREATE TABLE cliente(dni VARCHAR2(9) UNIQUE); CREATE TABLE cliente(dni VARCHAR2(9) CONSTRAINT dni_u UNIQUE); CREATE TABLE alquiler(dni VARCHAR2(9), cod_pelicula NUMBER(5), CONSTRAINT alquiler_uk UNIQUE(dni,cod_pelicula) ;

PROHIBIR VALORES NULOS

La restriccin NOT NULL permite prohibir los nulos en una determinada COLUMNA. Eso obliga a que la columna tenga que tener obligatoriamente un valor para que sea almacenado el registro.

CREATE TABLE cliente(dni VARCHAR2(9) NOT NULL);

CREATE TABLE cliente(dni VARCHAR2(9) CONSTRAINT dni_sinnulos NOT NULL(dni));

VALOR POR DEFECTO

A cada columna se le puede asignar un valor por defecto durante su creacin mediante la propiedad DEFAULT.

CREATE TABLE articulo (cod NUMBER(7), nombre VARCHAR2(25), precio NUMBER(11,2) DEFAULT 3.5);

Grupo #1
ORGANIZACIONES NO GUBERNAMENTALES ENUNCIADO:

Grupo #2
ALQUILER DE VEHICULOS ENUNCIADO:

LENGUAJE DE MANIPULACION DE DATOS


Es la ms compleja y potente de las sentencias SQL

Permite recuperar datos de una o varias tablas

INSTRUCCIN SELECT

El resultado de la consulta con la instruccin SELECT es una tabla lgica, porque no se guarda en el disco sino que est en memoria y cada vez que ejecutamos la consulta se vuelve a calcular.

Al SELECT tenemos que indicar qu columnas queremos que tenga el resultado y qu filas queremos seleccionar de la tabla origen.

Sintxis
Bsica
SELECT Campos FROM Tabla;

Completa

Seleccin de Columnas
Se refiere a las columnas que apareceran en el resultado de la consulta y se especifican delante de la Instruccin Select y antes de la clusula FROM.

Uso del * Ventajas

Columnas de la Tabla Origen


Se puede especificar

Evitar nombrar las columnas una a una (es ms corto)

Si aadimos una columna nueva en la tabla, esta nueva columna saldr sin tener que modificar la consulta

Nombre simple

Nombre cualificado

(nbcol)

(nbtabla.nbcol, el nombre de la columna precedido del nombre de la tabla que contiene la columna y separados por un punto).

Clausula FROM
Indica o especifica en qu tabla tiene que buscar la informacin.

Ejemplos

Generar una consulta que devuelva el nombre y telfono de la tabla clientes


SELECT Nombre, Telefono FROM Clientes SELECT Clientes.Nombre, Clientes Telefono FROM Clientes

Generar una consulta que devuelve todos los campos de la tabla clientes
SELECT * FROM Clientes

Columnas calculadas

Adems de las columnas que existen en la tabla origen, una consulta SQL puede incluir columnas calculadas cuyos valores se calculan a partir de los valores de los datos almacenados.

Para obtener una columna calculada, se especifica en la lista de seleccin una expresin en vez de un nombre de columna. La expresin puede contener sumas, restas, multiplicaciones y divisiones, concatenacin & , parntesis y tambin funciones predefinidas.

Ejemplos

De cada pedido queremos saber su nmero de pedido, fab, producto, cantidad, precio unitario e importe

SELECT numpedido, fab, producto, cant, importe / cant AS precio_unitario, importe FROM pedidos

Clausula Order by
Permiten ordenar las filas del resultado de la consulta Con esta clusula se altera el orden de visualizacin de las filas de la tabla pero en ningn caso se modifica el orden de las filas dentro de la tabla. Podemos indicar la columna por la que queremos ordenar utilizando su nombre de columna (nbcolumna) o utilizando su nmero de orden que ocupa en la lista de seleccin (Ncolumna).

Seleccin de Filas

Para indicar visualizar se clausulas:

qu filas utilizan las

queremos siguientes

Clausula ROWNUM

ROWNUM devuelve el nmero lgico que nos indica el orden en el cual una fila ha sido recuperada de una tabla por una sentencia SELECT

SELECT ROWNUM, edad, nombre FROM clientes SELECT ROWNUM, edad, nombre FROM clientes where rownum<1

Clausula DISTINCT

La clusula DISTINCT en un SELECT, elimina del resultado las repeticiones de filas.

Concatenacin

El operador || es el de la concatenacin. Sirve para unir textos. Ejemplo:


SELECT tipo, modelo, tipo || '-' || modelo "Clave Pieza FROM piezas;

Clausula Where
La clusula WHERE selecciona las filas que cumplan una condicin de seleccin especificada.

En SQL tenemos cinco condiciones de seleccin bsicas:

El test de comparacin El test de rango BETWEEN El test de pertenencia a un conjunto IN El test de valor nulo IS NULL El test de correspondencia con patrn LIKE

El Test de Comparacin

Compara el valor de una expresin con el valor de otra.

EJRMPLOS
/* Obtiene a las personas de entre 25 y 50 aos SELECT nombre,apellidos FROM personas WHERE edad>=25 AND edad<=50;

/*Obtiene a la gente de ms de 60 aos o de menos de 20 SELECT nombre,apellidos FROM personas WHERE edad>60 OR edad<20;

BETWEEN

El operador BETWEEN nos permite obtener datos que se encuentren en un rango.


SELECT tipo,modelo,precio FROM piezas WHERE precio BETWEEN 3 AND 8;

IN

Permite obtener registros cuyos valores estn en una lista.


SELECT tipo,modelo,precio FROM piezas WHERE precio IN (3,5, 8);

LIKE

Permite obtener registros cuyo valor en un campo cumpla una condicin textual. LIKE utiliza una cadena que puede contener estos smbolos:
Smbolo % Significado Una serie cualquiera de caracteres

Un carcter cualquiera

EJEMPLOS
/* Selecciona nombres que empiecen por A */ SELECT nombre FROM personas WHERE nombre LIKE 'A%'; /*Selecciona las personas cuyo apellido sea Sanchez, Senchez,Stnchez,...*/ SELECT apellido1 FROM Personas WHERE apellido1 LIKE 'S_nchez';

IS NULL

Devuelve verdadero contiene un nulo:

si

una

expresin

SELECT nombre,apellidos FROM personas WHERE telefono IS NULL

FUNCIONES CONDICIONALES
CASE Es una instruccin incorporada en Oracle que permite establecer condiciones de salida (al estilo if-then-else de muchos lenguajes). Sintaxis:

CASE expresin WHEN valor1 THEN resultado1 [ WHEN valor2 THEN resultado2 .... ... ELSE resultadoElse ] END

EJEMPLO
SELECT CASE cotizacion WHEN 1 THEN salario*0.85 WHEN 2 THEN salario * 0.93 WHEN 3 THEN salario * 0.96 ELSE salario END FROM empleados;

DECODE

Similar a la anterior pero en forma de funcin. Se evala una expresin y se colocan a continuacin pares (valor, resultado) de forma que si se la expresin equivale al valor, se obtiene el resultado indicado. Se puede indicar un ltimo parmetro con el resultado a efectuar en caso de no encontrar ninguno de los valores indicados.

SINTAXIS
DECODE(expresin, valor1, resultado1 [,valor2, resultado2,...] [,valorPordefecto])

SELECT DECODE(cotizacion,1, salario*0.85, 2,salario * 0.93, 3,salario * 0.96, salario) FROM empleados;

Consultas de Resumen

Se incluyen dos nuevas clusulas a la sentencia SELECT, la clusula GROUP BY y la clusula HAVING

Es un tipo de consultas cuyas filas resultantes son un resumen de las filas de la tabla origen.

Estas clausulas se tienen que escribir entre la clusula WHERE y la clusula ORDER BY

Consultas de Resumen

Se utilizan funciones de columna (SUM, PROM, COUNT, MIN, MAX, ETC.)

Las filas del resultado de una consulta de resumen corresponden a varias filas de la tabla origen.

Una fila de una consulta de resumen corresponde a un resumen de varias filas de la tabla origen.

Ejemplo

En el ejemplo tenemos una consulta normal en la que se visualizan las filas de la tabla oficinas ordenadas por regin, en este caso cada fila del resultado se corresponde con una sola fila de la tabla oficinas, mientras que la segunda consulta es una consulta resumen, cada fila del resultado se corresponde con una o varias filas de la tabla oficinas.

Sintaxis:

Funciones de Columnas
Se utilizan en una consulta de resumen. Se aplican a una columna y obtiene un valor que resume el contenido de la columna. Las mas utilizadas son:

SUM(nbocolumn) AVG(nbocolumn) MIN(nbocolumn) MAX(nbocolumn) COUNT(nbocolumn)

Funcin Sum()
Calcula la suma de los valores de una columna Ejemplo SELECT SUM(ventas) FROM oficinas Obtiene una sola fila con el resultado de sumar todos los valores de la columna ventas de la tabla oficinas.

Funcin Avg()
Calcula el promedio de los valores de una columna Ejemplo SELECT AVG(ventas) FROM oficinas Obtiene una sola fila con el resultado de promediar todos los valores de la columna ventas de la tabla oficinas.

Funcin Min() y Max()


Determinan los valores menores y mayores de una columna respectivamente. Ejemplo SELECT min(ventas),max(ventas) FROM oficinas Obtiene una sola fila indicando el valor menor y mayor en ventas de la tabla oficina.

Funcin Count()
Cuenta el nmero de filas o registros que hay en la columna Ejemplo SELECT COUNT(numemp) FROM empleados Obtiene el numero de empleados que existen en la tabla empleados.

La clausula Group by
Llamadas tambin consultas de resumen o consultas agrupadas. Permiten obtener subtotales. Agrupa los datos de la tabla origen y produce una nica fila resumen por cada grupo formado. Las columnas indicadas en el GROUP BY se llaman columnas de agrupacin.

Ejemplo
SELECT SUM(ventas) FROM oficinas Obtiene la suma de ventas de todas oficinas. las las

SELECT oficina, SUM(ventas) FROM oficinas GROUP BY oficina

Se forma un grupo para cada oficina y la suma se calcula sobre cada oficina.

SELECT tipo,modelo FROM existencias GROUP BY tipo,modelo;

HAVING

Filtra el resultado agrupada.

de

una

expresin

SELECT tipo,modelo, SUM(Cantidad) FROM existencias GROUP BY tipo,modelo HAVING SUM(Cantidad)>500; SELECT tipo,modelo, cantidad, SUM(Cantidad) FROM existencias WHERE tipo!='AR' GROUP BY tipo,modelo HAVING SUM(Cantidad)>500;

MERGE
Es el comando ms poderoso del lenguaje de manipulacin de Oracle . Sirve para actualizar los valores de los registros de una tabla a partir de valores de registros de otra tabla o consulta. Permite combinar los datos de dos tablas a fin de actualizar la primera.

MERGE

Supongamos que poseemos una tabla en la que queremos realizar una lista de localidades con su respectiva provincia. Las localidades estn ya rellenadas, nos faltan las provincias. Resulta que tenemos otra tabla llamada clientes en la que tenemos datos de localidades y provincias, gracias a esta tabla podremos rellenar los datos que faltan en la otra.

SINTAXIS
MERGE INTO tabla alias USING (instruccin SELECT) alias ON (condicin de unin) WHEN MATCHED THEN UPDATE SET col1=valor1 [col2=valor2] WHEN NOT MATCHED THEN INSERT (listaDeColumnas) VALUES (listaDeValores)

MERGE compara los registros de ambas tablas segn la condicin indicada en el apartado ON. Compara cada registro de la tabla con cada registro del SELECT.

tabla es el nombre de la tabla que queremos modificar. USING. En esa clusula se indica una instruccin SELECT tan compleja como queramos que muestre una tabla que contenga los datos a partir de los cuales se modifica la tabla ON. permite indicar la condicin que permite relacionar los registros de la tabla con los registros de la consulta SELECT

WHEN MATCHED THEN. El UPDATE que sigue a esta parte se ejecuta cuando la condicin indicada en el apartado ON sea cierta para los dos registros actuales. WHEN NOT MATCHED THEN. El INSERT que sigue a esta parte se ejecuta para cada registro de la consulta SELECT que no pudo ser relacionado con ningn registro de la tabla.

MERGE INTO localidades l USING (SELECT * FROM clientes) c ON (l.localidad=clientes.localidad) WHEN MATCHED THEN UPDATE SET l.provincia=c.provincia WHEN NOT MATCHED THEN INSERT (localidad, provincia) VALUES (c.localidad, c.provincia)

SECUENCIAS
Una secuencia sirve para generar automticamente nmeros distintos Es una rutina interna de Oracle la que realiza la funcin de generar un nmero distinto cada vez. Las secuencias se almacenan independientemente de la tabla, por lo que la misma secuencia se puede utilizar para diversas tablas.

SINTAXIS
CREATE SEQUENCE secuencia [INCREMENT BY n] [START WITH n] [{MAXVALUE n|NOMAXVALUE}] [{MINVALUE n|NOMINVALUE}] [{CYCLE|NOCYCLE}] Donde:

Secuencia. Es el nombre que se le da al objeto de secuencia. INCREMENT BY. Indica cunto se incrementa la secuencia cada vez que se usa. Por defecto se incrementa de uno en uno START WITH. Indica el valor inicial de la secuencia (por defecto 1)

MAXVALUE. Mximo valor que puede tomar la secuencia. MINVALUE. Mnimo valor que puede tomar la secuencia. CYCLE. Hace que la secuencia vuelva a empezar si se ha llegado al mximo valor.

EJEMPLO
CREATE SEQUENCE numero INCREMENT 100 STARTS WITH 100 MAXVALUE 2000

METODOS
NEXTVAL y CURRVAL NEXTVAL incrementa la secuencia y devuelve el valor actual. CURRVAL devuelve el valor de la secuencia, pero sin incrementar la misma.

INSERT INTO plantas(num, uso) VALUES(numeroPlanta.NEXTVAL, 'Suites');

Consultas sobre estructuras jerrquicas

El apartado CONNECT permite indicar que relacin hay que seguir para recorrer el rbol. La palabra PRIOR indica hacia dnde se dirige el recorrido. Finalmente el apartado START indica la condicin de inicio del recorrido (normalmente la condicin que permita buscar el nodo del rbol por el que comenzamos el recorrido, es decir sirve para indicar desde donde comenzamos.

SELECT nombre FROM empleados START WITH nombre='Andrs' CONNECT BY PRIOR n_jefe=n_empleado;

SELECT nombre FROM empleados START WITH nombre='Andrs' CONNECT BY PRIOR n_jefe=n_empleado;

ROLLUP

Esta expresin en una consulta de agrupacin (GROUP BY) permite obtener los subtotales de cada grupo formado y el total general.

SELECT tipo, modelo, SUM(cantidad) FROM existencias GROUP BY tipo,modelo;

SELECT tipo, modelo, SUM(cantidad) FROM existencias GROUP BY ROLLUP (tipo,modelo);

PL SQL

Nos provee una manera de relacionar los conceptos de bases de datos y manejarlos mediante ciertas estructuras de control, dentro del contexto de una herramienta netamente de programacin. Su utilizacin es dentro del administrador de bases de datos Oracle y sus principales caractersticas son la posibilidad que brinda de utilizar sentencias SQL para manipular datos y sentencias de control de flujo para organizar esta manipulacin de datos.

Dentro del lenguaje, es posible declarar constantes y variables, definir procedimientos y funciones y atrapar errores en tiempo de ejecucin. As visto, PL/SQL combina el poder de la manipulacin de datos, con SQL, y las facilidades del procesamiento de los mismos, tal como en los ms modernos lenguajes de programacin.

Ventajas en la utilizacin de PL/SQL


Soporte para SQL Mejor rendimiento Alta productividad Completa portabilidad Integracin con Oracle garantizada Seguridad

Alta productividad

Si se utiliza otros productos de Oracle como Oracle Forms y Oracle Reports, es posible integrar bloques completos de PL/SQL en un trigger de Oracle Forms, debido a que PL/SQL es el mismo en todos los ambientes.

Completa portabilidad

Las aplicaciones escritas con PL/SQL son portables a cualquier sistema operativo y plataforma en la cual se encuentre corriendo Oracle.

Seguridad

Los procedimientos almacenados construidos con PL/SQL previene que se efecte manipulacin de los datos desde el cliente. Adems, se puede restringir el acceso a los datos de Oracle, permitiendo a los usuarios la ejecucin de los procedimientos almacenados para los cuales tengan privilegios solamente.

Estructuras de Bloque
La unidad bsica de codificacin son bloques. Un bloque permite agrupar en forma lgica un grupo de sentencias. Un bloque PL/SQL tiene tres partes: una seccin de declaracin, una seccin de ejecucin y otra de manejo de excepciones.

DECLARE //Seccin declarativa: variables, tipos, y subprogramas de uso local BEGIN //Seccin ejecutable: las instrucciones procedimentales, y de SQL aparecen aqu. Es la nica seccin obligatoria en el bloque.

EXCEPTION //Seccin de manejo de excepciones. Las rutinas de manejo de errores aparecen aqui END;

En la seccin de declaraciones, se indican las variables que sern usadas dentro del bloque y sus tipos. Por ejemplo: DECLARE nombre VARCHAR2(20); precio NUMBER(6,2); CURSOR micursor IS SELECT num_dept, nom_dept, dir_dept FROM dept; c1 micursor%ROWTYPE;

En algunos casos, es posible que se desee que el tipo de una variable coincida con el tipo usado para una columna de una tabla determinada. DECLARE niombre personal.nombre%TYPE;

DECLARE CURSOR mi_cursor IS SELECT salario + NVL(comm,0) wages, nom_emp FROM emp; mi_rec mi_cursor%ROWTYPE;

MANEJO DE CURSORES
Los cursores son reas de trabajo que permiten ejecutar sentencias SQL y procesar la informacin obtenida de ellos. Un cursor devuelve cero, una o ms filas, dependiendo de los criterios con que hayan sido construidos.

Se utilizan tres instrucciones para controlar un cursor: OPEN, FETCH, y CLOSE. En primer lugar, se inicializa el cursor con la sentencia OPEN, la cual identifica al conjunto resultante. Entonces, se usa la sentencia FETCH para recuperar la primera fila; se puede ejecutar FETCH de manera repetida hasta que todas las filas han sido tratadas, cuando se procesa la ltima, se debe cerrar el cursor con la sentencia CLOSE. Se pueden procesar varias consultas de forma paralela, declarando y abriendo mltiples cursores.

Declaracin de un Cursor
CURSOR nombre_cursor [ (parametro[, parametro] )] IS sentencia_select;

Cuando se declara un cursor, se debe ponerle un nombre y asociarlo con una consulta especfica
DECLARE CURSOR c1 IS SELECT num_emp, nom_emp, trab_emp, sal_emp FROM emp WHERE sal_emp>2000;

Apertura de un Cursor

Cuando se abre un cursor, se ejecuta la consulta que tiene asociada, la cual recupera todas las filas que se ven incluidas en su condicin de bsqueda.
DECLARE CURSOR c1 IS SELECT nom_emp, trab_emp FROM emp WHERE sal_emp<3000; BEGIN OPEN c1; END;

Las filas del conjunto resultante no son recuperadas cuando se ejecuta la sentencia OPEN, sino que lo sern ms tarde cuando se ejecute la sentencia FETCH.

Recuperacin de valores de un Cursor


La sentencia FETCH recupera una a una, las filas resultantes de la apertura del cursor. Despus de cada fetch, el cursor avanza a la siguiente fila de la consulta. Normalmente, se emplea la sentencia FETCH con un bucle Loop end loop:

LOOP FETCH c1 INTO IF c1%FOUND THEN -- fetch exitoso ELSE -- fetch fall; se sale del loop EXIT; END IF; END LOOP;

LOOP FETCH c1 INTO mi_record; EXIT WHEN c1%NOTFOUND; -- Procesa la informacin del record END LOOP;

Cierre de un Cursor
La sentencia CLOSE deshabilita el cursor CLOSE c1; Una vez que un cursor se cierra, se puede volver a abrir sin problemas. Cualquier otra operacin sobre un cursor cerrado, provoca una excepcin que se llama INVALID_CURSOR.

Utilizacin de Cursores con bucles FOR

Podemos sustituir las instrucciones de manejo de cursores: OPEN, FETCH y CLOSE, por la utilizacin de bucles FOR. Esto simplifica mucho el funcionamiento ya que no es necesario abrir el cursor, ni realizar el fetch, ni cerrarlo posteriormente, ya que todas estas operaciones van implcitas cuando se usa el bucle FOR.

MANEJO DE ERRORES
En PL/SQL, a un warning o una condicin de error, se le llama excepcin. Las excepciones pueden ser Internas (definidas por el propio sistema), o definidas por el usuario. Ejemplos de excepciones definidas de forma interna son division by zero y out of memory.

DECLARE pe_ratio NUMBER(3,1); BEGIN SELECT precio/ganancias INTO pe_ratio FROM stocks WHERE simbolo=XYZ; -- Esto puede causar el error de divisin entre cero INSERT INTO estadis (simbolo,ratio) VALUES (XYZ,pe_ratio); COMMIT; EXCEPTION WHEN ZERO_DIVIDE THEN -- Controla la excepcin INSERT INTO estadis (simbolo,ratio) VALUES (XYZ,NULL); COMMIT; WHEN OTHERS THEN -- Controla el resto de excepciones ROLLBACK; END; -- El manejador de errores y el bloque acaban aqu

Nombre Excepcin

Gatillada cuando

SQLCODE

ACCESS_INTO_NULL

El programa intent asignar valores a los -6530 atributos de un objeto no inicializado

COLLECTION_IS_NULL

El programa intent asignar valores a -6531 una tabla anidada an no inicializada

CURSOR_ALREADY_OPEN

El programa intent abrir un cursor que -6511 ya se encontraba abierto. Recuerde que un cursor de ciclo FOR automticamente lo abre y ello no se debe especificar con la sentencia OPEN

DUP_VAL_ON_INDEX

El programa intent almacenar valores -1 duplicados en una columna que se mantiene con restriccin de integridad

INVALID_NUMBER

En una sentencia SQL, la conversin de -1722 una cadena de caracteres hacia un nmero falla cuando esa cadena no representa un nmero vlido

LOGIN_DENIED

El programa intent conectarse a Oracle -1017 con un nombre de usuario o password invlido

NO_DATA_FOUND

Una sentencia SELECT INTO no +100 devolvi valores o el programa referenci un elemento no inicializado en una tabla indexada

NOT_LOGGED_ON

El programa efectu una llamada a Oracle -1012 sin estar conectado PL/SQL tiene un problema interno Los elementos de una asignacin (el valor -6501

PROGRAM_ERROR

ROWTYPE_MISMATCH

SELF_IS_NULL

El parmetro SELF (el primero que es -30625 pasado a un mtodo MEMBER) es nulo

STORAGE_ERROR

La memoria se termin o est corrupta

-6500

SUBSCRIPT_BEYOND_COUNT

El programa est tratando de referenciar -6533 un elemento de un arreglo indexado que se encuentra en una posicin ms grande que el nmero real de elementos de la coleccin

SUBSCRIPT_OUTSIDE_LIMIT

El programa est referenciando un -6532 elemento de un arreglo utilizando un nmero fuera del rango permitido (por ejemplo, el elemento -1)

SYS_INVALID_ROWID

La

conversin

de

una

cadena

de -1410

TIMEOUT_ON_RESOURCE

Se excedi el tiempo mximo de -51 espera por un recurso en Oracle

TOO_MANY_ROWS

Una sentencia SELECT devuelve ms de una fila

INTO -1422

VALUE_ERROR

Ocurri un error aritmtico, de -6502 conversin o truncamiento. Por ejemplo, sucede cuando se intenta calzar un valor muy grande dentro de una variable ms pequea

ZERO_DIVIDE

El programa intent efectuar una -1476 divisin por cero

DECLARE out_of_stock EXCEPTION;-- declaracin de la excepcin total NUMBER(4); BEGIN IF total < 1 THEN RAISE out_of_stock;-- llamado a la excepcin END IF; EXCEPTION WHEN out_of_stock THEN -- manejar el error aqu WHEN OTHERS THEN END;

SQLCODE y SQLERRM
Sqlcode siempre retornar el nmero del error de Oracle y un 0 (cero) en caso exitoso al ejecutarse una sentencia SQL. Sqlerrm retornar el correspondiente mensaje de error para la situacin ocurrida. Estas funciones son muy tiles cuando se utilizan en el bloque de excepciones, para aclarar el significado de la excepcin OTHERS.

DECLARE err_num NUMBER; err_msg VARCHAR2(100); BEGIN EXCEPTION WHEN OTHERS THEN err_num := SQLCODE; err_msg := SUBSTR(SQLERRM, 1, 100); INSERT INTO errores VALUES(err_num, err_msg); END;

Subprogramas
Son bloques de instrucciones de PL/SQL que pueden ser invocados por otros y recibir parmetros. En PL/SQL existen dos tipos de subprogramas: Los Procedimientos y las Funciones. Generalmente, se utiliza un procedimiento para ejecutar una accin especfica y una funcin para calcular un valor.

CREATE OR REPLACE PROCEDURE debit_account (idcuenta INTEGER, monto REAL) IS viejosaldo REAL; nuevosaldo REAL; negativo EXCEPTION; BEGIN SELECT bal INTO viejosaldo FROM cuentas WHERE numero = idcuenta; nuevosaldo := viejosaldo monto; IF nuevosaldo < 0 THEN RAISE negativo; ELSE UPDATE cuentas SET bal = nuevosaldo WHERE numero = idcuenta; END IF; EXCEPTION WHEN negativo THEN END debit_account;

Potrebbero piacerti anche