Libro de Referencia Del Curso

113
FACULTAD DE INGENIERÍA ELECTRÓNICA Y TELECOMUNICACIONES - FIET DEPARTAMENTO DE SISTEMAS ESPECIALIZACIÓN EN DESARROLLO DE SOLUCIONES INFORMÁTICAS (EDSI)

description

Bases de Datos

Transcript of Libro de Referencia Del Curso

  • FACULTAD DE INGENIERA ELECTRNICA Y TELECOMUNICACIONES - FIET

    DEPARTAMENTO DE SISTEMAS

    ESPECIALIZACIN EN DESARROLLO DE SOLUCIONES INFORMTICAS (EDSI)

  • UNIVERSIDAD DEL CAUCA

    FACULTAD DE INGENIERA ELECTRNICA Y TELECOMUNICACIONES - FIET

    DEPARTAMENTO DE SISTEMAS

    Libro: MANIPULACIN AVANZADA DE BASES DE DATOS

    Profesor: MIGUEL ANGEL NIO ZAMBRFANO

    Popayn, Colombia, Junio de 2009

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 2

    TABLA DE CONTENIDO

    1 CAPTULO 1: INTRODUCCIN A LA MANIPULACION DE DATOS CON SQL Y ORACLE. 4 1.1 COMANDOS DE RECUPERACIN DE INFORMACION.................................................................................. 4 1.2 FUNCIONES Y TIPOS DE DATOS .................................................................................................. 12 1.3 REPORTES EN SQL*PLUS .............................................................................................................. 17 1.4 MANIPULACIN DE DATOS ......................................................................................................... 22 1.5 TABLAS Y VISTAS .......................................................................................................................... 25 1.6 OPTIMIZACIN DE INSTRUCCIONES DE MANIPULACIN DE DATOS EN SQL .......................................... 36

    2 CAPTULO 2: INTRODUCCIN A PL/SQL..................................................................................... 42 2.1 QU ES PL/SQL?............................................................................................................................... 42 2.2 ESTRUCTURAS DE BLOQUE.................................................................................................................. 42 2.3 VARIABLES Y CONSTANTES ................................................................................................................. 43 2.4 CURSORES ........................................................................................................................................... 43 2.5 MANEJO DE ERRORES.......................................................................................................................... 44 2.6 SUBPROGRAMAS.................................................................................................................................. 45 2.7 PAQUETES ........................................................................................................................................... 45 2.8 VENTAJAS EN LA UTILIZACIN DE PL/SQL.......................................................................................... 46

    3 CAPTULO 3: FUNDAMENTOS DEL LENGUAJE ......................................................................... 50 3.1 SET DE CARACTERES Y UNIDADES LXICAS ........................................................................................ 50 3.2 DELIMITADORES E IDENTIFICADORES .................................................................................................. 51 3.3 TIPOS DE DATOS Y CONVERSIONES ..................................................................................................... 52 3.4 ALCANCE Y VISIBILIDAD ..................................................................................................................... 55

    4 CAPTULO 4: ESTRUCTURAS DEL LENGUAJE........................................................................... 57 4.1 CONTROL CONDICIONAL: SENTENCIA IF ............................................................................................. 58 4.2 CONTROLES DE ITERACIN: LAS SENTENCIAS LOOP Y EXIT ............................................................. 61 4.3 CONTROLES DE SECUENCIA: LAS SENTENCIAS GOTO Y NULL .......................................................... 66 4.4 PROCESAMIENTO DE TRANSACCIONES ................................................................................................ 68

    5 CAPTULO 5: MANEJO DE CURSORES ......................................................................................... 72 5.1 DECLARACIN DE CURSORES .............................................................................................................. 73 5.2 APERTURA DE UN CURSOR .................................................................................................................. 74 5.3 RECUPERACIN DE FILAS .................................................................................................................... 76 5.4 CIERRE DE UN CURSOR........................................................................................................................ 79

    6 CAPTULO 6: MANEJO DE ERRORES............................................................................................ 80 6.1 EXCEPCIONES PREDEFINIDAS ............................................................................................................... 80 6.2 EXCEPCIONES DEFINIDAS POR EL USUARIO .......................................................................................... 82 6.3 USO DE SQLCODE Y SQLERRM ...................................................................................................... 84

    7 CAPTULO 7: SUBPROGRAMAS...................................................................................................... 86 7.1 PROCEDIMIENTOS ................................................................................................................................ 88 7.2 FUNCIONES.......................................................................................................................................... 89

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 3

    7.3 USO DE PARMETROS ......................................................................................................................... 91 7.4 RECURSIVIDAD .................................................................................................................................... 93 7.5 POLIMORFISMO.................................................................................................................................... 95

    8 CAPTULO 8: PAQUETES .................................................................................................................. 98 8.1 VENTAJAS DE LA UTILIZACIN DE PAQUETES ...................................................................................... 99 8.2 ESPECIFICACIN DE PAQUETES.......................................................................................................... 101 8.3 CUERPO DE UN PAQUETE................................................................................................................... 101

    9 BIBLIOGRAFIA .................................................................................................................................... 103

    TABLA DE ANEXOS

    ANEXO A: LABORATORIOS DEL CURSO.................................................................................................. 104 ANEXO B: MODELO DE DATOS DEL LIBRO DE REFERENCIA ............................................................. 110 ANEXO C: SCRIPTS DE CREACION DE TABLAS...................................................................................... 111 ANEXO D: SCRIPTS DE CARGA DE DATOS.............................................................................................. 112

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 4

    1 CAPTULO 1: INTRODUCCIN A LA MANIPULACION DE DATOS CON SQL Y ORACLE

    Los comandos de SQL permiten crear, almacenar, cambiar, recuperar, y mantener la informacin almacenada en la base de datos de ORACLE. Podemos clasificar los comandos de SQL en tres grupos:

    Comandos de manipulacin de datos. Comandos de definicin de datos. Comandos varios.

    1.1 COMANDOS DE RECUPERACIN DE INFORMACION SELECT Esta sentencia muestra una o ms filas, con sus respectivas columnas, las cuales pueden ser extradas de una o ms tablas, vistas o sinnimos. El nmero de columnas a visualizar puede ser parcial o total.

    Para poder utilizar esta sentencia, es necesario: - Existencia de la tabla, vista o sinnimo a visualizar. - Poseer el privilegio de acceso a la tabla, vista o sinnimo o los privilegios del administrador de la base de datos (DBA).

    Los parmetros mnimos requeridos para el uso de esta sentencia son: SELECT Columnas FROM Origen_datos

    Columnas: son los nombres de todas aquellas columnas que se desea visualizar, los cuales debern de estar separados por una coma (,). Si se desean visualizar todas las columnas de la tabla, se podr abreviar la operacin, colocando en lugar de los nombre de las columnas, un asterisco (*); adicionalmente puede usarse como columnas de visualizacin las constantes, operaciones aritmticas, funciones, nidos de funciones y funciones de grupo.

    Origen_datos: son los nombres de todas aquellas tablas, vistas o sinnimos de los cuales se desea extraer la informacin, los cuales debern estar separados por una coma (,).

    Seleccin de columnas Como se dijo anteriormente se pueden visualizar de forma total o parcial las columnas de una tabla. A continuacin se muestra un ejemplo de cada caso:

    Caso 1:

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 5

    Visualizacin de todas las columnas de la tabla empleado, usando para ello, los nombres de cada una de las columnas. Nota: lo indicado en cursiva pertenece al prompt de SQL, por lo tanto no deber transcribirse. SQL> SELECT NOMBRE, CARGO, SALARIO, NUMDEPT

    2 FROM EMPLEADO;

    Visualizacin de la ejecucin: NOMBRE CARGO SALARIO NUMDEPT ------------------------------ -------------------- ----------- ------------------

    MARA PREZ SECRETARIA 20.000 02 LUIS CARRILLO CHOFER 10.000 01 FRANCISCO MONTERO GERENTE 35.000 01 LAURA MONTILLA GERENTE 38.000 01 CARLOS FERNANDEZ CHOFER 11.000 02

    Caso 2: Visualizacin de todas las columnas de la tabla empleados, usando para ello, el asterisco (*). Nota: Suponer para este ejemplo que la tabla empleado, tiene las siguientes columnas: - NOMBRE - CARGO - SALARIO - NUMDEPT SQL> SELECT * 2 FROM EMPLEADO;

    Visualizacin de la ejecucin: NOMBRE CARGO SALARIO NUMDEPT ----------------------------- -------------------- ----------- ------------------

    MARA PREZ SECRETARIA 20.000 02 LUIS CARRILLO CHOFER 10.000 01 FRANCISCO MONTERO GERENTE 35.000 01 LAURA MONTILLA GERENTE 38.000 01 CARLOS FERNANDEZ CHOFER 11.000 02

    Caso 3: Visualizacin de la columna NOMBRE y SALARIO, de la tabla empleados, calculando a su vez un bono del 10 %. SQL> SELECT NOMBRE, SALARIO, SALARIO*.10 BONO 2 FROM EMPLEADO;

    Visualizacin de la ejecucin: NOMBRE SALARIO BONO

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 6

    ------------------------------ ----------------- ----------------

    MARA PREZ 20.000 2.000 LUIS CARRILLO 10.000 1.000 FRANCISCO MONTERO 35.000 3.500 LAURA MONTILLA 38.000 1.800 CARLOS FERNANDEZ 11.000 1.100

    Si al momento de manipular una tabla, no recuerda los nombres de las columnas o el tipo al cual pertenecen, se puede usar el comando DESCRIBE el cual facilitar dicha informacin. DESCRIBE Origen_datos Abreviacin: DESC Origen_datos: es el nombre de la tabla, vista o sinnimo de la cual se desea conocer: el nombre de las columnas; con datos nulos; y tipo de las columnas (Number, Char, etc.). Ejemplo: SQL > DESCRIBE EMPLEADO;

    Visualizacin de la ejecucin: Name NULL? Type -------------- -------------- -------------------------

    NOMBRE CHAR(15) CARGO CHAR(15) SALARIO NUMBER(8,2) NUMDEPT CHAR(10)

    Suponga el caso donde se desea conocer, los nombre de todos los cargos de empleados, que existen en nuestra empresa. Para ello se asume que dicha informacin no se repetir. Para lograr esto debe hacer uso del parmetro DISTINCT, perteneciente a la sentencia SELECT. La sintaxis es la siguiente:

    SELECT DISTINCT Columnas FROM Origen_datos A continuacin se muestra un ejemplo para visualizar todos los cargos que posee nuestra empresa, sin repetir ningn cargo. SQL > SELECT DISTINCT CARGO 2 FROM EMPLEADO; Visualizacin de la ejecucin: CARGO ---------------------

    SECRETARIA CHOFER GERENTE

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 7

    Operadores de seleccin Los operadores de seleccin combinan dos consultas o sub-consultas en un resultado. Operadores de seleccin: - UNION - INTERSECT - MINUS

    UNION: Busca filas comunes y no comunes en dos o ms tablas. Ejemplo: Mostrar todos los empleados que ganen ms de 20000. Esto se deber de realizar para todos los departamentos. SQL > SELECT NOMBRE, SALARIO 2 FROM EMP_TALLER 3 WHERE SALARIO > 20000 4 UNION 5 SELECT NOMBRE, SALARIO 6 FROM EMP_ADMIN 7 WHERE SALARIO > 20000 8 UNION 9 SELECT NOMBRE, SALARIO 10 FROM EMP_COMPUT 11 WHERE SALARIO > 20000;

    INTERSECT: Busca las filas comunes en dos o ms tablas. Ejemplo: Mostrar todos los cargos que sean comunes, para todos los departamentos. SQL > SELECT CARGO 2 FROM EMP_TALLER 3 INTERSECT 4 SELECT CARGO 5 FROM EMP_ADMIN 6 INTERSECT 7 SELECT CARGO 8 FROM EMP_COMPUT;

    MINUS: Busca las filas que aparezcan en la primera consulta, pero que a su vez, no aparezcan en a segunda consulta. Ejemplo: Mostrar todos los cargos que se encuentren en el departamento EMP_TALLER pero que a su vez, no se encuentren en el departamento EMP_ADMIN. SQL > SELECT CARGO 2 FROM EMP_TALLER

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 8

    3 MINUS 4 SELECT CARGO 5 FROM EMP_ADMIN;

    Alias o nombre sustitutos Un alias es un nombre temporal que slo tiene efecto durante la operacin en curso, el cual sustituye a un nombre de tabla o de columna.

    Los alias son utilizados cuando: - Se necesita abreviar el nombre original. - Cuando se manejan dos o ms tablas en una operacin, y en estas existen columnas de igual nombre, se crea una ambigedad, ya que el manejador de la base de datos, no sabr a que tablas se est refiriendo. Cuando se pide visualizar, una columna en particular; por tal motivo, se debe usar un alias de tabla en una de las columnas. - Cuando queremos cambiar el nombre de la etiqueta que identifica la columna, al momento de visualizar la informacin de la base de datos.

    Ejemplo 1: SQL > SELECT NOMBRE "NOMBRE DEL TRABAJADOR" 2 FROM EMPLEADO; Ejemplo 2: SQL > SELECT NOMBRE NOM 2 FROM EMPLEADO; Ejemplo 3: SQL > SELECT NOMBRE, DEP.NUMDEPT 2 FROM EMPLEADO, DEPARTAMENTOS DEP; Ejemplo 4: SQL > SELECT NOMBRE, SALARIO * .10 BONO 2 FROM EMPLEADO;

    Seleccin de filas La instruccin SELECT, puede entregar mltiples registros o filas, de una o ms tablas. Pero su verdadera utilidad radica en poder hacer una seleccin de los datos que cumplan con una determinada condicin. Para tal fin, se har uso del parmetro WHERE.

    La condicin de bsqueda se puede formar bajo la siguiente regla: Nombre de columna Expresin o operador de comparacin o Expresin Nombre de columna

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 9

    Operadores de comparacin (en orden de precedencia). ------------------------------------------------------------------------------------------------------

    Smbolo Significado ------------------------------------------------------------------------------------------------------

    = Igual a. != < > ^= Diferente de. > Mayor que. >= Mayor o igual que. < Menor que. SELECT * 2 FROM EMPLEADO 3 WHERE NUMDEPT = 01 4 AND SALARIO > 20.000 5 AND CARGO = 'GERENTE';

    Ejemplo 2: Mostrar los salarios de todos los empleados que estn entre 10.000 y 20.000. SQL> SELECT * 2 FROM EMPLEADO 3 WHERE SALARIO BETWEEN 10000 AND 20000;

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 10

    Ejemplo 3: Mostrar todos los empleados que devenguen salarios de 10.000, 11.000 y 20.000. SQL> SELECT * 2 FROM EMPLEADO 3 WHERE SALARIO IN (10000, 11000, 20000);

    Ejemplo 4: Mostrar todos los empleados que tengan en la segunda posicin de su nombre la letra "A". SQL> SELECT * 2 FROM EMPLEADO 3 WHERE NOMBRE LIKE '_A%';

    En ocasiones, al ejecutar una sentencia SELECT, observamos la existencia de varias filas con el mismo nmero de departamento, pero en forma dispersa. Cuando esto ocurre, tal vez sea un poco difcil, poder apreciar en conjunto, el nombre de los empleados existentes por cada departamento.

    Esta dificultad desaparecera, si toda sta informacin apareciese agrupada por departamento. Para solucionar este problema, se hace uso de la clusula GROUP BY.

    Para usar la clusula GROUP BY es necesario, que el o los nombres de las columnas que aparecen en la sentencia SELECT, hallan sido especificadas en la sentencia GROUP BY, o en su defecto poseer una de las funciones de agrupamiento (explicadas en la seccin Tipos de datos y funciones).

    Ejemplo: Mostrar una lista de todos los cargos que existen por departamento. En dicha lista se mostrar: nmero de departamento, cargo y cantidad de cargos similares por departamento. SQL> SELECT NUMDEPT, CARGO, COUNT(CARGO) CANTIDAD 2 FROM EMPLEADO 3 GROUP BY NUMDEPT, CARGO;

    GROUP BY puede ser acompaado por la clusula HAVING, siendo su uso no obligatorio, pero cuando se usa, se debe acompaar de la clusula GROUP BY. Su funcin, es la de crear una condicin de agrupamiento; su forma de trabajo es similar a la clusula WHERE. Ejemplo: Realizar el ejemplo anterior, teniendo en cuenta, que esta vez, se realizar la agrupacin y mostrar todos aquellos departamentos cuya cantidad por cargo sea menor de 5. SQL> SELECT NUMDEPT, CARGO, COUNT(*) CANTIDAD 2 FROM EMPLEADO 3 GROUP BY NUMDEPT, CARGO 4 HAVING COUNT(*) < 5;

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 11

    En ocasiones es necesario mostrar la informacin de la base de datos, ordenada por una o ms columnas, ya sea ascendente o descendente. Para este fin, haremos uso de la clusula ORDER BY.

    Nota: el uso de la clusula ORDER BY, slo tendr efecto sobre la visualizacin de la informacin de la base de datos, y no, sobre la base de datos. Ejemplo: Mostrar todos los empleados del departamento 01, ordenados de la siguiente manera: - Nombre, cargo y departamento ordenado ascendentemente. - Salario ordenado descendentemente. La prioridad de ordenacin es la siguiente: - Nombre. - Cargo. - Salario. - Departamento.

    SQL> SELECT * 2 FROM EMPLEADO 3 WHERE NUMDEPT = 01 4 ORDER BY NOMBRE, CARGO, SALARIO DESC, NUMDEPT; Hasta este momento, hemos ordenado la visualizacin de una tabla, por medio de los nombre de las columnas. Tambin podemos realizar esta operacin colocando en vez del nombre de la columna, la posicin de la misma. Cuando se indican los nombres de las columnas a visualizar, la posicin de esta, ser la misma posicin que hemos colocado en la sentencia; pero cuando se coloca el asterisco (*), para indicar que se visualicen todas las columnas, la posicin de estas ser, la misma que elegimos al momento de crear la tabla.

    Ejemplo 1: Mostrar la tabla empleados ordenada por la segunda columna, teniendo en cuenta, que la informacin deber aparecer de la siguiente manera: NOMBRE, SALARIO, CARGO SQL> SELECT NOMBRE, SALARIO, CARGO 2 FROM EMPLEADO 3 ORDER BY 2;

    Ejemplo 2: Mostrar la tabla empleados ordenada por la segunda columna, teniendo en cuenta, que la posicin de dicha columna, deber ser la misma que se uso, al momento de crear la tabla. SQL> SELECT * 2 FROM EMPLEADO 3 ORDER BY 2;

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 12

    1.2 FUNCIONES Y TIPOS DE DATOS

    Las sentencias de SQL, permiten hacer diferentes clculos aritmticos, como lo son los siguientes (en orden de precedencia): * MULTIPLICACIN. / DIVISIN. + SUMA. - RESTA. Nota: a los anteriores se le puede cambiar el orden de precedencia con el uso de parntesis "(", ")".

    Ejemplo: SQL> SELECT NOMBRE, SALARIO*12 "SALARIO ANUAL", SALARIO/30 2 FROM EMPLEADO; Como se pudo apreciar, el poder de las sentencias de SQL, se ve incrementado, al tener la posibilidad de realizar operaciones aritmticas; pero esto no es todo, ya que existe una gran variedad de funciones matemticas, que hacen ms poderoso a SQL. A continuacin una breve resea:

    ------------------------------------------------------------------------------------------------------------------

    Funciones numricas Utilidad ------------------------------------------------------------------------------------------------------------------

    NVL(n, m) Convierte el valor "n", a un valor "m", cuando "n" es nulo. MOD(n, m) Devuelve el residuo de la divisin de "n" entre "m". SQRT(n) Devuelve la raz cuadrada de "n". ROUND(n, m) "n" es redondeado a la cantidad de "m" dgitos decimales si "m" es positivo y unidades si "m" es negativo. TRUNC(n, m) "n" es truncado a la cantidad de "m" dgitos decimales si "m" es positivo y unidades si "m" es negativo. SIGN(n) Si n es menor que cero, la funcin retorna -1. Si n es igual que cero, la funcin retorna 0. Si n es mayor que cero, la funcin retorna 1. POWER(n, m) Obtiene el resultado de "n" elevado a la "m". ABS(n) Retorna el valor absoluto de un valor "n". Ceil(n) Retorna el menor entero, mayor o igual que "n". Floor(n) Retorna el mayor entero, menor o igual que "n". -------------------------------------------------------------------------------------------------------------------

    Nota: "n", "m" son valores de tipo numrico entero, los cuales pueden ser constantes o nombres de columnas. "f" son formatos numricos

    -------------------------------------------------------------------------------------------------------------------

    Funciones de fecha y hora Utilidad -------------------------------------------------------------------------------------------------------------------

    ADD_MONTHS(n, m) Adiciona a "n" la cantidad de meses que indique "m", "m" puede ser positivo o negativo.

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 13

    LAST_DAY(n) Retorna el ltimo da del mes "n". NEXT_DAY(n, c) Retorna una fecha superior a "n" cuyo da de la semana, sea igual a "c". MONTHS_BETWEEN(n, m) Retorna la cantidad de meses entre las fechas "n" y "m". Si "n" es mayor que "m" el resultado ser positivo, caso contrario, ser negativo. SYSDATE Retorna la fecha y hora en curso del sistema. -------------------------------------------------------------------------------------------------------------------

    Nota: "n", "m" son valores de tipo fecha y hora (segn el caso). "c" es un valor de tipo caracter.

    --------------------------------------------------------------------------------------------------------------------

    Funciones de caracteres Utilidad --------------------------------------------------------------------------------------------------------------------

    INITCAP(c1) Retorna la primera letra del contenido de "c1", en maysculas, y todas las dems letras en minsculas. UPPER(c1) Retorna el contenido de "c1" en maysculas. LOWER(c1) Retorna el contenido de "c1" en minsculas. SUBSTR(c1, n1, n2) Extrae del contenido de "c1", "n2" caracteres, partiendo desde la posicin "n1". LENGTH(c1) Retorna el nmero de dgitos del contenido de "c1" LPAD(c1, n1,[c2]) Muestra el contenido de c1, colocando por el lado izquierdo los caracteres "c2". El espacio (en caracteres) para la visualizacin

    de "c2" ser igual a "n1" menos la cantidad de caracteres de "c1". Si "c2" no existe, se tomar por defecto espacio en blanco.

    RPAD(c1, n1,[c2]) Muestra el contenido de c1, colocando por el lado derecho los caracteres "c2". El espacio (en caracteres) para la visualizacin de "c2" ser igual a "n1" menos la cantidad de caracteres de "c1". Si "c2" no existe, se tomar por defecto espacio en blanco.

    REPLACE(c1, c2, [c3]) Se busca "c2" en el contenido de "c1", si es encontrada, se sustituye por "c3", de lo contrario la funcin devolver NULL. Si no se especifica "c3", y "c2" es encontrada en "c1", por defecto se borrar. TRANSLATE(c1, c2, c3) Se busca "c2", caracter a caracter en el contenido de "c1", si es

    encontrado, se sustituye por su caracter correspondiente almacenado en "c3", de lo contrario no tendr ningn efecto sobre "c1". Ejemplo: TRANSLATE('HOLA', 'AHOL', 'OCHA') Resultado de la ejecucin: CHAO.

    -------------------------------------------------------------------------------------------------------------------

    Nota: "c1", "c2", "c3", es un valor de tipo caracter, el cual puede ser un nombre entre comillas, o un nombre de columna. "n1", "n2" son valores numricos enteros.

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 14

    --------------------------------------------------------------------------------------------------------------------

    Funciones de conversin Utilidad --------------------------------------------------------------------------------------------------------------------

    TO_CHAR(d, [f]) Convierte un valor de tipo fecha u hora "d", a un valor de (Conversin tipo char, pudiendo especificar opcionalmente un formato de tipo fecha y hora) "f". Si no se especifica el formato "f", por defecto se tomar "DD-MON-YY". La funcin de TO_CHAR, es cambiar la forma de visualizacin de la fecha u hora.

    TO_CHAR(n, [f]) Convierte un valor de tipo numrico "n", a un valor de tipo (Conversin numrica) char, pudiendo especificar opcionalmente un formato "f". La funcin de TO_CHAR, es cambiar la forma de visualizacin de un nmero.

    TO_DATE(c, [f]) Convierte el contenido de "c", a un valor de tipo fecha u hora, pudiendo especificar opcionalmente un formato "f" Si no se especifica el formato

    "f", por defecto se tomar "DD-MON-YY". TO_NUMBER(c) Convierte el contenido de "c", a un valor de tipo numrico. Nota: se asume que "c" contienen caracteres numricos.

    CONVERT(c, set1, set2) Conversin entre dos diferentes implementaciones de una misma seleccin de caracteres, ejemplo: de caracteres multilenguaje DEC8 bit a caracteres multilenguaje HP 8 bit. "c" es el caracter a convertir. "set1", es la seleccin de caracteres destino. "set2" es la seleccin de caracteres fuente.

    -------------------------------------------------------------------------------------------------------------------

    Nota: "d" es un valor de tipo fecha u hora. "n" es un valor de tipo numrico. "c" es un valor de tipo caracter. "f" es un modelo de formato.

    JUEGO DE CARACTERES DE MULTILENGUAJE MS COMUNES: -------------------------------------------------------------------------------------------------------------------

    Nombre Significado --------------------------------------------------------------------------------------------------------------------

    US7ASCII US 7-bit ASCII (usado por defecto) WE8DEC DEC's Western European 8 bit ASCII. WE8HP HP's Western European 8 bit ASCII F7DEC DEC's French 7-bit ASCII. WEIBMPC Western European 8-bit ASCII (usado por las IBM PC). --------------------------------------------------------------------------------------------------------------------

    MODELOS DE FORMATO: Formatos numericos ms utilizados: --------------------------------------------------------------------------------------------------------------------

    Elemento Ejemplo Descripcin --------------------------------------------------------------------------------------------------------------------

    9 9999 La cantidad de nueves (9) determina el ancho del numero a mostrar.

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 15

    0 0999 Muestra ceros a la izquierda de un nmero. $ $9999 Prefija a un valor con el simbolo de moneda. B B9999 Muestra espacios en blanco (B) a la izquierda de un nmero. Coma 9,999 Muestra una coma en esta posicin. Punto 99.99 Muestra un punto decimal en esta posicin. --------------------------------------------------------------------------------------------------------------------

    Formatos de tipo fecha ms utilizados: -------------------------------------------------------------------------------------------------------------------

    Elemento Significado -------------------------------------------------------------------------------------------------------------------

    YYYY Los cuatro dgitos del ao. YYY Los ltimos tres dgitos del ao. YY Los ltimos dos dgitos del ao. Y El ltimo digito del ao. MM Nmero del mes (del 1 al 12). MON Nombre del mes (abreviado a 3 letras) MONTH Nombre del mes, acompaado de un mximo de 9 caracteres en blanco. D Das de la semana (del 1 al 7). DD Das del mes (del 1 al 31). DDD Das del ao (del 1 al 366). MI Minutos. SS Segundos. --------------------------------------------------------------------------------------------------------------------

    Funciones de agrupamiento Utilidad --------------------------------------------------------------------------------------------------------------------

    AVG(n) Retorna el average de la columna "n", ignorando valores nulos. COUNT(n) Retorna el nmero de filas que tiene la columna "n", ignorando

    valores nulos. MAX(n) Retorna el mximo valor de la columna "n". MIN(n) Retorna el mnimo valor de la columna "n". SUM(n) Retorna la sumatoria de los valores de la columna "n". GREATEST(n, m) Retorna el mayor entre "n" y "m". LEAST(n, m) Retorna el menor entre "n" y "m". DECODE(c, n1, r1, n2, r2) d Retorna el valor "r1", si "c" es igual a "n1", Retorna el valor "r2",

    si "c" es igual a "n2", En caso de no coincidir con ningn valor de la lista retorna "d". El valor "d" puede omitirse. Nota: pueden haber tantos n y r como se deseen.

    USER Retorna el nombre del usuario que se encuentra conectado actualmente a la base de datos.

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 16

    USERENV({'ENTRYID' | Retorna la informacin sobre el usuario y/o seccin que 'SESSIONID' | est siendo utilizada por una aplicacin, funcionando para 'TERMINAL' | una tabla de auditoria. Si la opcin es ENTRYID, la funcin 'LANGUAGE' | retorna un identificador de entrada disponible para }) auditoria; si la opcin es SESSIONID retorna un Identificador de la seccin de auditoria del usuario; si la opcin es TERMINAL, retorna el identificador del sistema operativo del terminal del usuario; si la opcin es LANGUAGE retorna el lenguaje en uso (como el ingles), determinado por los parmetros LANGUAGE en el INIT.ORA.

    VSIZE(n) Retorna el nmero de bytes usados para almacenar una expresin "n".

    --------------------------------------------------------------------------------------------------------------------

    Nota: Las funciones anteriores sirven para todo tipo de datos.

    Ejemplo: Mostrar el nmero de departamento, el salario ms alto, el salario promedio y el total de salarios por departamento y la informacin deber aparecer de la siguiente manera: Departamento Mximo Salario Salario Promedio Total Salarios SQL> SELECT NUMDEPT Departamento, 2 MAX(SALARIO) "Mximo Salario", 3 AVG(SALARIO) "Salario Promedio", 4 SUM(NVL(SALARIO, 0)) "Total Salario" 5 FROM EMPLEADO 6 WHERE NUMDEPT IS NOT NULL 7 GROUP BY NUMDEPT;

    Mostrar la cantidad de empleados, que devengen salarios: - Menores o iguales a 15.000; - Entre 15.001 y 20.000; - Superiores o iguales a 20.000. Esto se realizar para todos aquellos departamentos que tengn ms de 5 empleados. A continuacin un ejemplo del formato de aparicin. Departamento Del # AL 15000 HAY x# Del 15001 AL 20000 HAY x# Ms de 20001 HAY x# SQL> SELECT 'Departamento ' || RPAD(NUMDEPT,66,' ') || 2 'Del ' || 3 TO_CHAR(NVL(MIN(DECODE(SIGN(SALARIO-15000),-1, SALARIO)),0)) || 4 ' AL 15000 HAY ' || 5 TO_CHAR(COUNT(DECODE(SIGN(SALARIO-15000),-1,1,0,1))) || 6 ' Del 15001 AL 20000 HAY ' ||

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 17

    7 TO_CHAR(COUNT(DECODE(LEAST(GREATEST(SALARIO,15001),20000), 8 SALARIO, SALARIO))) || 9 ' Mas de 20001 HAY ' || TO_CHAR(COUNT( 10 DECODE(GREATEST(SALARIO, 20001),SALARIO, SALARIO))) " " 11 FROM EMPLEADO02 12 WHERE NUMDEPT IS NOT NULL 13 GROUP BY RPAD(NUMDEPT,66,' ') 14 HAVING COUNT(*) >= 5

    1.3 REPORTES EN SQL*PLUS Anteriormente se han elaborado reportes simples, los cuales carecen de ciertos detalles, como ttulos, formato, totalizacin, etc. Para lograr esto se har uso de los comandos de SQL*Plus, lo cual permitir, crear reportes de mejor calidad, los cuales se podrn visualizar por pantalla, por impresora, o simplemente almacenar su salida en un archivo. Comandos de formato de SQL*Plus TTITLE Uso: Muestra un ttulo en el tope cada pgina del reporte. Forma abreviada: TTI. Sintaxis: TTITLE [ep [texto | variable ] ] | [OFF | ON ]. ep: ver: especificaciones de impresin. OFF: desactiva la opcin. ON: activa la opcin.

    BTITLE Uso: Muestra un ttulo en el pie de pgina del reporte. Forma abreviada: BTI. Sintaxis: BTITLE [ep [texto | variable ] ] | [OFF | ON ]. ep: ver: especificaciones de impresin. OFF: desactiva la opcin. ON: activa la opcin.

    COLUMN Uso: Sirve para especificar los atributos con los cuales van a ser mostrados una columna, tal como encabezados de las columnas, alineacin, formato de los datos y el manejo de los datos. Forma abreviada: COL Sintaxis: COLUMN [{Columna | expresin} [opciones] ]. Opciones: ALIAS JUSTIFY [ LEFT | CENTER | CENTRE | RIGHT ] OLD_VALUE CLEAR LIKE PATTERN COLOR LINEAPP [ LINE | MARK | BOTH] WRAPPED FOLD_AFTER NEWLINE

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 18

    FOLD_BEFORE NEW_VALUE FORMAT NOPRINT HEADING NULL

    BREAK Uso: Indica cuando y como cambia el formato de impresin en el reporte, tal como, suprimiendo los valores duplicados para la columna especificada, saltando lineas, al cambiar el valor de la columna, mostrando clculos especificados a travs de un COMPUTE. Forma abreviada: BRE Sintaxis: BREAK [ ON columnas del Select [ accin [ accin]]] ...

    COMPUTE Uso: Permite realizar clculos e imprimir sumatorias, usando varios clculos estndares, sobre subgrupos, de filas seleccionadas. Forma abreviada: COMP Sintaxis: COMPUTE [funcin ... OFF {expresiones | columna | alias}... ON {expresiones | columna | alias | REPORT | ROW}]

    Funciones permitidas en el comando COMPUTE: AVG Obtiene el promedio de valores no nulos. COUNT Obtiene la cantidad de los valores no nulos. MAXIMUM Obtiene el mximo valor. MINIMUM Obtiene el mnimo valor. NUMBER Obtiene el nmero de filas. STD Obtiene la desviacin estndar de valores no nulos. SUM Obtiene la sumatoria de valores no nulos. VARIANCE Obtiene la varianza de valores no nulos.

    SET Uso: Establece los aspectos de ambiente de SQL*Plus, para la seccin actual de trabajo, tales como:

    - Fija los atributos del display para los datos numricos LONG, CHAR y DATE; definicin de tamao de pgina PAGESIZE, linea LINESIZE, arreglos de memoria ARRAYSIZE, espaciado entre columnas SPACE, etc. - Fija los atributos para los parmetros de ambiente tales como impresin de encabezados, cubierta, salidas a pantallas, pie de pgina, mensajes, etc. Sintaxis: SET variable del sistema.

    VARIABLES DEL SISTEMA MS USADAS ECHO

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 19

    Uso: Cuando est activo, muestra los comandos que estn siendo ejecutados. Caso contrario cuando esta desactivado. Sintaxis: ECHO {OFF | ON}

    FEEDBACK Uso: Muestra el nmero de registros retornados por una consulta, cuando la misma selecciona un mnimo de "n" registros. Cuando se coloca ON, "n" ser igual a uno. Cuando se coloca OFF, "n" ser igual a cero; por defecto "n", vale 6. Forma abreviada: FEED. Sintaxis: FEEDBACK {6 | n | OFF | ON} n: es el mnimo nmero de registros que debe procesar la instruccin para ser mostrado el FEEDBACK

    NULL Uso: Selecciona un texto que representar a los valores nulos. Por defecto este ser espacio. Sintaxis: NULL texto

    PAGESIZE Uso: Selecciona el nmero de lineas por pginas Forma abreviada: PAGES Sintaxis: PAGESIZE {14 | n}

    SPACE Uso: Selecciona el nmero de espacios entre columnas. Forma abreviada: SPA. Sintaxis: SPACE {1 | n}

    ESPECIFICACIONES DE IMPRESIN COL Uso: Hace que el prximo valor de tipo CHAR, aparezca en la columna "n" de una linea. Sintaxis: COL n

    SKIP Uso: Salta hacia una nueva linea "n" veces. Si n es mayor que 1, n-1 lineas en blanco aparecern despus del prximo valor de tipo carcter. Sintaxis: SKIP n

    TAB Uso: Salta "n" columnas hacia adelante o hacia atrs dependiendo si el valor de "n" es positivo o negativo. Columnas se refiere a posicin de impresin. Sintaxis: TAB n

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 20

    LEFT Uso: Alinea un valor de tipo char a la izquierda. Sintaxis: LEFT

    CENTER Uso: Alinea un valor de tipo char al centro. Sintaxis: CENTER

    RIGHT Uso: Alinea un valor de tipo char a la derecha Sintaxis: RIGHT

    BOLD Uso: Imprime los datos en negrita Sintaxis: BOLD

    FORMAT Uso: Especifica el modelo de formato o mscara en el cual se mostrarn los datos de la columna especificada. Sintaxis: FORMAT mscara o formato. A continuacin se mostrar la codificacin para la generacin de un reporte, el cual rene una buena parte, de lo expuesto anteriormente. Para ello se necesitar hacer uso de un editor, o procesador de palabras (que grabe en formato ASCII); una vez realizado esto, gurdelo con el nombre de su preferencia, pero con extensin SQL. Una vez realizado el paso anterior, se puede ejecutar de dos formas: - START nombre.sql o

    - @nombre.sql

    Ejemplo: SET PAUSE ON SET PAGESIZE 24 SET ECHO OFF SET FEEDBACK OFF TTITLE RIGHT 'PAGINA' SQL.PNO SKIP 2 - CENTER 'REPORTE DE PERSONAL' SKIP 2 - CENTER 'Producido por el departamento de personal' SKIP 2 BTITLE CENTER 'Informacin confidencial' COLUMN DEPTNO HEADING 'DEPARTAMENTO' FORMAT 99 COLUMN NOMBRE FORMAT A10 COLUMN CARGO FORMAT A10

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 21

    COLUMN SALARIO HEADING 'SALARIO|MENSUAL' FORMAT $99,990.00 COLUMN ANUAL HEADING 'SALARIO|ANUAL' FORMAT 999,990.00 SET SPACE 6 BREAK ON NUMDEPT SKIP 2 ON REPORT COMPUTE SUM AVG OF SALARIO ON NUMDEPT REPORT COMPUTE STD OF ANUAL ON NUMDEPT REPORT SET NULL 'DESCONOCIDO' SELECT NUMDEPT, NOMBRE, CARGO, SALARIO, SALARIO*12 ANUAL FROM EMPLEADO ORDER BY NUMDEPT Como salida se visualizar PAGINA 1 REPORTE DE PERSONAL Producido por el departamento de personal SALARIO SALARIO DEPARTAMENTO NOMBRE CARGO MENSUAL ANUAL ----------------------- ---------------- ------------------ ---------------------- ---------------------------

    10 PEDRO OBRERO $2,450.00 29,400.00 MANUEL PRESIDENTE $5,000.00 60,000.00 EMILIO GERENTE $1,500.00 18,000.00 TERESA LIMPIEZA $1,300.00 15,600.00 JOS SUB-GERENTE $1,500.00 18,000.00 LUIS PASANTE DESCONOCIDO DESCONOCIDO CHANG PASANTE DESCONOCIDO DESCONOCIDO INGRID SECRETARIA $2,000.00 24,000.00 CARMEN SECRETARIA $2,550.00 30,600.00 **************** ---------------------- -----------------------------

    avg $2,328.57 sum $16,300.00 std 34,824.70 Informacin confidencial PAGINA 2

    REPORTE DE PERSONAL Producido por el departamento de personal SALARIO SALARIO DEPARTAMENTO NOMBRE CARGO MENSUAL ANUAL ----------------------- -------------- ------------------ ---------------------- ----------------------

    20 RODRIGO LIMPIEZA $800.00 9,600.00 ISABEL LIMPIEZA $1,100.00 3,200.00 GERARDO ANALISTA $3,000.00 36,000.00 DILIA ANALISTA $3,000.00 36,000.00 LUIS SECRETARIO $2,000.00 24,000.00 PETRONILO GERENTE $2,975.00 35,700.00 **************** ---------------------- ----------------------

    avg $2,145.83 sum $12,875.00

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 22

    std 71,068.05 Informacin confidencial PAGINA 3 REPORTE DE PERSONAL Producido por el departamento de personal SALARIO SALARIO DEPARTAMENTO NOMBRE CARGO MENSUAL ANUAL ----------------------- -------------- --------------------- ---------------------- ----------------------

    30 TOMAS VENDEDOR $1,600.00 19,200.00 RAQUEL LIMPIEZA $2,850.00 34,200.00 ORLANDO VENDEDOR DESCONOCIDO DESCONOCIDO GLORIA VENDEDOR $1,250.00 15,000.00 JUDITH VENDEDOR $950.00 1,400.00 MARA VENDEDOR $1,500.00 8,000.00 JOSEFINA VENDEDOR $1,250.00 15,000.00 **************** ---------------------- ----------------------

    avg $1,566.67 sum $9,400.00 std 55,051.68 Informacin confidencial

    PAGINA 4 REPORTE DE PERSONAL Producido por el departamento de personal SALARIO SALARIO DEPARTAMENTO NOMBRE CARGO MENSUAL ANUAL -------------------------- -------------- ------------------ ---------------------- ----------------------

    ------------------------ ----------------------

    avg $2,030.26 sum $38,575.00 std 689,055.92 Informacin confidencial

    1.4 MANIPULACIN DE DATOS En ocasiones se hace necesario, insertar informacin en algunas tablas, de la base de datos. Para este fin se tiene el comando INSERT.

    INSERT INTO nombre_de_tabla [(columna1, columna2...)] VALUES (valor1, valor2...).

    INSERT permite adicionar una nueva fila, a la tabla especificada; esto se puede hacer con todas las columnas (colocando los valores de todas las columnas en el mismo orden de la tabla) o con algunas columnas (colocando despus del nombre de la tabla, el nombre de las columnas en las cuales se desea insertar la informacin y despus de VALUES, los valores que tendrn estas).

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 23

    Ejemplo 1: Insertar una nueva fila, (con todas sus columnas), a la tabla empleado. SQL > INSERT INTO EMPLEADO 2 VALUES ('INGRID', 'SECRETARIA', 18000, 01);

    Ejemplo 2: Insertar una nueva fila, (con las columnas nombre y salario), a la tabla empleado. SQL > INSERT INTO EMPLEADO (NOMBRE, SALARIO) 2 VALUES ('INGRID', 18000);

    Ejemplo 3: Insertar una nueva fila, (con las columnas nombre y fecha), a la tabla cumpleaos. Nota: cumpleaos ser reemplazado por cumpleanos, para evitar problemas con SQLPLUS. SQL > INSERT INTO CUMPLEANOS (NOMBRE, FECHA) 2 VALUES ('INGRID', TO_DATE('931802', 'YYDDMM'));

    Ejemplo 4: Insertar una o ms fila, a la tabla empleado usando las columnas nombre y salario, donde el sistema, sea el que pida los valores de cada columna, gracias al uso de & para crear variables. SQL > INSERT INTO EMPLEADO (NOMBRE, SUELDO) 2 VALUES (&NOMBRE, &SUELDO);

    Ejemplo 5: Insertar una o ms fila, a la tabla empleado usando las columnas nombre y salario tomando datos de otra tabla. SQL > INSERT INTO EMPLEADO (NOMBRE, SUELDO) 2 SELECT NOMBRE, SUELDO * 1.25 FROM EMPLEADO_VIEJO;

    Imaginese el caso, que una vez impreso un reporte, hemos detectado un error en los datos del mismo y por lo tanto deseamos corregirlo, es aqu donde entra en juego el comando UPDATE. UPDATE nombre_de_la_tabla SET columna1 = valor, columna2 = valor... [WHERE condicin]

    Ejemplo 1: Aumentar el salario un 20% a todos los empleados del departamento 01. SQL > UPDATE EMPLEADO 2 SET SALARIO = SALARIO+SALARIO*0.2 3 WHERE NUMDEPT = 01;

    Ejemplo 2:

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 24

    Aumentar el salario un porcentaje a todos los empleados, usando un porcentaje por departamento. SQL > UPDATE EMPLEADO 2 SET SALARIO = SALARIO + SALARIO * DECODE(NUMDEPT,01,0.2,02,0.3,.015)

    Ejemplo 3: Aumentar el salario con el 10 % del promedio de salarios de su departamento. SQL > UPDATE EMPLEADO A SET SALARIO = 2 ( SELECT SALARIO+ AVG(SALARIO)*.10 FROM EMPLEADO B 3 WHERE B.NUMDEPT = A.NUMDEPT);

    Para poder borrar una fila o un conjunto de filas se har uso del comando DELETE DELETE FROM nombre_de_la_tabla [WHERE condicin]

    Ejemplo 1: Eliminar los empleados del departamento 02 SQL > DELETE FROM EMPLEADO 2 WHERE NUMDEPT = 02;

    Ejemplo 2: Eliminar los empleados que tengan un salario mayor del promedio de salarios de su departamento. SQL > DELETE EMPLEADO A WHERE SALARIO > 2 ( SELECT AVG(B.SALARIO) FROM EMPLEADO B 3 WHERE B.NUMDEPT = A.NUMDEPT);

    Transaccin Se considera como una transaccin, todos aquellos cambios realizados a la base de datos, una vez ejecutado el comando COMMIT. COMMIT guarda en forma "permanente", todos los cambios realizados a la base de datos. ------------------ COMMIT | | INSERT... | | DELETE... TRANSACCIN | | UPDATE... | | INSERT... | ------------------ COMMIT

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 25

    La contra parte de COMMIT, es ROLLBACK. Esta instruccin ignora todos los cambios realizados a la base de datos, excepto si previamente se ha realizado un COMMIT.

    ------------------ COMMIT | | INSERT... TRANSACCION | | DELETE... | | ---------------- ROLLBACK | TRANSACCION | UPDATE... | | INSERT... | ------------------ COMMIT Existe tambin una forma de ignorar, parcialmente los cambios realizados a la base de datos. Esto se logra introduciendo marcas, que tienen como finalidad, informar al comando ROLLBACK, hasta donde deben ser ignorados, los cambios efectuados a la base de datos. La forma de realizar estas marcas, es por medio del comando SAVEPOINT. ------------------ COMMIT | | INSERT... | | SAVEPOINT A | | DELETE... TRANSACCION | | UPDATE... | | ROLLBACK TO SAVEPOINT A | | INSERT... | ------------------ COMMIT

    1.5 TABLAS Y VISTAS

    Como crear una tabla? El nombre de una tabla debe de cumplir con las siguientes reglas. - Debe ser de 1, a mximo 30 caracteres y el primero debe ser alfabtico. - Debe contener los caracteres:

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 26

    A - Z, a - z,

    0 - 9, subrayado (_) $ y # (son smbolos legales pero pueden causar problemas). - No deben ser palabras reservadas de SQL. - No pueden tener el mismo nombre de los objetos usados por ORACLE. Sintaxis: CREATE TABLE [usuario.]nombre_de_la_tabla ({nombre_de_columna tipo | tabla_de_integridad} [, {{nombre_de_columna tipo | tabla_de_integridad}]...) STORAGE (Initial nK Next nK Pctincrease n Maxextents n Minextents n); El "tipo", puede ser de tipo CHAR, DATE, LONG, NUMBER.

    Reglas de integridad PRIMARY KEY Es la columna o conjunto de columnas, que permite la identificacin nica, de cada fila de la tabla; llamadas claves primarias.

    CHECK Es la definicin de la regla del negocio, las cuales involucran columnas contra valores constantes.

    FOREIGN KEY Es la columna o conjunto de ellas, que establecen una relacin con una clave primaria de otra tabla. Esto indica, que para el conjunto de columnas, de la fila de la tabla "A", debe existir, el mismo conjunto de columnas y valores en la tabla "B".

    [NOT] NULL Permite validar que la columna pueda tener o no, valores nulos, en otras palabras, si la columna es mandatoria.

    UNIQUE Es la columna o conjunto de ellas, que permiten una identificacin nica alterna, de cada fila de la tabla, llamadas claves secundarias o alternas.

    REFERENCES Es una clave fornea de una columna simple.

    Reglas de STORAGE Indica el almacenamiento con que trabajar la tabla que vaya a ser creada, basado en el tamao de la extenciones o anexos de espacio (extents).

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 27

    Initial Indica el espacio inicial de creacin de la tabla (Primer Extents) Next Segundo extents a ser asignado a la tabla. Pctincrease Porcentaje de incremento para entre los extents requeridos por la tabla a partir del tercero. Maxextents Es la cantidad mxima de extents que puede crecer una tabla. Minextents Es la cantidad mnima necesaria de extents para poder crear la tabla.

    Ejemplo 1: Crear una tabla llamada EMPLEADO2, con las columnas: - CODIGO - NOMBRE - CARGO - CODJEFE - SALARIO - NUMDEPT Caso Clave Primaria Simple, Clave foranea Simple SQL > CREATE TABLE EMPLEADO2 2 (CODIGO NUMBER(4) PRIMARY KEY, 3 NOMBRE CHAR(10) CHECK(NOMBRE = UPPER(NOMBRE)), 4 CARGO CHAR(10), 5 CODJEFE NUMBER(4) REFERENCES EMPLEADO2 (CODIGO), 6 SALARIO NUMBER(7,2) CHECK(SALARIO CREATE TABLE EMPLEADO2 2 (CODIGO NUMBER(4) NOT NULL, 3 NOMBRE CHAR(10) CHECK(NOMBRE = UPPER(NOMBRE)), 4 CARGO CHAR(10), 5 CODJEFE NUMBER(4) , 6 SALARIO NUMBER(7,2) CHECK(SALARIO CREATE TABLE EMPLEADO3 2 AS SELECT NOMBRE, SALARIO 3 FROM EMPLEADO2

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 28

    4 WHERE NUMDEPT = 01;

    Como hacer modificaciones en una tabla? La sentencia ALTER TABLE, permite alterar las siguiente definiciones de una tabla: - Adicionar columnas o integridad. - Modificar las definiciones de una columna (CHAR, NUMBER, NOT NULL, etc.). - Borrar definiciones de integridad. Sintaxis para adicionar: ALTER TABLE nombre_de_la_tabla ADD ({nombre_columna tipo | tabla integridad} [, {nombre_columna tipo | tabla integridad}]...) Ejemplo: SQL > ALTER TABLE DEPARTAMENTO 2 ADD (CODJEFE NUMBER(4) 3 REFERENCES EMPLEADO(CDIGO) CONSTRAINT EMP_FK); Sintaxis para modificar:

    ALTER TABLE nombre_de_la_tabla MODIFY({nombre_columna definicin_de_columna} [, {nombre_columna definicin_de_columna}...) Ejemplo: SQL > ALTER TABLE EMPLEADO 2 MODIFY NOMBRE CHAR(20); Sintaxis para borrar ALTER TABLE nombre_de_la_tabla DROP CONSTRAINT (nombre_de_integridad)

    Ejemplo: SQL > ALTER TABLE DEPARTAMENTO 2 DROP CONSTRAINT EMP_FK; Como renombrar una tabla? Usamos la sentencia RENAME Sintaxis: RENAME tabla_vieja TO tabla_nueva

    Como borrar una columna de una tabla? En el caso de querer remover una columna de una tabla, debemos hacer uso de nuestra imaginacin y conocimientos antes adquiridos. Ejemplo: Suponga que la tabla EMPLEADO2, posee las siguientes columnas: - NOMBRE

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 29

    - CARGO - SALARIO - NUMDEPT Se pide eliminar la columna NUMDEPT Se crea una nueva tabla a partir de la tabla EMPLEADO2 SQL > CREATE TABLE TEMPORAL (NOMBRE, CARGO, SALARIO) 2 AS SELECT NOMBRE, CARGO, SALARIO 3 FROM EMPLEADO2; Se borra la tabla EMPLEADO2 SQL > DROP TABLE EMPLEADO2; Se renombra la tabla TEMPORAL por EMPLEADO2 SQL > RENAME TEMPORAL 2 TO EMPLEADO2;

    Como crear una vista? La forma de crear una vista es la misma que se utiliza para crear una tabla, pero utilizando una instruccin SELECT accesando columnas de una o varias tablas. Sintaxis: CREATE VIEW nombre de la vista AS SELECT clausula Select;

    Ejemplo; Crear una visin de los datos de la table empleado para el departamento 10 SQL > CREATE VIEW VISTA_EMP 2 AS SELECT NOMBRE, CARGO, SALARIO 3 FROM EMPLEADO 4 WHERE NUMDEPT = 10;

    Ventajas de las vistas - Seguridad (Permite dar acceso a partes de una tabla a otros usuario). - Conveniencia (puede acortar la codificacin en un programa, ya que evita la realizacin de instrucciones SELECT que se repiten). - Perspectivas (Se puede visualizar pedazos de varias tablas). select numero from factura_cliente order by numero desc

    Cmo visualizar una vista? La forma de visualizar una vista es la misma que se utiliza para visualizar una tabla. (Se utilizan los mismos parmetros de la sentencia SELECT). SQL > SELECT * 2 FROM VISTA_EMP; Actualizacin de una tabla a travs de una vista SQL > UPDATE VISTA_EMP 2 SET SALARIO = 20000

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 30

    3 WHERE SALARIO = 15000; Como se pudo observar en el ejemplo anterior, un usuario puede cambiar el contenido de una tabla, a travs de una vista. En ocasiones es necesario evitar, que se modifiquen o inserten filas, que luego no podrn ser visualizadas por medio de la sentencia SELECT. Con este objetivo se utilizar la clusula WITH CHECK OPTION.

    Ejemplo: SQL > CREATE VIEW VISTA_EMP2 2 AS SELECT NOMBRE, CARGO 3 FROM EMPLEADO 4 WHERE NUMDEPT = 01 5 WITH CHECK OPTION; De esta manera cuando intentemos realizar una actualizacin no permitida tendremos lo siguiente: SQL > UPDATE VISTA_EMP2 2 SET NUMDEPT = 05 3 WHERE SALARIO > 30000; ORA-014022: view WITH CHECK OPTION where-clause violation. (Mensaje arrojado). Este error se debe, a que la vista creada, slo permite visualizar a los empleados del departamento 01. Si este cambio se hubiese efectuado, no se podra observar los cambios realizados en la tabla, dando a pensar, que se elimin la informacin, cosa que sera falso. Slo se pueden modificar valores sobre aquellas vistas que sean sobre una sola tabla y que no involucren funciones de grupo, columnas artificiales 0u operadores.

    Accesos a tablas y vistas El DBA y los dueos de tablas son los nicos que pueden otorgar privilegios a otros usuarios para que puedan visualizar, modificar o borrar, un objeto de la base de datos (tablas, vistas, etc.). Estos privilegios se otorgan o quitan por medio del comando GRANT. Sintaxis: GRANT {privilegio_del_objeto [, privilegio_del_objeto] ... } | ALL [ PRIVILEGES]} ON [usuario.]objeto TO {usuario | PUBLIC } [, usuario]... [WITH GRANT OPTION] Los privilegios de los objetos son los siguientes: - Para las tablas: ALTER, DELETE, INDEX, INSERT, REFERENCES, SELECT o UPDATE. - Para las vistas: DELETE, INSERT, SELECT o UPDATE. - Para las secuencias: ALTER o SELECT. ALL PRIVILEGES: significa que el objeto tendr todos los privilegios. ON: especifica el nombre de una tabla, vista o sinnimo, al cual se le van a otorgar los privilegios. TO: usuario o usuarios a los cuales se les estn dando los privilegios.

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 31

    PUBLIC: son todos los usuarios que se encuentran en la base de datos y los que en un futuro se presenten. WITH GRANT OPTION: permite a un usuario, otorgar privilegios a otros usuarios, sobre los objetos a los cuales tiene acceso.

    Ejemplo 1: Otorgar todos los privilegios de la tabla empleado, a todos los usuarios de la base de datos. SQL > GRANT ALL 2 ON EMPLEADO 3 TO PUBLIC;

    Ejemplo 2: Otorgar el privilegio SELECT al usuario system, permitindole a este, otorgar dicho privilegio a otros usuarios. SQL > GRANT SELECT 2 ON EMPLEADO 3 TO SYSTEM 4 WITH GRANT OPTION;

    Sinnimos: Los sinnimos son nombres por medio de los cuales, se puede hacer referencia a una tabla o vista. Estos se utilizan por razones de seguridad y conveniencia, teniendo las siguientes ventajas: - Referenciar una tabla o vista, sin tener que especificar el dueo de la misma. - Referenciar una tabla o vista, sin tener que especificar la base de datos en donde la tabla o la vista existe. - Proveer otro nombre para la tabla. Sintaxis para la creacin de un sinnimo: CREATE [PUBLIC] SYNONYM [usuario.]sinnimo FOR [usuario.]tabla_o_vista [@enlace_con_la_base_de_datos] PUBLIC: indica que el sinnimo, podr ser utilizado por todos los usuarios. Por defecto slo podr ser utilizado por el usuario que cre el sinnimo. SYNONYM: nombre del sinnimo. ENLACE_CON_LA_BASE_DE_DATOS: Cadena de caracteres que se utiliza para enlazar con una base de datos remota.

    Ejemplo: SQL > CREATE SYNONYM TRABAJADOR 2 FOR PABLO.EMPLEADO; SQL > SELECT * 2 FROM TRABAJADOR;

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 32

    II.6.- INDICES Y GENERADORES DE SECUENCIAS El acceso a los datos contenidos en las tablas, puede ser de dos formas: - Bsqueda secuencial por toda la tabla. - Bsqueda selectiva, a travs de un ndice. Los ndices son estructuras opcionales, los cuales estn asociados a tablas, con la finalidad de aumentar la velocidad de las consultas y evitar la duplicidad de filas. Cada tabla puede tener un nmero ilimitado de ndices. La regla para escribir el nombre de un ndice, es similar al de una tabla, pero es recomendable colocar como prefijo, la letra "I" a todo nombre de ndice.

    Cuando crear un ndice? Si Ud. anticipadamente sabe que se va a recuperar un poco menos del 15%, de las filas contenidas en una gran tabla, cuyas columnas van a ser frecuentemente referenciadas por una clusula WHERE, entonces Ud. deber de crear un ndice. Caractersticas de las columnas a indexar. - Las columnas deben ser frecuentemente referenciadas por la clusula WHERE. - Todos sus valores deben ser nicos (el mejor caso). - Ancho rango de valores. - Muchos valores nulos o relativamente pocos valores. Sintaxis: CREATE [UNIQUE] INDEX ndice ON tabla (columna [ASC | DESC] [, columna [ASC | DESC]] ...)}... STORAGE (.... ... ... ); UNIQUE: indica que las columnas involucradas, deben contener valores nicos. ndice: nombre del ndice a crear tabla: nombre de una tabla existente, a partir de la cual se crear un ndice. ASC / DESC: crea los ndices en forma ascendente o descendente. columna: nombre de la columna por la cual se va a ordenar. Nota: el nmero mximo de columnas concatenadas, que se puede tener en un ndice simple, es de 16.

    Ejemplo 1: SQL > CREATE INDEX I_EMPLEADO 2 ON EMPLEADO(NOMBRE);

    Ejemplo 2: SQL > CREATE UNIQUE INDEX I_EMPLEADO 2 ON EMPLEADO(NOMBRE);

    Cmo remover un ndice de la base de datos? Sintaxis: DROP INDEX nombre_del_indice

    Ejemplo:

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 33

    SQL > DROP INDEX I_EMPLEADO;

    Validacin de ndices: Los problemas de hardware, pueden en ocasiones corromper los ndices de una tabla. Para verificar que los ndices no estn corrompidos se hace uso de VALIDATE INDEX. Sintaxis: VALIDATE INDEX nombre_del_indice

    Ejemplo: SQL > VALIDATE INDEX I_EMPLEADO; Index validated. (Mensaje arrogado).

    Secuencias Las secuencias son estructuras opcionales, su finalidad es generar nmeros enteros nicos, los cuales pueden ser utilizados por mltiples usuarios. Una utilidad que se le puede dar a una secuencia, es la de generar automticamente los nmeros de una clave primaria. La regla para escribir el nombre de una secuencia, es similar al de una tabla, pero es recomendable colocar como prefijo, la letra "S" a todo nombre de secuencia. Sintaxis: CREATE SEQUENCE secuencia [INCREMENT BY {1|n}] [START WITH n] [ {MAXVALUE n | NOMAXVALUE}] [ {MINVALUE n | NOMINVALUE}]... secuencia: nombre de la secuencia. INCREMENT BY: determina el intervalo de una secuencia numrica. START WITH: es el nmero con el cual se comienza la secuencia. Por defecto cuando es ascendente ser igual a MINVALUE y cuando es descendente ser igual a MAXVALUE. MAXVALUE / NOMAXVALUE: mnimo valor de la secuencia a generar. Por defecto es uno. MINVALUE / NOMINVALUE: mximo valor de la secuencia a generar. Por defecto es 10e27 - 1.

    Ejemplo: SQL > CREATE SEQUENCE S_DEPARTAMENTOS START WITH 200; SQL > INSERT INTO DEPARTAMENTOS(NUMDEPT, DEPARTAMENTO) 2 VALUES (S_DEPARTAMENTOS.NEXTVAL, 'INFORMTICA'); NEXTVAL: es un nombre de seudo-columna, el cual es usado para generar un nmero de secuencias especificas. CURVAL: es un nombre de seudo-columna, el cual es usado para obtener el valor de la secuencia en curso.

    Cmo borrar una secuencia?

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 34

    Sintaxis: DROP SEQUENCE nombre_de_secuencia Ejemplo: SQL > DROP SEQUENCE S_DEPARTAMENTOS;

    II.7.- CONSULTAS AVANZADAS DE ORACLE JOIN: es la forma del comando SELECT para combinar filas de dos o ms tablas.

    Tipos de JOIN - Simple - Equijoin (usando una condicin de igualdad). - non-equijoin (usando varias condicin de igualdad otras). - Externo - A si mismo.

    Join simple Retorna filas de dos o ms tablas combinadas, a travs de una condicin de igualdad. Sintaxis: SELECT [tabla.]columna, [tabla.]columna... FROM tabla1, tabla2... WHERE [tabla1.]columna = [tabla2.]columna

    Ejemplo (caso equijoin): SQL > SELECT NOMBRE, SALARIO, EMPLEADO.NUMDEPT 2 FROM EMPLEADO, DEPARTAMENTO 3 WHERE EMPLEADO.NUMDEPT = DEPARTAMENTO.NUMDEPT;

    Ejemplo (caso non-equijoin): SQL > SELECT NOMBRE, SALARIO, EMPLEADO.NUMDEPT 2 FROM EMPLEADO, DEPARTAMENTO 3 WHERE EMPLEADO.NUMDEPT = DEPARTAMENTO.NUMDEPT 4 AND SALARIO BETWEEN 10000 AND 20000;

    Join externo Retorna el contenido de un join simple, ms, el contenido de las filas de una tabla que no hallan podido ser combinado en la otra tabla. Sintaxis: SELECT [tabla.]columna, [tabla.]columna... FROM tabla1, tabla2... WHERE [tabla1.]columna CONDICION [tabla2.]columna(+) o puede ser SELECT [tabla.]columna, [tabla.]columna... FROM tabla1, tabla2...

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 35

    WHERE [tabla1.]columna(+) CONDICION [tabla2.]columna

    Ejemplo: Mostrar un join de las tablas EMPLEADO y DEPARTAMENTOS. El campo de combinacin es NUMDEPT. Si existe alguna fila del campo departamento que no haga una combinacin con la tabla EMPLEADO, deber ser mostrada. SQL > SELECT NOMBRE, SALARIO, DEPARTAMENTOS.NUMDEPT 2 FROM EMPLEADO, DEPARTAMENTOS 3 WHERE EMPLEADO.NUMDEPT(+) = DEPARTAMENTOS.DEPTNO;

    Join a si mismo Realiza una combinacin en una misma tabla.

    Ejemplo: Obtener una lista de empleados, en la cual se especifique el nombre de su jefe inmediato. SQL > SELECT TRABAJADOR.NOMBRE, JEFE.NOMBRE 2 FROM EMPLEADO2 TRABAJADOR, EMPLEADO2 JEFE 3 WHERE TRABAJADOR.CODIGO = JEFE.CODJEFE; Sub-query (sub-consulta). Las sub-consultas seleccionan filas de una tabla con una condicin que depende de valores de otra tabla. Las sub-consultas deben aparecer en la clusula WHERE de una de las siguientes sentencias: - SELECT - INSERT - UPDATE - DELETE

    Sintaxis: SELECT ... FROM ... WHERE ... (SELECT ... FROM ... WHERE ...);

    Sub-consultas de filas simples Las sub-consultas de filas simples, retornarn un valor para completar la condicin de la clusula WHERE.

    Ejemplo: SQL > SELECT * 2 FROM DEPARTAMENTO

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 36

    3 WHERE NUMDEPT = (SELECT MAX(NUMDEPT) 4 FROM EMPLEADO 5 WHERE CARGO = 'SECRETARIA');

    Sub-consultas de filas mltiples Las sub-consultas de filas mltiples, retornan ms de un valor para completar la condicin de la clusula WHERE.

    Ejemplo: SQL > SELECT NOMBRE, CARGO 2 FROM EMPLEADO 3 WHERE NUMDEPT IN (SELECT NUMDEPT 4 FROM EMPLEADO 5 GROUP BY NUMDEPT HAVING COUNT(*) > 2 ) 6 AND SALARIO > (SELECT AVG(SALARIO) 7 FROM EMPLEADO);

    1.6 OPTIMIZACIN DE INSTRUCCIONES DE MANIPULACIN DE DATOS EN SQL

    Para escribir instrucciones optimas, se debe tener conocimiento del funcionamiento del optimizador de SQL. El optimizador realiza un plan de ejecucin, el cual considera que ser eficiente basado en factores tales como: a.- Reglas de Construccin de la Instruccin b.- Utilizacin de Indices En la Versin 6 del Manejador de Base de Datos no se consideran los siguientes factores: - Cantidad de filas existentes en las tablas - Distribucin fsica de los datos en la tabla - Distribucin de los valores de las claves en los ndices

    Reglas de construccin: - El orden de las tablas en la clusula FROM Influye para la evaluacin de la tabla base a usarse al construir JOINS. Se recomienda que de izquierda a derecha se coloquen las tablas de mayor volumen de datos accesados a la de menor volumen.

    Ejemplo: EMPLEADOS tiene 5000 filas, DEPARTAMENTO tiene 20 filas, FAMILIARES tiene 20000 filas FROM FAMILIARES, EMPLEADOS, DEPARTAMENTO Por cada registro de Departamento va a ir a Empleados, luego a familiares La Evaluacin que realiza el manejador es de abajo hacia arriba y de derecha a izquierda,

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 37

    lo optimo es ir de menos filas enlazando bsquedas que retornen menos filas. .- Columnas mencionadas en la clusula WHERE Reducen la cantidad de filas retornadas por instruccin del total de filas de la tabla, permitiendo ademas el uso de ndices.

    Ejemplo: WHERE nombre = 'MIGUEL' and Salario > 10000 and Codigo_departamento = 10 Buscara todos los departamentos 10 cuyo salario sea mayor de 10000 y el nombre sea MIGUEL. .- Columnas mencionadas seleccionadas en la clusula SELECT Reducen la cantidad de valores por fila retornados de la tabla, si las columnas mencionadas existen en los ndices, la instruccin no necesitara ir a los datos. El uso del (*) como indicador de seleccin de todas las columnas es menos eficiente que indicar los nombres de las columnas y el orden en que fueron creadas.

    Ejemplo: SELECT numero_empleado, codigo_departamento ms eficiente que SELECT nombre, numero_empleado, codigo_departamento, salario, apellido ms eficiente que SELECT *

    Nombres de Tablas y Columnas Para obtener mejores tiempos de interpretacin y validacin sintctica (PARSE), es preferible usar nombres cortos; esto no quiere decir nombre codificados, al contrario, indica usar abreviaciones o conjuncin con palabras.

    Ejemplo: SELECT numero_del_empleado, codigo_del_departamento, primer_nombre, primer_apellido FROM empleados_compania Menos eficiente que SELECT nro_emp, cod_depto, nombre, apellido FROM empleados No quiere decir que SELECT nro_e, c_dep, nom, ape FROM C00101_emp

    Uso de alias y preposiciones Al construir JOINS con muchas tablas y nombres de columnas o tablas iguales es necesario y recomendable el uso de alias o preposiciones. Esta regla permite utilizar menos caracteres en el texto de la instruccin, lo que involucra menos tiempo de interpretacin (PARSE).

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 38

    Ejemplo: SELECT a.codigo_departamento, b.nombre_departamento, a.nombre empleado FROM empleados a, departamentos b WHERE a.codigo_departamento = b.codigo_departamento Ms eficiente que SELECT empleados.codigo_departamento, departamentos.nombre_departamento, empleados.nombre empleado FROM empleados a, departamentos b WHERE empleados.codigo_departamento = departamentos.codigo_departamento Ms eficiente que SELECT a.codigo_departamento, b.nombre_departamento, c.nombre jefe, a.nombre empleado FROM empleados a, empleados c, departamentos b WHERE a.nro_jefe = c.nro_empleado AND a.codigo_departamento = b.codigo_departamento

    El uso de parntesis para clarificar los predicados Al construir columnas con funciones agrupadas o realizar muchas evaluaciones WHERE que involucren muchos operandos, los parntesis facilitan al optimizador la interpretacin de una instruccin.

    Ejemplo: WHERE numero_empleado = 10 or numero_empleado = 20 and codigo_departamento = 10 or salario > 10000 and codigo_departamento = 20 Seria mejor si WHERE numero_empleado = 10 or (numero_empleado = 20 and codigo_departamento = 10) or (salario > 10000 and codigo_departamento = 20)

    Construccin de las tablas e Indices Orden de las Columnas al construir las tablas Las columnas con mayor acceso deben ser las primeras, tales como Claves Primarias, Claves Alternas, Claves Forneas; si existe alguna columna que acepte valores nulos debe ir de ltima. Las columnas que se modifican mucho deben tener precedencia a las de valores nulos. La Columna con formato LONG debe ser la ltima.

    Ejemplo: CREATE TABLE emp (nro_emp number(4) not null PRIMARY KEY, cod_depto number(2) not null REFERENCE depto,

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 39

    nombre char(30) not null, apellido char(30) not null, salario number(12,2) not null, direccion char(90) not null, nro_jefe number(4) REFERENCE emp, comision number(12,2), bonificacion number(12,2), fotografia long raw);

    Orden de las Columnas al construir ndices Se construirn ndices principalmente a la clave primaria y clave alterna para conservar la unicidad. Adicionalmente a las claves forneas para mejorar los JOINS y aquellas columnas con mucho acceso a travs de clusulas WHERE. Al construir Indices compuestos se debe tomar en cuenta lo siguiente: - La prioridad de las columnas debe venir dado de las columnas con mayor cantidad de valores reales a la de menor. - Las columnas de mayor acceso deben preceder a las de menor acceso - Columnas con Valores Numricos preceden a la de caracteres y estas a su vez a las de fechas. - Debe tomarse en cuenta el orden de las columnas en la tabla.

    Ejemplo: CREATE UNIQUE INDEX i_emp1 ON emp (nro_emp); CREATE INDEX i_emp2 ON emp (nombre, apellido); CREATE INDEX i_emp3 ON emp (cod_deptno, salario) CREATE INDEX i_emp4 ON emp (salario, comision) Ms ptimos que CREATE INDEX i_emp1 ON emp (nro_emp); CREATE INDEX i_emp2 ON emp (apellido, nombre); CREATE INDEX i_emp3 ON emp (salario, cod_deptno) CREATE INDEX i_emp4 ON emp (comision, salario)

    Parmetros de Almacenamiento La forma en que se almacenaran los datos influir en el rendimiento de las instrucciones, por lo tanto hay que prevenir y planificar un buen almacenamiento. Lo principal es conocer la cantidad de filas que va almacenar una tabla y en base a esto la cantidad de bytes a reservar para los datos, evitando crecimientos descontrolados, fraccionados y dispersos, tratando de mantener los datos en espacios continuos y con privilegios de acceso rpido (Discos ms rpidos). Estimar crecimientos y si es posible reservar el espacio con anterioridad. Determinar los grados de volatibilidad y actualizacin de los datos, para as poder sacar mejor provecho de los bloques de datos. (PCTUSED y PCTFREE).

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 40

    Utilizacin de Indices El uso de ndices es ineficiente, al punto de no crearlos para los siguientes casos - Tablas con menos de 5 bloques de datos - Columnas cuyo porcentaje de valores iguales sea mayor al 20% del total de filas de la tabla. - Columnas cuyo porcentaje de valores nulos sea muy alto - Columnas cuyos valores sean transformados durante el acceso de la instruccin. La columna tiene formato fecha, pero al realizar el acceso se transformo a caracter.

    Ejemplo: WHERE to_char(fecha_ingreso, 'MM') = '01' WHERE nro_emp + 100 = 101 WHERE nombre || apellido like 'GERARDO%ARAQUE%' Ineficiente al lado de WHERE fecha_ingreso between to_date('01', 'MM') and last_day(to_date('01','MM')) WHERE nro_emp = 101 -100 WHERE nombre like 'GERARDO%ARAQUE%' or apellido like 'GERARDO%ARAQUE%' or (nombre like 'GERARDO%' and apellido like '%ARAQUE%')

    Columnas con muchas actualizaciones de los valores Las Actualizaciones sern lentas si existe un ndice, pero si el volumen de acceso sobre este ndice es superior y es bien aprovechado se deben pesar, que es ms importante actualizaciones rpidas o lecturas rpidas.

    Ejemplo: Una empresa de servicios de personal, ubica grupos de trabajo en alrededor de 1000 empresas y tiene 10000 empleados. UPDATE emp set empresa_sirve = 10 where grupo_trabajo = 'O'; a la semana UPDATE emp set empresa_sirve = 41 where grupo_trabajo = 'O'; Comparado con accesos continuos SELECT nombre FROM emp WHERE empresa_sirce = 41; SELECT nombre FROM emp WHERE empresa_sirce = 11; - Que ndices sern usados cuando existen varios ndices Los ndices sern usados segn su especificacin en la clusula WHERE y al peso que tenga la evaluacin que se este realizando.

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 41

    PESOS DE LAS EVALUACIONES Rango Evaluacin de Acceso 1.- Acceso por ROWID 2.- Uso completo de una Indice nico Compuesta mediante una igualdad a una expresin. 3.- Uso de una Indice nico simple mediante una igualdad una expresin. 4.- Uso completo de una Clave de Enlace de un CLUSTER mediante una igualdad con otra Clave de Enlace de otra tabla del mismo CLUSTER. 5.- Uso completo de una Clave de Enlace de un CLUSTER mediante una igualdad una expresin. 6.- Uso completo de un ndice no nico compuesto mediante una igualdad a una expresin. 7.- Uso completo de un ndice no nico mediante una igualdad a una expresin 8.- Un ndice compuesto usado mediante rango evaluativos de bsqueda limitada de las primeras columnas o la primer columna igualdad a una expresin y el resto o un ndice simple usando (like 'caracteres%' , between ). 9.- Un ndice compuesto usado mediante rango evaluativos de bsqueda ilimitada de las primeras columnas usando ( >= , > , < ,

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 42

    2 CAPTULO 2: INTRODUCCIN A PL/SQL

    2.1 QU ES PL/SQL? PL/SQL provee una manera muy cmoda 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 en Oracle 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 la 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.

    2.2 ESTRUCTURAS DE BLOQUE PL/SQL es un lenguaje estructurado en bloques, lo que quiere decir que la unidad bsica de codificacin son bloques lgicos, los que a su vez pueden contener otros sub-bloques dentro de ellos, con las mismas caractersticas. Un bloque (o sub-bloque) permite agrupar en forma lgica un grupo de sentencias. De esta manera se pueden efectuar declaraciones de variables que slo tendrn validez en los bloques donde stas se definan. Un bloque PL/SQL tiene tres partes: una seccin de declaracin, una seccin de ejecucin y otra de manejo de excepciones. Slo el bloque de ejecucin es obligatorio en un programa PL/SQL. Es posible anidar sub-bloques en la seccin ejecutable y de excepciones, pero no en la seccin de declaraciones.

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 43

    Figura 2-1: Estructura de bloques de un programa PL/SQL

    2.3 VARIABLES Y CONSTANTES

    PL/SQL permite declarar constantes y variables para ser utilizadas en cualquier expresin dentro de un programa. La nica condicin exigida por PL/SQL es que cada variable (o constante) debe estar declarada antes de ser utilizada en una expresin. Las variables pueden corresponder a cualquier tipo de dato de SQL, tal como char, date o number, o algn tipo de PL/SQL, como boolean o binary_integer. Por ejemplo, si desea declarar una variable llamada part_no que almacene cuatro dgitos numricos y otra variable in_stock de tipo booleano, es decir, que almacene solamente los valores True o False, la declaracin se vera como sigue: part_no number(4) ; in_stock boolean ;

    Cmo asignar valores a variables Es posible asignar valores a las variables de dos formas. La primera utiliza el operador :=. La variable se ubica al lado izquierdo y la expresin al lado derecho del smbolo. Por ejemplo: tax := price * tax_rate ; bonus := current_salary * 0.10 ; amount := TO_NUMBER(SUBSTR(750 dlares, 1, 3)) ; valid := False ; La segunda forma de asignar valores a variables es obtener valores directamente desde la base de datos, como en: SELECT sal * 0.10 INTO bonus FROM emp WHERE empno = emp_id ;

    Declaracin de Constantes En la declaracin de una constante (muy similar a la de una variable), se debe incorporar la palabra reservada constant e inmediatamente asignar el valor deseado. En adelante, no se permitirn reasignaciones de valores para aquella constante que ya ha sido definida.

    Ejemplo: credit_limit CONSTANT real := 5000.00 ;

    2.4 CURSORES

    Los cursores son reas de trabajo que permiten ejecutar sentencias SQL y procesar la informacin obtenida de ellos.

    Hay dos tipos de cursores: implcitos y explcitos. PL/SQL declara implcitamente un cursor

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 44

    para todas las sentencias de manipulacin de datos, incluyendo las consultas que retornan slo una fila. Para consultas que devuelven ms de una fila, es posible declarar explcitamente un cursor que procese las filas en forma individual.

    Por ejemplo: DECLARE

    CURSOR curs_01 IS

    SELECT empno, ename, job FROM emp WHERE deptno=20;

    El conjunto de filas retornado se denomina set de resultados. Su tamao est determinado por el nmero de filas que calzan con el criterio de seleccin de la query que implementa el cursor. Las filas son procesadas de a una cada vez.

    En el captulo dedicado exclusivamente a estos componentes del lenguaje, se detallarn las caractersticas de las diferentes modalidades de utilizacin de los cursores.

    Figura 2-2: Recuperacin de filas a travs de un cursor

    2.5 MANEJO DE ERRORES

    PL/SQL provee una fcil manera de detectar y procesar ciertas condiciones de error predefinidas (o definidas por el usuario), llamadas excepciones. Cuando ocurre un error se procesa una excepcin, esto es, se detiene la ejecucin normal del programa y se transfiere el control a un segmento especial del programa que tiene por objeto manejar estas situaciones excepcionales. Estas rutinas que se codifican en forma separada se

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 45

    conocen con el nombre de exception handlers.

    Las excepciones predefinidas son gatilladas automticamente por el sistema cuando ocurre un error de cierta naturaleza. Adems, es posible alcanzar excepciones definidas con el usuario, simplemente haciendo un llamado a stas utilizando la sentencia raise.

    2.6 SUBPROGRAMAS

    En PL/SQL existen dos tipos de subprogramas, llamados procedimientos y funciones, los que pueden manejar parmetros de entrada y de salida. Un subprograma es un programa en miniatura, que comienza con un encabezado, una seccin opcional de declaraciones, una seccin de ejecucin y una seccin opcional de manejo de excepciones, como cualquier otro programa de PL/SQL.

    2.7 PAQUETES

    Es posible almacenar lgicamente un conjunto de tipos de datos relacionados, variables, cursores e incluso subprogramas dentro de un paquete. Cada paquete involucra la definicin y tratamiento de todos los elementos recin mencionados.

    Los paquetes se descomponen en dos partes: una especificacin y un cuerpo.

    La especificacin (package specification) es idntica a una seccin de declaracin de aplicaciones. En esta especie de encabezado es posible declarar tipos, constantes, variables, excepciones, cursores y subprogramas disponibles para su uso en el cuerpo del paquete. De esta manera, el cuerpo (package body) define la implementacin de esos subprogramas declarados en el apartado anterior.

    Ejemplo de uso de paquetes: CREATE PACKAGE emp_actions as -- package specification

    PROCEDURE hire_employee (empno NUMBER, ename CHAR, ) ; PROCEDURE fire_employee (empid NUMBER) ; END emp_actions ;

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 46

    CREATE PACKAGE BODY emp_actions AS -- package body

    PROCEDURE hire_employee (empno NUMBER, ename CHAR, ) IS BEGIN

    INSERT INTO emp VALUES (empno, ename, ); END hire_employee;

    PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN

    DELETE FROM emp WHERE empno = emp_id;

    END fire_employee;

    END emp_actions;

    Los paquetes pueden ser compilados y almacenados en una base de datos Oracle y su contenido puede ser compartido por varias aplicaciones. Cuando un paquete es llamado para su ejecucin, ste se almacena completamente en memoria la primera vez. Las siguientes llamadas no requieren efectuar este procedimiento cada vez y por esto aumentan la eficiencia de los programas.

    2.8 VENTAJAS EN LA UTILIZACIN DE PL/SQL

    PL/SQL es un lenguaje de procesamiento de transacciones completamente portable y con un alto rendimiento, que proporciona las siguientes ventajas al ser utilizado: Soporte para SQL Soporte para la programacin orientada a objetos Mejor rendimiento Alta productividad Completa portabilidad Integracin con Oracle garantizada Seguridad

    Soporte para SQL SQL se ha convertido en el lenguaje estndar de bases de datos por su flexibilidad de uso y

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 47

    facilidad de aprenderlo. Unos pocos comandos permiten la fcil manipulacin de prcticamente toda la informacin almacenada en una base de datos.

    SQL es no-procedural, lo cual significa que es Oracle quien se preocupar de cmo ejecutar de la mejor manera un requerimiento sealado en una sentencia SQL. No es necesaria la conexin entre varias sentencias porque Oracle las ejecuta de a una a la vez. PL/SQL le permite a usted una completa manipulacin de los datos almacenados en una base Oracle, proporciona comandos de control de transacciones y permite utilizar las funciones de SQL, operadores y pseudocolumnas. As, usted puede manipular los datos en Oracle de una manera flexible y segura. Adems, PL/SQL soporta tipos de datos de SQL, lo que reduce la necesidad de convertir los datos al pasar de una a otra aplicacin.

    PL/SQL tambin soporta SQL dinmico, una avanzada tcnica de programacin que convierte a sus aplicaciones en ms flexibles y verstiles.

    Soporte para Programacin Orientada a Objetos Los objetos se han convertido en una herramienta ideal para modelar situaciones de la vida real. Con su utilizacin es posible reducir el costo y tiempo de construccin de aplicaciones complejas. Otra ventaja es que utilizando una metodologa de este tipo es posible mantener diferentes equipos de programadores construyendo aplicaciones basadas en el mismo grupo de objetos. Permitir el encapsulamiento del cdigo en bloques es el primer paso para la implementacin de mtodos asociados a diferentes tipos de objetos construidos tambin con PL/SQL.

    Mejor rendimiento Sin PL/SQL, Oracle tendra que procesar las instrucciones una a una. Cada llamada producira un overhead considerable, sobre todo si consideramos que estas consultas viajan a travs de la red.

    Por el contrario, con PL/SQL, un bloque completo de sentencias puede ser enviado cada vez a Oracle, lo que reduce drsticamente la intensidad de comunicacin con la base de datos. Los procedimientos almacenados escritos con PL/SQL son compilados una vez y almacenados en formato ejecutable, lo que produce que las llamadas sean ms rpidas y eficientes. Adems, ya que los procedimientos almacenados se ejecutan en el propio servidor, el trfico por la red se reduce a la simple llamada y el envo de los parmetros necesarios para su ejecucin.

  • Universidad del Cauca Facultad de Ingeniera Electrnica y Telecomunicaciones Departamento de Sistemas

    Especializacin en Desarrollo de Soluciones Informticas 48

    El cdigo ejecutable se almacena en cach y se comparte a todos los usuarios, redundando en mnimos requerimientos de memoria y disminuyendo el overhead al mnimo.

    Alta productividad

    Si se decide utilizar otros productos de Oracle como Oracle Forms y Oracle Reports, es po