Curso de Oracle Basico e Intermedio 11gR2
Curso de Oracle Basico e Intermedio 11gR2
Curso de Oracle Basico e Intermedio 11gR2
El modelo relacional
E.F. Codd propuso el modelo relacional para sistemas de b.d. En 1970. Sustituy a los modelos ms populares del momento: el jerrquico y el de red. Facilidad de uso y flexibilidad. Constituye la base para el sistema manejador de bd. Relacionales (RDBMS).
Diagrama E-R
Mundo real Modelo conceptual (E-R) Estructura de un diagrama E-R: o RECTNGULOS Entidades o ELIPSES Atributos o ROMBOS Relaciones o LNEAS Conectores Ejemplo de un diagrama E-R:
Oracle 8: ORDBMS
Posibilidad de almacenar objetos (extensin a Oracle7) o Modelo de datos relacional orientado a objeto o Ventajas de la programacin orientada a objetos Respecto a Oracle7: o > rendimiento y funcionalidad de transacciones online o Soporte de aplicaciones cliente-servidor o Soporte de aplicaciones basadas en Web distribuidas o Escalabilidad a decenas de miles de usuarios o Hasta 512 petabytes o Manejo de datos multimedia (imagen sonido, video).
Structured Query Language Establecido como el lenguaje de base de datos relacional estndar. Existen numerosos productos que soportan SQL, cada uno de ellos con pequeas diferencias sin apenas importancia (p.ej. Oracle). El SQL estndar es el publicado por ANSI e ISO.
Caractersticas de S.Q.L.
Lenguaje de definicin de datos (DDL) o Create, Alter, Drop. Lenguaje de manipulacin de datos (DML) o Insert, Update, Delete. Lenguaje de control de datos (DCL) o Grant, Revoke. Control de transacciones o Commit, Rollback, Savepoint Restricciones de integridad o Referencial, datos.
Justificacin de etiquetas y datos por defecto: o Izquierda fechas y caracteres o Derecha datos numricos Etiquetas y datos, por defecto, se muestran en maysculas.
Un alias de columna renombra un encabezamiento de columna. til, especialmente, en clculos. Sintaxis: o Sigue inmediatamente al nombre de la columna mediante la palabra clave AS entre ellos. o Se requiere encerrar un alias entre comillas dobles si contiene espacios en blanco, caracteres especiales o es case sensitive.
SQL> SELECT ename AS nombre, sal salario, sal*12 AS Salario Anual FROM emp; Resultado:
Operadores: o Suma (+) o Resta (-) o Multiplicacin (*) o Divisin (/) Cualquier sentencia SQL Precedencia de operadores: * / + Operadores misma prioridad se evalan de izq. a derecha. Parntesis sobreescriben reglas de precedencia.
S.Q.L.
Valor NULL
NULL es un valor inaccesible, sin valor desconocido o inaplicable. NULL no representa ni un cero ni un blanco. Las expresiones aritmticas que contengan NULL se evalan a NULL (<> cero).
Representado por dos barras verticales: || Vincula columnas o cadenas de caracteres. Crea una columna resultado que es una expresin de tipo carcter. Ejemplo:
Las consultas, por defecto, muestran todas las filas, incluyendo las duplicadas. Las duplicadas se eliminan usando DISTINCT en la clusula SELECT:
Se especifica a continuacin de FROM. La condicin de WHERE permite comparar columnas con otras columnas, valores, literales, expresiones aritmticas o funciones.
Ejemplo:
Aplicables en las condiciones de la clusula WHERE: o = Igual que o > Mayor que o >= Mayor que o igual a o < Menor que o <= Menor que o igual a o <> Distinto o BETWEEN m AND n Entre m y n (inclusive) o IN(lista) Se encuentra en la lista o LIKE Se ajusta a un patrn o IS NULL Es valor nulo
SQL> SELECT ename, saL FROM emp WHERE sal BETWEEN 1000 AND 1500;
SQL> SELECT empno, ename, sal, mgr FROM EMP WHERE mgr IN (7902, 7566, 7788); SQL> SELECT ename FROM emp WHERE ename LIKE _A%; o Sintaxis de LIKE: % representa cero o varios caracteres _ representa un solo carcter SQL> SELECT ename, mgr FROM emp WHERE mgr IS NULL;
AND devuelve TRUE si ambas condiciones son TRUE. OR devuelve TRUE si alguna de las condiciones es TRUE. NOT devuelve TRUE si la siguiente condicin es FALSE.
SQL> SELECT empno, ename, job, sal FROM emp WHERE sal >= 1100 AND job = CLERK; SQL> SELECT empno, ename, job, sal FROM emp WHERE sal >= 2000 OR job = MANAGER; SQL> SELECT ename, job FROM emp WHERE job NOT IN (CLERK, MANAGER, ANALYST);
Siempre es aconsejable, para facilitar la lectura de la sentencia SQL, utilizar parntesis que fuercen la prioridad de los operadores lgicos. Sin parntesis, el orden de evaluacin es: o 1: Todos los operadores de comparacin o 2: NOT o 3: AND o 4: OR
Las filas recuperadas en la sentencia SELECT, si no se especifica nada, no tienen ningn orden determinado. Se pueden ordenar con la clusula ORDER BY siempre al final de una sentencia SELECT. o ASC Orden ascendente. Por defecto. o DESC Orden descendente.
Ejemplo:
Existen dos tipos de funciones: o Funciones a nivel de fila o Funciones a nivel de mltiples filas Funciones a nivel de fila. Tipos: o Carcter o Nmero o Fecha o Conversin Funciones a nivel de grupo. Tipos: o Manipulan grupos de filas y devuelven un resultado por cada uno de ellos.
Pueden ser de dos tipos: o Funciones de conversin o Funciones de manipulacin de caracteres De manipulacin de caracteres: o CONCAT o SUBSTR o LENGTH o INSTR o LPAD Y RPAD De conversin: o LOWER , UPPER e INITCAP
LOWER: Convierte a minsculas. UPPER: Convierte a maysculas. INITCAP: Convierte la primera letra de cada palabra en maysculas, y el resto
en minscula. Atencin: Usar una funcin de conversin dentro de la clusula WHERE puede ser altamente ineficiente porque si la columna afectada forma parte de un ndice ste lo desactiva, provocando un bajo rendimiento.
CONCAT: Concatena dos valores. SUBSTR: Extrae una subcadena. LENGTH: Devuelve la longitud de la cadena. INSTR: Devuelve la posicin de un carcter o subcadena. LPAD: Justifica a la derecha la cadena. RPAD: Justifica a la izquierda la cadena.
ROUND (columna | expresin, n) o Redondea a n posiciones decimales. Si se omite n, no se redondea con decimales. Si n es negativo, los nmeros a la izquierda del punto decimal se redondean a decenas, centenas, ... TRUNC (columna | expresin, n) o Trunca en la ensima posicin decimal. Si se omite n, sin lugares decimales. Si n es negativo, los nmeros a la izquierda del punto decimal se truncan a cero. MOD (m, n) o Devuelve el resto de la divisin de m por n.
SQL> SELECT ROUND(45.923, 2), ROUND(45.923, 0), ROUND(45.923, -1) FROM SYS.DUAL; Resultado: 45.92 46 50 SQL> SELECT TRUNC(45.923, 2), TRUNC(45,923), TRUNC(45.923, -1) FROM SYS.DUAL; Resultado: 45.92 45 40
S.Q.L.
Oracle almacena fechas en un formato numrico interno de 7 bytes: o Siglo, ao, mes, da, horas, minutos, segundos El formato de fecha por defecto es DD-MON-YY SYSDATE es una funcin que devuelve fecha y hora (pseudocolumna del sistema) DUAL es una tabla virtual de la bd., que puede ser usada para inspeccionar SYSDATE.
Sumar o restar un nmero a/o de una fecha da por resultado una fecha. Restar dos fechas para encontrar la cantidad de das entre esas fechas. Sumar horas a una fecha dividiendo la cantidad de horas por 24.
MONHTS_BETWEEN (fecha1, fecha2) o Nmero de meses entre dos fechas. El resultado puede ser positivo o negativo. ADD_MONTHS (fecha, n) o Aade n meses a fecha, segn calendario. N debe de ser un nmero entero y puede ser negativo. NEXT_DAY (fecha, caracter) o Devuelve la fecha del da especificado (carcter) siguiente a fecha. Carcter puede ser un nmero representando un da o una cadena de caracteres, p.ej. FRIDAY.
LAST_DAY (fecha) o Devuelve la fecha del ltimo da del mes que contiene fecha. ROUND (fecha [,fmt]) o Cuando no se especifica ningn formato, devuelve la fecha del primer da del mes contenido en fecha. Si fmt=YEAR, encuentra el primer da del ao.
TRUNC (fecha [,fmt]) o Devuelve la fecha con la porcin del da truncado en la unidad especificada por el modelo de formato fmt. Si se omite el formato, laf echa se trunca en el da ms prximo.
MONTS_BETWEEN (01-SEP-95, 11-JAN-94) 19.6774194 ADD_MONTHS(11-JAN-94, 6) 11-JUL-94 NEXT_DAY (01-SEP-95, FRIDAY) 08-SEP-95 LAST_DAY (01-SEP-95) 30-SEP-95 ROUND (25-JUL-95, MONTH) 01-AUG-95 ROUND (25-JUL-95, YEAR) 01-JAN-96 TRUNC (25-JUL-95, MONTH) 01-JUL-95 TRUNC (25-JUL-95, YEAR) 01-JAN-95
YYYY / YEAR o Ao completo en nmero / Ao en letras MM / MONTH o N del mes con dos dgitos / Nombre completo del mes DY / DAY o Da de la semana en tres letras / Nombre completo del da fm (fill mode) o Elimina los espacios en blanco de relleno o suprime ceros a la izquierda
Obtencin de la hora: o HH / HH12 / HH24 Hora del da / Hora (1-12) / Hora (1-24) o MI / SS / SSSS Minutos / Segundos / Segundos despus de medianoche o AM o PM Indicador del Meridiano o Sufijo SP / SPTH o THSP Deletreo del nmero / Deletreo nmeros ordinales
Se permiten literales
La conversin de tipos de datos puede ser: IMPLCITA: Realizada automticamente por Oracle EXPLCITA: El usuario es quien la realiza Conversin Implcita de datos De VARCHAR2 o CHAR a NUMBER De VARCHAR2 o CHAR a DATE De NUMBER a VARCHAR2 De DATE a VARCHAR2 o Estas conversiones se realizan por asignaciones, si Oracle 8 puede convertir el tipo de dato del valor utilizado en la asignacin en el tipo de dato que era el objetivo de la asignacin.
TO_CHAR (nmero | fecha [,fmt]) o Convierte un nmero o fecha en una cadena de caracteres VARCHAR2 con el modelo de formato fmt. 9: Representa un nmero 0: Fuerza a que se muestra el cero $: Signo de dlar L: Usa el signo de moneda local .: Imprime el punto decimal ;: Imprime el indicador de millar Para fechas, los fmt anteriores.
TO_NUMBER (char) o Convierte una cadena de caracteres con dgitos en un nmero. TO_DATE (char [,fmt]) o Convierte una cadena de caracteres representando una fecha en un valor de fecha segn el fmt especificado. Si se omite el fmt, el formato es DD-MON-YY. NVL (expr1, expr2)
Hace las veces de sentencia CASE o IF-THEN-ELSE, para facilitar consultas condicionales. o Descifra una expresin despus de compararla con cada valor de bsqueda. Si la expresin es la misma que la bsqueda, se devuelve el resultado. Si se omite el valor por defecto, se devolver un valor nulo donde una bsqueda no coincida con ninguno de los valores resultantes.
SQL> SELECT job, sal, DECODE (job, ANALYST, sal*1.1, CLERK, sal*1.15, MANAGER, sal*1.20, sal) AS Nuevo salario FROM emp; Si job = ANALYST entonces el salario se incrementa en un 10% Si job = CLERK entonces se incrementa en un 15% Si jog = MANAGER entonces se incrementa en un 20% Para otro caso, entones no hay incremento de salario
Solucin: Uso de la funcin NVL para forzar a las funciones de grupo que admitan los valores nulos.
Crea grupo de datos, por lo tanto se pueden usar funciones de grupo para devolver informacin resumida para cada grupo.
TEMA 5 JOIN
S.Q.L. Concepto de JOIN
Un JOIN se utiliza para consultar datos de ms de una tabla La condicin de JOIN se escribe en la clusula WHERE. Si existen columnas con el mismo nombre en las tablas seleccionadas, se debern nombrar los campos Ejemplo:
Existen dos tipos principales de JOIN: o EQUIJOIN Join sobre dos o ms tablas, por igualdad de campos. o NON-EQUIJOIN Por desigualdad, sin correspondencia directa entre campos de tablas. La relacin se puede establecer mediante criterios de rango (<, >, BETWEEN, ...) Y dos ms adicionales: o OUTER JOIN Para ver, tambin, las filas que no complen la condicin de Join. El operador de un Outer Join es el signo ms (+), en el lado del join que es deficiente en informacin. o SELF JOIN Combinacin de una tabla consigo misma.
Ya que la columna DEPTNO es igual en ambas tablas, sta debe ir prefijada por
En este ejemplo se han usado alias de tablas (e para la tabla emp y s para la tabla salgrade).
En este ejemplo se muestran los nmeros y nombres de todos los departamentos, incluidos aquellos que no tienen empleado. Si se le aade: AND emp.deptno is null, slo se mostraran las no coincidencias.
En este ejemplo la clusula WHERE contiene la combinacin "dnde un jefe de un trabajador coincide con el nmero de empleado para el jefe".
TEMA 6 SUBCONSULTAS
S.Q.L. Cundo subconsultas?
La subconsulta se ejecuta una vez y antes de la consulta principal. El resultado de ella es usado por la consulta principal externa.
S.Q.L.
Encierre las subconsultas entre parntesis. No aada una clusula ORDER BY a una subconsulta. Utilice operadores a nivel de fila para subconsultas que devuelvan solo una fila MONOREGISTRO. Utilice operadores que actan sobre varios registros para subconsultas que devuelven ms de una fila MULTIREGISTRO.
Devuelven un nico registro. Se utilizan operadores de comparacin (=, >, >=, <, <= y <>). Ejemplo:
Devuelven ms de un registro Se utilizan comparadores multiregistro: o IN TRUE si se encuentra en la lista. o ANY (y sinnimo SOME) TRUE si la condicin se cumple con algn registro de la lista devuelta por la subconsulta. o ALL TRUE si la condicin se cumple con todos los registros de la lista devuelta por la subconsulta. El operador NOT puede ser utilizado con los operadores IN, ANY y ALL.
Puede utilizar una subconsulta en una clusula FROM de una sentencia SELECT:
Este ejemplo muestra los nombres, salarios, nm. Departamentos y media de salarios, de todos los empleados que cobran ms que la media de salarios de su departamento.
TEMA 7 D.M.L.
S.Q.L. Manipulacin de Datos (DML)
Sentencias DML son: o INSERT Aade registros a una tabla. o UPDATE Modifica registros existentes de una tabla. o DELETE Elimina registros existentes de una tabla.
Estas sentencias se completan con los comandos de control de transaccin (DCL), las cuales aseguran la consistencia de los datos. o COMMIT Finaliza la transaccin actual haciendo que todos los cambios pendientes pasen a ser permanentes. o ROLLBACK Finaliza la transaccin en curso descartando todos los cambios pendientes. o SAVEPOINT Establece una "marca" dentro de la transaccin en curso, usada por COMMIT o ROLLBACK.
Mediante esta sentencia slo se inserta un registro cada vez. El nombre de las columnas es opcional. Si se omiten se deben colocar los valores en el orden que las columnas tienen en la tabla. Caracteres y fechas entre comillas simples.
S.Q.L.
Mtodo Explcito: Especificar NULL o el string vaco (), para cadenas y fechas, en la lista de VALUES:
Se escribe el comando INSERT con una subconsulta. No usar la clusula VALUES. Deben coincidir el nmero de columnas de INSERT con el de la subconsulta
S.Q.L.
La Sentencia UPDATE
Los registros a modificar se especifican por medio de la clusula WHERE. Si se omite WHERE se modificaran todos los registros de la tabla.
P.ej.: Modificar el oficio y departamento del empleado 7698, con los valores correspondientes actualmente al empleado 7499:
Los registros a eliminar se especifican en la clusula WHERE. Si se omite WHERE se borrarn todos los registros de la tabla.
Utilice subconsultas en sentencias DELETE, para eliminar registros de una tabla, basados en valores de otra tabla:
TEMA 8 D.D.L.
S.Q.L. Definicin de Datos (DDL)
Sentencias DDL son: o CREATE TABLE Crea una tabla. Para ello el usuario debe de tener el privilegio CREATE TABLE. o ALTER TABLE Permite modificar la estructura definida para una tabla. o DROP TABLE Elimina una tabla (datos y estructura) y sus ndices. No se puede hacer Rollback de esta sentencia. o RENAME Cambia el nombre de una tabla, vista, secuencia o sinnimo.
Necesario tener privilegio CREATE TABLE. Ha de especificar: o Nombre de tabla o Para las columnas: nombre, tipo de dato y tamao.
Deben de comenzar con una letra. Pueden tener una longitud de 1 30 caracteres de largo. Deben contener solamente A-Z, a-z, 0-9, _, $ y #. No deben duplicar el nombre de otro objeto que sea propiedad del mismo
usuario o schema. No debe ser una palabra reservada del servidor Oracle8.
Se puede crear una tabla e insertar filas combinando el comando CREATE TABLE con la opcin AS subconsulta. Es necesario hacer coincidir la cantidad de columnas especificadas con las de la subconsulta. Si no se indican nombres de columnas, stas sern los mismos que los de la subconsulta.
Ejemplo:
La nueva columna aparecer en el ltimo lugar de la tabla. No se puede especificar el orden. Puede aadir o modificar columnas, pero no eliminarlas de una tabla. Si la tabla ya contiene registros al aadir una nueva columna, sta se inicializar con valores nulos para todos los registros.
Puede definir una columna NOT NULL slo si la tabla est vaca.
Puede cambiar el tipo de datos de una columna, su tamao y valor por defecto Si cambia el valor por defecto, afectar slo a sucesivas inserciones en la tabla.
Se borra estructura, datos e ndices de la tabla. Borrado Fsico. No se puede hacer Rollback de la sentencia. Slo el propietario de la tabla u otro usuario con el permiso DROP ANY TABLE puede eliminar una tabla.
Permite cambiar el nombre de una tabla, vista, secuencia o sinnimo. Debe ser el propietario del objeto.
TEMA 9 VISTAS
S.Q.L. Concepto de Vista
Una vista es una tabla lgica basada en una tabla u otra vista. No contiene datos en s misma, pero es como una ventana a travs de la cual se pueden ver o cambiar los datos de las tablas. Podemos representar con ellas subconjuntos lgicos o combinaciones de datos. Las tablas sobre las cuales se basa una vista se llaman tablas base. Se almacenan en el Diccionario de Datos, USER_VIEWS.
Para restringir el acceso a la B.D. Para realizar consultas complejas de manera fcil. Para obtener una independencia de los datos Para presentar diferentes vistas de los mismos datos.
FORCE: Crea la vista sin importar que la tabla base exista o no. WITH CHECK OPTION: Especifica que solamente las filas accesibles a la vista pueden ser insertadas o actualizadas. CONSTRAINT: Nombre asignado a la restriccin CHECK OPTION. WITH READ ONLY: Asegura que ninguna operacin DML pueda realizarse sobre esta vista.
Al borrar una vista no perder los datos, porque la vista est basada en tablas subyacentes de la B.D. nicamente el creador o un usuario con el privilegio DROP ANY VIEW puede eliminar una vista.
Se pueden realizar operaciones DML sobre vistas simples. No se puede eliminar una fila si la vista contiene Funciones de grupo, una clusula GROUP BY o el comando DISTINCT. No es posible modificar datos en la vista si contiene cualquiera de las condiciones anteriores, columnas definidas por expresiones o la pseudocolumna ROWNUM No se puede agregar datos si la vista contiene cualquiera de las condiciones anteriores o cualquier columna NOT NULL no incluida por la vista (tabla base).
Simplifican el acceso a los objetos al crear otro nombre para un objeto (sinnimo). Hacen referencia a una tabla propia o de otro usuario. Permite acortar la longitud de los nombre de los objetos a la vez que elimina la necesidad de cualificar el objeto con un esquema. El DBA puede crear un sinnimo pblico accesible a todos los usuarios.
SQL*PLUS es una herramienta de Oracle que reconoce y enva sentencias SQL al servidor Oracle para su ejecucin. Contiene su propio lenguaje de comandos. Permite abreviatura de palabras claves de SQL*PLUS. Permite guardar y recuperar sentencias SQL en archivos.
A[PPEND] texto C[HANGE] /antiguo /nuevo C[HANGE] /texto / CL[EAR] BUFF[ER] DEL [n] [m] I[INPUT] [texto]
SAV[E] nombre_fichero[.ext] [REP[LACE] | APP[END]] GET nombre_fichero[.ext] STA[RT] nombre_fichero[.ext] @nombre_fichero[.ext] ED[IT] nombre_fichero[.ext] SPO[OL] [nombre_fichero[.ext] | OFF | OUT] EXIT
Usar variables de sustitucin de SQL*PLUS para almacenar valores en forma temporal con &variable. El doble ampersand && para cuando se quiere reutilizar el valor de una variable sin tener que preguntarle al usuario cada vez.
Use una variable precedida con un ampersand (&) para pedir un valor al usuario:
Si la variable no existe, SQL*PLUS le solicita al usuario un valor. SQL*PLUS no descarta la nueva variable una vez que esta es usada.
SQL*PLUS
SET VERIFY { ON | OFF } Definiendo este parmetro en ON, fuerza a SQL*PLUS a visualizar el texto de un comando antes y despus de que la variable sea remplazada con valores:
Se predefinen variables usando uno de los dos comandos SQL*PLUS siguientes: o DEFINE Crea una variable de usuario de tipo CHAR. o ACCEPT Acepta un valor introducido por el usuario y lo almacena en una variable, adems de permitir introducir literales informativos as como definir el tipo de variable.
Crea un prompt personalizado para aceptar datos del usuario. Define explcitamente una variable de tipo NUMBER o DATE. Le oculta al usuario el dato que est introduciendo, por razones de seguridad.
Verifique los valores que tiene definidos por medio del comando SHOW.
FEED[BACK] { 6 | n | ON | OFF] HEA[DING] { OFF | ON } LIN[ESIZE] {80 | n } LONG { 80 | n } PAGES[IZE] { 24 | n } PAU[SE] { OFF | ON | text } TERM[OUT] { OFF | ON }
COL[UMN] [opcin_de_columna] BRE[AK] [ON elemento_del_informe] TTI[TLE] [texto | OFF | ON] BTI[TLE] [texto | OFF | ON]
CLE[AR] Limpia cualquier formato definido. FOR[MAT] formato Cambia la visualizacin de la columna segn un modelo de formato. HEA[DING] texto Define la cabecera para una columna JUS[TIFY] {alineacin} Alinea la cabecera de una columna a la izqda., centro o derecha. PRI[NT] / NOPRI[NT] Muestra / Oculta la columna. NUL[L] texto Especifica el texto a visualizar en caso de valores nulos. WRA[PPED] Contina escribiendo en las lneas siguientes.
An 9 0 $ L . ,
Ancho de columna de n Suprime ceros Fuerza ceros Signo dlar flotante Moneda local 999999 1234 099999 01234 $9999 L9999 $1234 L1234
Posicin del punto decimal 9999.99 1234.00 Separador de miles 9,999 1,234
Suprime duplicados y secciona registros: o Para suprimir duplicados: SQL> BREAK ON ename ON job o Para producir totales globales: SQL> BREAK ON report o Para seccionar valores segn la ruptura: SQL> BREAK ON ename SKIP 4 ON job SKIP2 o Limpiar todas las definiciones BREAK: SQL> CLEAR BREAK
Definir cabecera del informe: SQL> TTITLE Informe de|Salarios Definir el pie de pgina del informe: SQL> BTITLE Confidencial
TEMA 11 PL/SQL
PL/SQL Qu es PL/SQL?
Lenguaje de procesamiento procedimental. Implementado por Oracle. Dispone de estructuras de programacin similares a las de la mayora de los lenguajes de programacin. Objetivo: Interactuar con la B.D.
[DECLARE] Define objetos PL/SQL que sern utilizados dentro del mismo bloque BEGIN Sentencias Ejecutables [EXCEPTION] Qu hacer si la accin ejecutada causa error END;
PROCEDURE nombre IS Seccin Declarativa BEGIN Seccin Ejecutable [EXCEPTION] Seccin de Excepciones END;
FUNCTION nombre RETURN tipo_dato IS Seccin Declarativa BEGIN Seccin Ejecutable [EXCEPTION] Seccin de Excepciones END;
Reglas para nombres: o Dos variables pueden tener el mismo nombre, si estn en bloques diferentes. o El nombre de la variable (identificador) no debera ser el mismo que el de una columna de una tabla utilizada en el bloque.
Asignacin:
Inicializacin:
VARCHAR2 (longitud_mxima) NUMBER [(precisin, escala)] DATE CHAR [(longitud_mxima)] LONG LONG RAW BOOLEAN BINARY_INTEGER
Permite declarar una variable basada en: o Otras variables previamente declaradas o La definicin de una columna de la base de datos Preceder de %TYPE por: o La tabla y la columna de la base de datos o El nombre de la variable definida con anterioridad Ejemplo: v_ename emp.ename%TYPE;
A una variable Boolean slo se le pueden asignar los valores: TRUE, FALSE o NULL. Estas variables estn conectadas por los operadores lgicos AND, OR y NOT.
Sintaxis:
Declarar un registro para almacenar el nmero de empleado, nombre, trabajo y sueldo de un nuevo empleado:
Los componentes individuales del registro se referenciarn de forma cualificada; en este ejemplo:
Define un registro con la estructura de la tabla o vista de la B.D. Los campos del registro toman sus nombres y tipos de datos de las columnas de la vista o tabla. Ejemplo: DECLARE registro_empleado emp%ROWTYPE;
El nmero y los tipos de datos de las columnas de la tabla pueden no ser conocidos. Simplifica la programacin al no tener que definir explcitamente los campos y tipos del registro. Es til para realizar recuperaciones de filas con la sentencia SELECT:
PL/SQL
Tablas PL/SQL
Cuentan con dos componentes: o TIPO DE DATOS DE CLAVE PRIMARIA BINARY_INTEGER o COLUMNA DE TIPO DE DATOS ESCALARES O DE REGISTRO. Aumentan dinmicamente porque no tienen restricciones. Se almacenan en memoria.
Sintaxis:
Ejemplo:
Permiten almacenar bloques de datos no estructurados, como pantallas de texto, imgenes grficas, vdeo clips, y sonido, de hasta 4 Gb. de tamao. Character Large Object. Se utiliza para almacenar bloques grandes de datos de caracteres. Binary Large Object. Se utiliza para almacenar objetos binarios grandes en la B.D. Binary File. Se utiliza para almacenar objetos binarios grandes en archivos del sistema operativo, fuera de la B.D.
National Language Character Large Object. Se utiliza para almacenar en la NCLOB B.D. bloques grandes de datos NCHAR de un byte nico o multi-bytes de ancho fijo.
Son variables de SQL*Plus. Las pueden referenciar bloques de PL/SQL mediante el uso del ampersand (&).
Ejemplo:
S.Q.L. Ejercicios
Basados en las tablas emp y dept del usuario Scott de la database Oracle. Crear el modelo de datos necesario para representar la actividad de un Videoclub. Mostrar los nombres de los empleados del deptno 10, junto con los meses que llevan trabajando en la empresa. Extraer el nombre de empleado y su fecha de alta en la empresa con formato Dia ( letras) , mes ( letras ), ao, horas, minutos y segundos. Mostrar el n de empleado, job, nombre, as como la comisin. Si no tiene comisin, poner el texto Sin Comisin. La informacin debe de salir ordenada por n de empleado en descendente. N de empleado con el salario mas alto. Nombre de deptno y Nombre de empleado que mas tarde entr en la empresa, para cada uno de los departamentos. Incrementar un 20% el salario de todos los empleados que no son de Bostn. Borrar los empleados cuyo nombre no comienza por A , que no son Analistas y que trabajan en New York. Nombre de empleado, suma de salario y comisin para los empleados cuyo salario es superior a la media de su departamento.
Comentarios en PL/SQL: o Anteponga a los comentarios de una sola lnea dos guiones (--) a modo de prefijo. o Coloque comentarios de varias lneas entre /* y */. Operadores de PL/SQL: Exponenciacin, negacin lgica Identidad, negacin Multiplicacin, divisin Suma, resta, concatenacin
**, NOT +, *, / +, -, ||
=, !=, <, >, <=, >=, IS NULL, LIKE, BETWEEN, IN Comparacin AND OR Conjuncin Inclusin
Para hacer referencia a una variable de sustitucin en PL/SQL debe anteponer a su nombre dos puntos (:) a modo de prefijo:
Directrices de Programacin para facilitar el mantenimiento del cdigo: o Documente el cdigo con comentarios. o Desarrolle una convencin de maysculas/minsculas para el cdigo. o Desarrolle convenciones de nomenclatura para identificadores y otros objetos. o Sangre el cdigo para facilitar la lectura. o Evite la ambigedad entre variables locales, parmetros formales y nombres de columnas de las tablas de la B.D.
Cuando trabaje con valores nulos puede evitar algunos de los errores ms habituales si recuerda las siguientes reglas:
o o o
Las comparaciones en las que se incluyen valores nulos siempre resultan NULL. Si se aplica el operador lgico NOT a un valor nulo resulta NULL. En las sentencias de control condicionales, si la condicin resulta NULL, no se ejecutarn las sentencias asociadas.
SELECT recupera exactamente UNA fila. INSERT aade una fila. UPDATE modifica una o ms filas existentes. DELETE suprime una o ms filas existentes. COMMIT hace permanentes todas las modificaciones pendientes. ROLLBACK elimina todas las modificaciones pendientes. SAVEPOINT marca un punto intermedio en el procesamiento de las transacciones.
Sintaxis:
Recuerde, slo se debe de recuperar una fila. Ms de una fila provocar errores.
especfico:
Aumente el salario de todos los empleados de la tabla emp que son Analistas:
COMMIT finaliza la transaccin actual realizando todos los cambios pendientes en la B.D.
Puede modificar el flujo lgico de sentencias utilizando sentencias IF condicionales y estructuras de control de bucles. Sentencias IF condicionales: o IF-THEN o IF-THEN-ELSE o IF-THEN-ELSIF Control de bucles: o Bucle bsico LOOP o Bucle FOR o Bucle WHILE
PL/SQL Sentencia IF
Sintaxis:
Sintaxis:
Sintaxis:
No declare el ndice; se declara implcitamente como un BINARY_INTEGER. Fuera del bucle el ndice no est definido. Los lmites desde..hasta deben de ser literales numricos. Pueden ser expresiones que se convierten en valores numricos.
Sintaxis:
Puede anidar bucles a varios niveles. Utilice etiquetas para distinguir entre los bloques y los bucles. Salga al bucle externo con la sentencia EXIT que hace referencia a la etiqueta. Los nombres de etiquetas deben ir antes de la palabra LOOP y entre los delimitadores << >>.
Ejemplo:
Basados en las tablas Emp & Dept del esquema del usuario Scott de Oracle Actualizar los vendedores con una comisin mayor que 350$ con un incremento del 15% de su salario. Si la operacin afecta a mas de tres empleados, deshacer la transaccin, en cualquier otro caso validar la transaccin. Informar por pantalla de la operacin realizada. Insertar en la tabla TEMP 100 filas. En la primera columna se insertar un ndice secuencial (1, 2, 3...) y en la segunda columna un comentario indicando si el nmero generado es par o impar. Actualizar el trabajo a DIRECTOR a todos aquellos empleados cuyo salario sea mayor que 2000$. Almacenar el nmero de empleados actualizados por la operacin en la tabla TEMP. Si los afectados son mas de cinco personas, borrar los empleados cuyo salario sea mayor que 3000$, insertar en la tabla TEMP el nmero de empleados borrados y validar la transaccin. Calcular por medio de un bloque PL/SQL 9i annimo el total de ganancias de los empleados (salario y comisin) y cuntos de stos tienen un salario superior a 2000$ para todos los departamentos de la empresa.
TEMA 13 CURSORES
PL/SQL Definicin de Cursor
tiles para las consultas que devuelven ms de una fila. Son declarados y nombrados por el programador, y manipulados por medio de sentencias especficas en las acciones ejecutables del bloque.
No incluya la clusula INTO en la declaracin del cursor. Si es necesario procesar filas en algn orden, incluya la clusula ORDER BY.
Si la consulta no devuelve ninguna fila, no se producir ninguna excepcin al abrir el cursor. Para los cursores declarados con la clusula FOR UPDATE, la sentencia OPEN bloquea estas filas.
Incluya, en el FETCH, el mismo nmero de variables que las definidas en el cursor, y en el mismo orden. Compruebe si el cursor tiene filas.
PL/SQL
Cierre el cursor una vez completado el procesamiento de las filas. Si es necesario, vuelva a abrir el cursor. No intente recuperar los datos de un cursor una vez que ha sido cerrado (INVALID_CURSOR).
Permite abrir un cursor varias veces con un juego activo distinto cada vez.
El bloqueo explcito le permite denegar el acceso mientras dura una transaccin. Bloquee las filas antes de la actualizacin o supresin. La clusula FOR UPDATE es la ltima clusula de una sentencia SELECT, incluso despus del ORDER BY. NOWAIT devuelve un error de Oracle si las filas han sido bloqueadas por otra sesin, de lo contrario se espera.
Incluya la clusula FOR UPDATE en la definicin del cursor para bloquear las filas. Especifique WHERE CURRENT OF en la sentencia UPDATE o DELETE para referirse a la fila actual del cursor.
TEMA 14 EXCEPCIONES
PL/SQL Concepto de Excepcin
Qu es una excepcin? Es un identificador de PL/SQL que surge durante la ejecucin. Cmo surge? Se produce por un error Oracle o bien puede ser provocada explcitamente. Cmo se gestiona? Interrumpindola con un manejador de excepciones o propagndola al entorno de llamadas.
PL/SQLExcepciones de Oracle
SQLERRM
PL/SQL RAISE_APPLICATION_ERROR
Sintaxis:
Utilice el procedimiento RAISE_APPLICATION_ERROR para comunicar de forma interactiva una excepcin predefinida, devolviendo un cdigo y un mensaje de error no estndar.
PL/SQL RAISE_APPLICATION_ERROR
Se utiliza en dos lugares distintos: o SECCIN EJECUTABLE o SECCIN DE EXCEPCIONES Ejemplos: