Mis Apuntes Oracle PL-SQL

74
Curso Fundamentos de Oracle, SQL y PLSQL Creado por: José Alexander Rodríguez Vargas 1. Fundamentos de Oracle ¿Qué es Oracle? Oracle es un sistema de gestión de base de datos relacional (o RDBMS por el acrónimo en inglés de Relational Data Base Management System), desarrollado por Oracle Corporation. Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando: soporte de transacciones estabilidad escalabilidad Soporte multiplataforma. Su dominio en el mercado de servidores empresariales ha sido casi total hasta hace poco, recientemente sufre la competencia del Microsoft SQL Server de Microsoft y de la oferta de otros RDBMS con licencia libre como PostgreSQL, MySql o Firebird. Las últimas versiones de Oracle han sido certificadas para poder trabajar bajo GNU/Linux. Licencias de Oracle Oracle a partir de la versión 10g Release 2, cuenta con 6 ediciones: Oracle Database Enterprise Edition(EE). La versión empresarial es la más alta del rango en las versiones de Bases de Datos oracle para servidor, cuenta con opciones tales com RAC, Particionamiento, Spatial, etc, y estas opciones pueden manejarse de manera separada para mejorar la funcionabilidad de la base de datos. Esta licencia se usa generalmente en servidores que tienen más de 4 CPU’s. y no tiene limites de memoria. Oracle Database Standard Edition (SE). La version standard es diseñada para empresas medianas y pequeñas. Ofrecevarias características y funcionalidades implementadas en la version Enterprise. Opciones de Base de Datos como Data Guard, Particionamiento, Spatial, etc no vienen incluidas con esta version. Esta version estandar aplica a servidores de 1 a 4 CPU’s , si se exceden los cuatro CPU’s deberá entonces adquirir una licencia de Enterprise Edition, la versión de Standard Edition no tiene limites de memoria y puede usarse en clustering con Oracle RAC sin cargo adicional a partir de la versión 10g.

Transcript of Mis Apuntes Oracle PL-SQL

Page 1: Mis Apuntes Oracle PL-SQL

CursoFundamentos de Oracle, SQL y PLSQL

Creado por:José Alexander Rodríguez Vargas

1. Fundamentos de Oracle

¿Qué es Oracle?

Oracle es un sistema de gestión de base de datos relacional (o RDBMS por el acrónimo en inglés de Relational Data Base Management System), desarrollado por Oracle Corporation.

Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando:

soporte de transacciones estabilidad escalabilidad Soporte multiplataforma.

Su dominio en el mercado de servidores empresariales ha sido casi total hasta hace poco, recientemente sufre la competencia del Microsoft SQL Server de Microsoft y de la oferta de otros RDBMS con licencia libre como PostgreSQL, MySql o Firebird. Las últimas versiones de Oracle han sido certificadas para poder trabajar bajo GNU/Linux.

Licencias de Oracle

Oracle a partir de la versión 10g Release 2, cuenta con 6 ediciones:

Oracle Database Enterprise Edition(EE).

La versión empresarial es la más alta del rango en las versiones de Bases de Datos oracle para servidor, cuenta con opciones tales com RAC, Particionamiento, Spatial, etc, y estas opciones pueden manejarse de manera separada para mejorar la funcionabilidad de la base de datos. Esta licencia se usa generalmente en servidores que tienen más de 4 CPU’s. y no tiene limites de memoria.

Oracle Database Standard Edition (SE).

La version standard es diseñada para empresas medianas y pequeñas. Ofrecevariascaracterísticas y funcionalidades implementadas en la version Enterprise.

Opciones deBase de Datos como Data Guard, Particionamiento, Spatial, etc no vienen incluidascon esta version. Esta version estandar aplica a servidores de 1 a 4 CPU’s , si seexceden los cuatro CPU’s deberá entonces adquirir una licencia de Enterprise Edition,la versión de Standard Edition no tiene limites de memoria y puede usarse en clustering con Oracle RAC sin cargo adicional a partir de la versión 10g.

Page 2: Mis Apuntes Oracle PL-SQL

Oracle Database Standard Edition One (SE1)

La version Standar edition one es de menor costo y menos nivel que la Standar Edition.Se introdujo con Oracle 10g , tiene algunas restricciones en sus funcionalidades,puede ser licenciada solo para pequeños servidores con una capacidad maxima de 2procesadores.

Oracle Database Express Edition (XE).

Introducida en 2.005, ofrece una versión Oracle 10g libre para distribuirse sobreplataformas Windows y Linux, tiene restricciones de solo un CPU, 4 Gigas de datos yusa máximo 1 GB de RAM, el soporte de esta versión se encuentra en foros y no através de Oracle Corporation.La única edición gratuita es la Express Edition, que es compatible con las demásediciones de Oracle Database 10gR2 y Oracle Database 11g.Esta version puede embeberse con otras aplicaiones de terceros y se puede distribuirgratuitamente.

Oracle Database Personal Edition (PE).

La personal edition es una versión de base de datos singular para usuario. Es casiigual a la version Enterprise Edition, pero no soporta opciones avanzadas como RAC,Streams, XMLDB, etc.

Oracle Database Lite Edition (LE).

Destinado para funcionar en dispositivos móviles tales como celulares, PDA’s, etc.Incrusta una base de datos móvil situada en el dispositivo y se puede sincronizar conuna instalación basada en servidor.

Versiones de Oracle

Oracle5 Oracle6 Oracle7: 7.0.16—7.3.4 Oracle8 Database: 8.0.3—8.0.6 Oracle8i Database Release 1: 8.1.5.0—8.1.5.1 Oracle8i Database Release 2: 8.1.6.0—8.1.6.3 Oracle8i Database Release 3: 8.1.7.0—8.1.7.4 Oracle9i Database Release 1: 9.0.1.0—9.0.1.5 (patchset as of December 2003) Oracle9i Database Release 2: 9.2.0.1—9.2.0.8 (patchset as of April 2007) Oracle Database 10g Release 1: 10.1.0.2—10.1.0.5 (patchset as of February 2006) Oracle Database 10g Release 2: 10.2.0.1—10.2.0.5 (patchset as of April 2010) Oracle Database 11g Release 1: 11.1.0.6—11.1.0.7 (patchset as of September 2008) Oracle Database 11g Release 2: 11.2.0.1 (released 2009­09­01)

Sistemas Operativos y Arquitecturas Soportadas en Oracle 10g R2

Oracle Database 10g Release 2 (10.2.0.4) for MAC OS X on Intel x86­64

Page 3: Mis Apuntes Oracle PL-SQL

Oracle Database 10g Release 2 (10.2.0.4) for Microsoft Windows Vista x64, Microsoft Windows Server 2008 R2 x64, Windows 7 x64

Oracle Database 10g Release 2 (10.2.0.3/10.2.0.4) for Microsoft Windows Vista, Windows Server 2008, Windows 7

Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows (x64) Oracle Database 10g Release 2 (10.2.0.1.0) for Microsoft Windows (64­bit Itanium) Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x86 Oracle Database 10g Release 2 (10.2.0.1.0) for Linux x86­64 Oracle Database 10g Release 2 (10.2.0.1.0) for Linux Itanium Oracle Database 10g Release 2 (10.2.0.1.0) for Linux on Power Oracle Database 10g Release 2 (10.2.0.1.0) for AIX5L Oracle Database 10g Release 2 (10.2.0.1.0) for HP­UX PA­RISC Oracle Database 10g Release 2 (10.2.0.1.0) for HP­UX Itanium Oracle Database 10g Release 2 (10.2.0.2) for HP Tru64 UNIX Oracle Database 10g Release 2 (10.2.0.2) for HP OpenVMS Alpha Oracle Database 10g Release 2 (10.2.0.2) for OpenVMS Itanium Oracle Database 10g Release 2 (10.2.0.2) for Solaris Operating System (x86) Oracle Database 10g Release 2 (10.2.0.1.0) for Solaris Operating System (x86­64) Oracle Database 10g Release 2 (10.2.0.1.0) for Solaris Operating System (SPARC)

(64­bit) Oracle Database 10g Release 2 (10.2.0.2) for z/Linux Oracle Database 10g Release 2 (10.2.0.2) for z/OS (OS/390) Oracle Database 10g Release 2 (10.2.0.2.20) for Fujitsu Siemens BS2000/OSD

Sistemas Operativos y Arquitecturas Soportadas en Oracle 11g R2

Microsoft Windows (32­bit) Microsoft Windows (x64) Linux x86 Linux x86­64 Solaris (SPARC) (64­bit) Solaris (x86­64) HP­UX Itanium HP­UX PA­RISC (64­bit) AIX (PPC64)

Reseña Histórica de Oracle

1977: Larry Ellison y unos amigos, fundaron Software Development Laboratories.1979: SDL cambia su nombre a "Relational Software, Inc."RSI introdujo su producto Oracle V2 como la primera versión temprana de un sistema de basede datos relacional, esta versión no tenía soporte de transacciones pero implementabafuncionalidades básicas de consultas SQL y JOIN’s. RSI, nunca lanzó la versión 1.1982: RSI, cambia su nombre nuevamente siendo ahora conocida como “Oracle Corporation”para alinearse más estrechamente con su producto estrella, como estrategía de marketing.1983: La compañia lanza Oracle versión 3, el cual fue reescrito usando lenguaje C, y tienefuncionalidades para soportar transacciones como son COMMIT y ROLLBACK.1984: Oracle Corporation lanza la versión 4, el cual tiene soporte de read­consistency.1985: Oracle Corporation lanza la versión 5 con soporte Cliente ­ Servidor.

Page 4: Mis Apuntes Oracle PL-SQL

1986: Oracle version 5.1 es lanzado con soporte para queryes distribuidos.1988: Oracle lanza la versión 6 que viene con soporte de PL/SQL embebido con Oracle Forms versión 3 (La versión 6 de Oracle, no podía almacenar el código de PL/SQL en la base dedatos propiamente dicha). Esta versión también tenía bloqueo de fila y copias de seguridad encaliente.1989: Oracle Corporation entra en el mercado de productos de aplicaciones y desarrolla suERP (Que luego llegará a hacer parte de Oracle E­Bussiness Suite), basada en la base dedatos relacional Oracle.1990: Se lanza Oracle Applications versión 8.1992: Aparece Oracle versión 7 con soporte de integridad referencial, procedimientosalmacenados y triggers.1997: Oracle Corporation lanza la versión 8, que apoyo el desarrollo orientado a objetos yaplicaciones multimedia.1999: Se lanza la versión Oracle8i dirigido a proporcionar una base de datos interactue mejorcon Internet (La letra i en su nombre viene de “Internet”). Esta versión también incorpora unamáquina virtual de JAVA nativa en la base de datos (Oracle JVM).2000: Oracle E­Business Suite 11i son pioneros en integrar software enterprise application.2001: Oracle9i se lanza con 400 nuevas características, incluyendo entre ellas la posibilidad deleer y escribir documentos XML. También se provee una opción para Oracle RAC “RealApplication Clusters”2003: Oracle Corporation lanza Oracle Database 10g, el cual soporta expresiones regulares.(la g viene de “Grid”, haciendo incapie en un enfoque de marketing)2005: se lanza el release 2 (Oracle Database 10.2.0.1 ­ 10gR2).2006: Oracle Corporation anuncia Unbreakable Linux.2007: Oracle Database 10g release 2 establece un nuevo record mundial TPC­H.2007: Oracle Corporation lanza la versión de base de datos 11g para Linux y Windows.2008: Oracle Corporation adquiere BEA Systems.2010: Oracle Corporation adquiere Sun Microsystems.

Para más información, consultar el siguiente enlace.|

http://www.oracle.com/timeline/index.html

Instalación Básica de Una Base de Datos Oracle XE

Se demostrarán dos maneras de instalar la base de datos Oracle XE

1. Instalación mediante el gestor de paquetes apt­get de Ubuntu.

1. Editar el fichero sources.list

$ sudo nano /etc/apt/sources.list

2. Ingresar el repositorio para descargar el Oracle XE, adicionando la siguiente linea.

deb http://oss.oracle.com/debian unstable main non­free

3. Guardar el archivo y salir.

Page 5: Mis Apuntes Oracle PL-SQL

4. Obtener la llave GPG de autorización

$ wget http://oss.oracle.com/el4/RPM­GPG­KEY­oracle ­O­ | sudoapt­key add ­

5. Actualizar la base de datos de paquetes

$ sudo apt­get update

6. Luego de actualizados los repositorios, instalar el Oracle XE

$ sudo apt­get install oracle­xe

Se le solicitará al usuario confirmación de la instalación de paquetes adicionales y la base de datos, se debe indicar la autorización digitando “yes”.

7. Configurar la base de datos luego de la instalación

$ sudo /etc/init.d/oracle­xe configure

Configurar la contraseña para los usuarios SYS y SYSTEM Configurar el puerto del listener. Por defecto es el 1521 Configurar el puerto para acceder al servicio de la base de datos via web. Por

defecto es el 8080.

Si desea realizar la desinstalación de la base de datos por el método apt­get, puedeusar lo siguiente.

Listar los paquetes instalados (Buscar los que sean de Oracle)

$ dpkg ­­get­selections oracle*

ó

$ dpkg ­­l oracle*

Deberia tenerse un paquete con el nombre: oracle­xe ó oracle­xe­universal.Tras identificar el paquete, proceder a desinstalarlo digitando un comando tras

otro así:

$ sudo apt­get remove oracle­xe­universal

$ sudo apt­get purge oracle­xe­universal

$ sudo rm ­rf /usr/lib/oracle

$ sudo deluser oracle

$ sudo delgroup dba

Page 6: Mis Apuntes Oracle PL-SQL

2. Instalación mediante el gestor de paquetes dpkg de Ubuntu, teniendo el instalador.deb de la base de Datos.

1. Verificar que se tengan los dos instaladores siquientes:

libaio_0.3.104­1_i386.deboracle­xe­universal_10.2.0.1­1.0_i386.deb

2. El paquete libaio_0.3.104­1_i386.deb contiene unas librerías dedependencia que serequieren previamente antes de instalar la base de datos, para su instalacióndigitaremos lo siguiente:

$ sudo dpkg ­i libaio_0.3.104­1_i386.deb

3. tras finalizar la instalación de esta libreria, proseguir con el siguiente comando parala instalación de la base de datos.

$ sudo dpkg ­i oracle­xe­universal_10.2.0.1­1.0_i386.deb

4. Configurar la base de datos luego de la instalación

$ sudo /etc/init.d/oracle­xe configure

Configurar la contraseña para los usuarios SYS y SYSTEM Configurar el puerto del listener. Por defecto es el 1521 Configurar el puerto para acceder al servicio de la base de datos via web. Por

defecto es el 8080

Si desea realizar la desinstalación de la base de datos por el método dpkg, puedeusar lo siguiente.

Listar los paquetes instalados (Buscar los que sean de Oracle)

$ dpkg ­­get­selections oracle*

ó

$ dpkg ­­l oracle*

Deberia tenerse un paquete con el nombre: oracle­xe ó oracle­xe­universal.Tras identificar el paquete, proceder a desinstalarlo digitando un comando tras

otro así:

$ sudo dpkg ­­remove oracle­xe­universal

$ sudo dpkg ­­purge oracle­xe­universal

$ sudo apt­get autoremove

$ sudo rm ­rf /usr/lib/oracle

Page 7: Mis Apuntes Oracle PL-SQL

$ sudo deluser oracle

$ sudo delgroup dba

Nota: Se recomienda para hacer la desintalación de paquetes usar el método deapt­get.

Verificación de la Instalación de la Base de Datos

Ingresar por el browser la siguiente URL:

http://127.0.0.1:8080/apex

Verificar el ingreso a la aplicación con los usuarios SYS y SYSTEM y la contraseña que sedefinió en la instalación.

Nota: Si se desea cambiar el puerto por defecto en el que se ejecuta el apex, es decir el 8080,nos conectamos como usuario SYSTEM y ejecutamos los pasos siguientes::

1. Verificar el puerto en el que se esta ejecutando la aplicación:

SELECTDBMS_XDB.GETHTTPPORT "Puerto­HTTP"

FROMDUAL;

2. Ejecutar el siguiente bloque para cambiar el puerto al que queramos:

BEGINDBMS_XDB.SETHTTPPORT('9090');

END;/

Instalación Básica de Una Base de Datos Oracle Enterprise

Prerrequisitos:

La documentación de Oracle dice que el sistema debe tener 512Mb mínimo de RAM y 1 Gb de swap.

Para ver la cantidad de RAM y Swap ejecuta los siguientes comandos:

$ grep MemTotal /proc/meminfo

$ grep SwapTotal /proc/meminfo

Page 8: Mis Apuntes Oracle PL-SQL

Para ver el espacio libre en disco ejecuta:

$ df ­h

Instalar un servidor ssh en la máquina

$ sudo apt­get install ssh

1. Descargar las siguientes y complementos necesarios para la instalación.

$ sudo apt­get install unzip build­essential x11­utils rpm ksh lsb­rpm libaio1

2. Ubuntu 10.4 viene con las librerias libstdc++6 instaladas, sin embargo para Oracle 10gR2 y 11gR2 se requiere libstdc++5, para instalarlas requerimos de seguir los siguientes pasos para una arquitectura de 32 bits.

$ wgethttp://security.ubuntu.com/ubuntu/pool/universe/i/ia32­libs/ia32­libs_2.7ubuntu6.1_amd64.deb

$ dpkg­deb ­x ia32­libs_2.7ubuntu6.1_amd64.deb ia32­libs

$ sudo cp ia32­libs/usr/lib32/libstdc++.so.5.0.7 /usr/lib/

$ cd /usr/lib

$ sudo ln ­s libstdc++.so.5.0.7 libstdc++.so.5

Si la arquitectura es de 64 bits, se deberá usar:

$ wgethttp://mirrors.kernel.org/ubuntu/pool/universe/g/gcc­3.3/libstdc++5_3.3.6­17ubuntu1_amd64.deb

$ dpkg­deb ­x libstdc++5_3.3.6­17ubuntu1_amd64.deb ia64­libs

$ sudo cp ia64­libs/usr/lib/libstdc++.so.5.0.7 /usr/lib64/

$ cd /usr/lib64/

$ sudo ln ­s libstdc++.so.5.0.7 libstdc++.so.5

3. Ejecutar los siguientes pasos como usuario root. Crear los grupos oinstall y dba

$ sudo su ­

# addgroup oinstall

# addgroup dba

Page 9: Mis Apuntes Oracle PL-SQL

4. Crear el usuario oracle y asignarlo a los dos grupos creados en el paso 3.

# useradd ­g oinstall ­G dba ­p password ­d /home/oracle ­s /bin/bash oracle

# mkdir /home/oracle

# chown ­R oracle:dba /home/oracle

5. Cambiar el password al usuario oracle creado.

# passwd oracle

6. Crear algunos enlaces simbólicos necesarios en el sistema, y asignación de permisos.

# ln ­s /usr/bin/awk /bin/awk

# ln ­s /usr/bin/rpm /bin/rpm

# ln ­s /usr/bin/basename /bin/basename

# mkdir /etc/rc.d

# for i in 0 1 2 3 4 5 6 S ; do ln ­s /etc/rc$i.d /etc/rc.d/rc$i.d ; done

Creamos el directorio base de oracle (/u01/app/oracle)

# mkdir ­p /u01/app/oracle

y opcionalmente un directorio de datos para las bases de datos que creemos (/u02/oradata):

# mkdir ­p /u02/oradata

# chown ­R oracle:dba /u01 /u02

# chmod ­R 775 /u01 /u02

7. Crear el archivo .bashrc para el usuario oracle

# su ­ oracle

$ touch .bash_profile

Editar el fichero con:

$ nano .bash_profile

Ahora, adicionar las siguientes líneas a este fichero:

#!/bin/bash

Page 10: Mis Apuntes Oracle PL-SQL

# enable color support of ls and also add handy aliasesif [ ­x /usr/bin/dircolors ]; then

test ­r ~/.dircolors && eval "$(dircolors ­b ~/.dircolors)" || eval "$(dircolors ­b)"alias ls='ls ­­color=auto'#alias dir='dir ­­color=auto'#alias vdir='vdir ­­color=auto'

alias grep='grep ­­color=auto'alias fgrep='fgrep ­­color=auto'alias egrep='egrep ­­color=auto'

fi

umask 022

ORACLE_BASE=/u01/app/oracleexport ORACLE_BASE

ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1export ORACLE_HOME

ORACLE_SID=capacitaexport ORACLE_SID

ORACLE_TERM=xtermexport ORACLE_TERM

ORACLE_OWNER=oracleexport ORACLE_OWNER

# TNS_ADMIN=/home/oracle/config/10.2.0 export TNS_ADMIN

NLS_LANG=SPANISH_SPAIN.WE8ISO8859P1export NLS_LANG

#ORA_NLS10=$ORACLE_HOME/db_1/nls/data; export ORA_NLS10

CLASSPATH=$CLASSPATH:$ORACLE_HOME/jdbc/lib/classes12.zipLD_LIBRARY_PATH=$ORACLE_HOME/libexport LD_LIBRARY_PATH

DISABLE_HUGETLBFS=1export DISABLE_HUGETLBFS

TEMP=/tmpexport TEMP

TMPDIR=/tmpexport TMP

PATH=.:$PATH:/u01/app/oracle/product/10.2.0/db_1/bin

Page 11: Mis Apuntes Oracle PL-SQL

export PATH

Salir del usuario oracle y retornar al usuario root, para proseguir con la instalación digitando exit sobre el prompt

$ exit

También se deberan crear los siguientes directorios como sigue:

# mkdir ­p /home/oracle/config/10.2.0

# mkdir /var/lock/subsys

8. Es necesario también ajustar algunos parámetros del kernel. Para ver la configuraciónactual de nuestro sistema ejecutar los siguientes comandos:

# sysctl ­a | grep sem

# sysctl ­a | grep shm

# sysctl ­a | grep file­max

# sysctl ­a | grep ip_local_port_range

9. Para actualizar el fichero de configuración se debe proceder a sacar una copiadel fichero así:

# cp /etc/sysctl.conf /etc/sysctl.conf.old

Luego editar el fichero con el comando:

# nano /etc/sysctl.conf

y finalmente, adicionar o reemplazar los parámetros con los siguientes valores:

kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file­max = 65536net.ipv4.ip_local_port_range = 1024 65000

Al reiniciar se leerá la con figuración del kernel de /etc/sysctl.conf y se aplicaran los cambios. Pero si queremos que los cambios se apliquen inmediatamente ejecutamos la siguiente instrucción:

# sysctl ­p

10. Verificar los límites de shell, así:

Page 12: Mis Apuntes Oracle PL-SQL

# ulimit ­a

Por defecto, hay un límite por usuario de 1024 descriptores de fichero, y 2047 procesos, para modificar estos valores, primero sacamos una copia al fichero /etc/security/limits.conf de la siguiente manera:

# cp /etc/security/limits.conf /etc/security/limits.conf.old

Luego Editamos el fichero con la instrucción:

# nano /etc/security/limits.conf

para modificar estos valores así:

* soft nproc 2047* hard nproc 16384* soft nofile 1024* hard nofile 65536

Las dos últimas líneas imponen un límite inicial de 1024, pero permiten que un usuario aumente el límite a 65536 usando el comando ulimit ­n 65536.Las dos primeras líneas limitan el número de procesos.

11. Se debe modificar el fichero pam_limits.so que es el módulo que procesa la configuración del fichero /etc/security/limits.conf que se cambió en el paso anterior. Primero sacar una copia de seguridad de la siguiente manera:

# cp /etc/pam.d/login /etc/pam.d/login.old

Luego editar el fichero así:

# nano /etc/pam.d/login

buscar en el apartado de /etc/security/limits.conf y verificar si existe la línea

session required pam_limits.so

ó

session required /lib/security/pam_limits.so

de no existir, agregarla.

13. Ahora comenzaremos el proceso de Instalación y deberemos salir del usuario root y continuar con el usuario del SO, para ello digitar la palabra exit sobre la consola así:

# exit

12. Ubicarse en el directorio que contiene el zip de instalación y luego descomprimirlo.

Page 13: Mis Apuntes Oracle PL-SQL

$ unzip oracle_10gr2_linux32.zip

13. Tras el proceso de descompresión, se debió crear una carpeta llamada database, ubicarse allí.

$ cd database

14. En este paso se requiere ejecutar un asistente gráfico para proseguir el proceso de instalación. Sí la instalación se ha ejecutado en una máquina diferente en donde queremos instalar Oracle, podríamos exportar el sistema X remoto a nuestra máquina local, a continuación se detallan estos pasos, y si nos encontramos directamente sobre la maquina de la instalación solo sería ejecutar el entorno gráfico y omitir estos pasos.

En la máquina local o cliente

$ xhost + IP_SERVER_ORACLE

En la máquina remota (Servidor Oracle)

$ export DISPLAY=IP_CLIENTE:0

De nuevo en la máquina local o cliente, ejecutar lo siguiente

$ ssh oracle@IP_SERVER_ORACLE ­X

ya estando en el servidor Oracle, buscar la carpeta “database” y Ejecutar el shell de instalación así:

$ ./runInstaller ­ignoreSysPreReqs

Ponemos el flag “­ignoreSysPreReqs” porque por defecto se espera instalar en una maquina Red Hat, y fallaria la comprobacion de seguridad al comprobar que nuestro sistema operativo no es ese. con este flag le forzamos a que continue la instalación independientemente del sistema que tengamos. Ahora se visualizaran las pantallas del asistente y las configuraciones apropiadas.

Page 14: Mis Apuntes Oracle PL-SQL

Pantalla de Bienvenida a la instalación de Oracle 10g, puslamos sobre el botón siguiente.

Page 15: Mis Apuntes Oracle PL-SQL

Buscamos el directorio oracle en el /home y digitamos “oraInventory”, luego escogemos en Nombre de grupo “oinstall”luego clic en Siguiente.

Page 16: Mis Apuntes Oracle PL-SQL

Seleccionamos en el tipo de instalación, Enterprise Edition y pulsamos Siguiente.

Page 17: Mis Apuntes Oracle PL-SQL

Se visualiza el nombre de la instalación y su directorio raíz, pulsamos en Siguiente.

Page 18: Mis Apuntes Oracle PL-SQL

Se realizan una serie de chequeos para determinar si se cumplen algunos requisitos, se muestra una advertencia sobre el Sistema Operativo, que no es certificado por Oracle, pero a pesar de ello pulsamos sobre el botón Siguiente.

Se le mostrará una advertencia que algunos requisitos han fallado y que si desea continuar, pulsar sobre Sí.

Page 19: Mis Apuntes Oracle PL-SQL

Seleccionamos Crear Base de Datos y pulsamos sobre el botón Siguiente.

Page 20: Mis Apuntes Oracle PL-SQL

Escogemos que deseamos crear una base de datos de propósito general, y pulsamos sobreel botón Siguiente.

Page 21: Mis Apuntes Oracle PL-SQL

En nombre de la base de datos global, digitamos capacitacion.datacenter.com.coEn el SID, nos quedaron los 8 caracteres del nombre global: capacita.Como Juego de carácteres escogemos: Unicode estándar UTF­8 AL32UTF8.Adicionalmente, indicamos que queremos instalar los esquemas de ejemplo.Finalmente, damos clic en Siguiente.

Page 22: Mis Apuntes Oracle PL-SQL

Dejamos para la opción de Gestión de la base de datos, la opción de administración pordefecto y pulsamos sobre el botón Siguiente.

Page 23: Mis Apuntes Oracle PL-SQL

Escogemos como opción de almacenamiento Sistema de Archivos, y escogemos el directorioque previamente se había destinado para ello: /u02/oradata. Luego pulsamos Siguiente.

Page 24: Mis Apuntes Oracle PL-SQL

En la opción de Copias de Seguridad, escogemos que no deseamos realizarlas de maneraautomática y clic en Siguiente.

Page 25: Mis Apuntes Oracle PL-SQL

Escogemos que vamos a manejar una sola contraseña para los usuarios, la ingresamos ydamos clic en Siguiente.

Verificar usuarios SYS, SYSTEM, SYSMAN y DBSNMP

Page 26: Mis Apuntes Oracle PL-SQL

Se presenta un resumen de las configuraciones y productos que van a ser instalados,pulsamos sobre el botón Instalar, para copiar los archivos necesarios al equipo y ejecutar labase de datos

Page 27: Mis Apuntes Oracle PL-SQL

Se presenta un resumen de la instalación, y damos clic en Aceptar.

Se le solicita al usuario conectarse como usuario root y ejecutar dos scripts:

Page 28: Mis Apuntes Oracle PL-SQL

# /home/oracle/oraInventory/orainstRoot.sh

# /u01/app/oracle/product/10.2.0/db_1/root.sh

Configuración de la red de Oracle

Listener de Oracle

TNS Listener es un proceso servidor que provee la conectividad de red con la base de datosOracle. El listener está configurado para escuchar la conexión en un puerto específico en elservidor de base de datos. Cuando una se pide una conexión a la base de datos, el listenerdevuelve la información relativa a la conexión. La información de una conexión para unainstancia de una base de datos provee el nombre de usuario, la contraseña y el SID de la basede datos. Si estos datos no son correctos se devolverá un mensaje de error.

Por defecto el puerto del listener es el 1521 El listener no limita el número de conexiones a la base de datos

Toda la información del listener la contiene un archivo denominado listener.ora($ORACLE_HOME/network/admin. )

Page 29: Mis Apuntes Oracle PL-SQL

El comando para gestionar el listener es lsnrctl. Mediante este comando podemos:

Parar el listener. Ver el estado del listener. Arrancar el listener. Rearrancar el listener.

Archivo TNSNAMES.ora

Archivo ubicado en los clientes,contiene los nombres de servicio de red, asignados adescriptores a través de los cuales se nos permite acceder

Parámetros del archivo:

HOST: Dirección ip del servidor con el cual queremos conectar

PORT: Puerto donde escucha la base de datos

SERVICE_NAME: Nombre del servicio de base de datos al que queremos conectar

DESCRIPTOR DE CONEXION: Nombre o Alias con el que se identifica la conexión.

Podemos comprobar si la conexión es correcta mediante el comando TNSPING

Arranque y parada de la base de Datos

Arrancar base de datos

El arranque de una base de datos ORACLE requiere tres etapas

1. Arrancar la instancia2. Montar la base de datos3. Abrir la base de datos

1. Arrancar la base de datos

En esta parte del arranque se generan los procesos background.

Se crea la SGA. Sus dimensiones se basan en el fichero de inicialización “init.ora”.

SQLPLUS> connect sys as sysdbaconnectedSQLPLUS> startup nomountOracle Instance started

2. Montar la base de datos

En esta parte del proceso de arranque se produce la conexión al/los archivo/s de control.

Page 30: Mis Apuntes Oracle PL-SQL

En este estado se puede:

1. Cambiar el modo de archivado de la B.D.2. Renombrado de archivos de Redo Log o del asociado al tablespace SYSTEM3. Crear, modificar o suprimir nuevos Redo Log o grupos de Redo Log

Partiendo del anterior estado ( nomount ), montamos la base de datos de la siguiente forma:

SQLPLUS> alter database mountdatabase mounted

En caso de que queramos iniciar la base de datos en este estado bastaría con hacer losiguiente:

SQLPLUS> connect sys as sysdbaconnectedSQLPLUS> startup mountOracle Instance startedDatabase mounted

3. Abrir base de datos

En esta parte de proceso abren todos los ficheros asociados a los tablespaces y losficheros de Redo Log.

La B.D. está accesible para todos los usuarios

Si es necesaria una recuperación (por un fallo de luz o CPU), se produce en este momento.

Partiendo del anterio estando ( mount ), abrimos la base de datos de la siguiente forma:

SQLPLUS> alter database opendatabase opened

En caso de que queramos iniciar la base de datos en este estado bastaría con hacer losiguiente:

SQLPLUS> connect sys as sysdbaconnectedSQLPLUS> startupOracle Instance startedDatabase opened

Mas alternativas para el arranque de base de datos

Arranque solo para usuarios con el privilegio RESTRICTED SESSION

SQLPLUS> startup restrict

Page 31: Mis Apuntes Oracle PL-SQL

Arranque forzado

SQLPLUS> startup force

Arranque con un fichero de parámetros distinto al habitual o localizado en una situacióndiferente a donde se encuentra por defecto

SQLPLUS> startup pfile=/oracle/database/init2.ora

Parada base de datos

La parada de una B.D. Oracle se realiza mediante el comando SHUTDOWN desde SQL*DBAdespués de haber establecido una conexión como SYS AS SYSDBA

Existen tres tipos de shutdown

1. shutdown normal2. shutdown immediate3. shutdown abort

1. Shutdown normal

Espera a que los usuarios conectados actualmente finalicen TODAS las operaciones.

Evita nuevas conexiones. Los usuarios que intentan conectarse reciben el mensaje “Shutdownin progress”.

Cierra y desmonta la B.D. Cierra la SGA para los procesos background.

No necesita recuperacion al arrancar la base de datos

SQLPLUS> connect sys as sysdbaconnectedSQLPLUS> shutdown normal

2. Shutdown immediate

Espera a que las transacciones actuales se completen

Evita nuevas transacciones y nuevas conexiones. Los usuarios que intentan conectarse o losque ya están conectados al intentar realizar una nueva transacción reciben el mensaje“Shutdown in progress”.

El proceso PMON finaliza las sesiones no activas y realiza ROLLBACK de aquellastransacciones que no estén validadas.

Cierra y desmonta la B.D. Cierra la SGA para los procesos background.

No necesita recuperacion al arrancar la base de datos

Page 32: Mis Apuntes Oracle PL-SQL

SQLPLUS> connect sys as sysdbaconnectedSQLPLUS> shutdown immediate

3. Shutdown abort

Parada drástica, no espera a que los usuarios conectados actualmente finalicen sustransacciones. El usuario conectado recibe el mensaje “No logged on”.

No se realiza ROLLBACK de las transacciones pendientes.

El proceso PMON finaliza las sesiones no activas y realiza ROLLBACK de aquellastransacciones que no estén validadas.

Si necesita recuperacion al arrancar la base de datos

SQLPLUS> connect sys as sysdbaconnectedSQLPLUS> shutdown abort

Arquitectura de Oracle

Una Base de Datos Oracle es un conjunto de datos almacenados y accesible según el formatode tablas relacionales. Una tabla relacional tiene un nombre y unas columnas, su definición.Los datos están almacenados en las filas. Las tablas pueden estar relacionadas con otras.

Una Base de Datos Oracle está almacenada físicamente en ficheros, y la correspondenciaentre los ficheros y las tablas es posible gracias a las estructuras internas de la BD, quepermiten que diferentes tipos de datos estén almacenados físicamente separados. Estádivisión lógica se hace gracias a los espacios de tablas, tablespaces.

Tablespaces

Un tablespace es una unidad lógica de almacenamiento dentro de una base de datos oracle.Es un puente entre el sistema de ficheros del sistema operativo y la base de datos.

Cada tablespace se compone de, al menos, un datafile y un datafile solo puede pertenecer aun tablespace.

Cada tabla o indice de oracle pertenece a un tablespace, es decir cuando se crea una tabla oindice se crea en un tablespace determinado.

Hay varias razones que justifican este modo de organización de las tablas en espacios detablas:

Un espacio de tablas puede quedarse offline debido a un fallo de disco, permitiendo queel SGBD continúe funcionando con el resto.

Page 33: Mis Apuntes Oracle PL-SQL

Los espacios de tablas pueden estar montados sobre dispositivos ópticos si son desólo lectura.

Permiten distribuir a nivel lógico/físico los distintos objetos de las aplicaciones. Son una unidad lógica de almacenamiento, pueden usarse para aislar completamente

los datos de diferentes aplicaciones. Oracle permite realizar operaciones de backup/recovery a nivel de espacio de tabla

mientras la BD sigue funcionando.

Cuando se crean se les asigna un espacio en disco que Oracle reserva inmediatamente, seutilice o no. Si este espacio inicial se ha quedado pequeño Oracle puede gestionar elcrecimiento dinámico de los ficheros sobre los que se asientan los espacios de tablas. Estoelimina la posibilidad de error en las aplicaciones por fallos de dimensionamiento inicial. Losparámetros de crecimiento del tamaño de los espacios de tablas se especifican en la creaciónde los mismos.

Se pueden ver los espacios de tablas definidos en nuestra BD con el comando SQL siguiente:

SQL> select * from user_tablespace;

Datafiles

Un datafile es la representación física de un tablespace. Son los "ficheros de datos" donde sealmacena la información físicamente. Un datafile puede tener cualquier nombre y extensión(siempre dentro de las limitaciones del sistema operativo), y puede estar localizado encualquier directorio del disco duro, aunque su localización típica suele ser$ORACLE_HOME/Database. Un datafile tiene un tamaño predefinido en su creación (porejemplo 100Mb) y este puede ser alterado en cualquier momento. Cuando creemos un datafile,este ocupará tanto espacio en disco como hayamos indicado en su creación, aunqueinternamente esté vacío. Oracle hace esto para reservar espacio continuo en disco y evitar asíla fragmentación. Conforme se vayan creando objetos en ese tablespace, se irá ocupando elespacio que creó inicialmente.

Un datafile está asociado a un solo tablespace y, a su vez, un tablespace está asociado a unoo varios datafiles. Es decir, la relación lógica entre tablespaces y datafiles es de 1­N,maestro­detalle.

Los datafiles tienen una propiedad llamada AUTOEXTEND, que se si está activa, se encargade que el datafile crezca automáticamente (según un tamaño indicado) cada vez que senecesite espacio y no exista. Al igual que los tablespaces, los datafiles también puede estar enlínea o fuera de ella.

Ejemplo de creación y manipulación de tablespaces y Datafiles

Conocer el tablespace por defecto

SQL>select property_value from database_properties where property_name ='DEFAULT_PERMANENT_TABLESPACE';

Ver el tamaño en Megas de los Tablespace

Page 34: Mis Apuntes Oracle PL-SQL

SQL>select tablespace_name, file_name, bytes / 1024 / 1024 from dba_data_files;

Crear un tablespace

SQL> create tablespace ts_prueba_dat datafile'/u02/oradata/capacita/ts_prueba_dat_01.dbf' size 10M;

Aumentar el tamaño de un datafile

SQL>alter database datafile '/u02/oradata/capacita/ts_prueba_dat_01.dbf' resize 20M;

Adicionar un nuevo datafile al tablespace

alter tablespace ts_prueba_dat add datafile '/u02/oradata/capacita/ts_prueba_dat02.dbf' size 10M autoextend on next 1M maxsize 20M;

Con esta instrucción lo que estamos haciendo es añadir un nuevo datafile llamado “/u02/oradata/capacita/ts_prueba_dat02.dbf” a nuestro tablespace “ts_prueba_dat” con 10 Mbytes de tamaño. Además, estamos indicando que queremos que aumente por si mismo cada vez que se llene y que aumente en bloques de 1 Mb cada vez. Finalmente le ponemos un tope al tamaño total que queremos que tenga nuestro datafile con la instrucción maxsize, por lo que una vez que llegue a 20 Mb, si se llena, no volverá a crecer más.Para indicar en cualquier momento que queremos que un datafile no crezca más automáticamente, podemos utilizar:

SQL>alter database datafile nombre_datafile autoextend off;

Y para indicar en cualquier momento que un determinado datafile crezca automáticamente, la instrucción que ejecutaremos será:

SQL>alter database datafile nombre_datafile autoextend on next 1 M maxize 300 M;

Nota: en esta sentencia, se puede indicar que queremos que crezca indefinidamente, sin tomemáximo. Esto lo conseguimos con "maxsize unlimited", pero es muy peligroso porque poralgún problema descontrolado, nos puede crecer tanto que nos quedemos si disco en lamáquina y luego es muy complicado restaurar un tamaño normal.

Cambiar el tablespace por defecto de un usuario

SQL>alter user usuario default tablespace ts_prueba_dat quota unlimited onts_prueba_dat;

Borrar un tablespace

SQL>drop tablespace ts_prueba_dat including contents cascade constraints;

***************************************** Pausa Activa *****************************************

Page 35: Mis Apuntes Oracle PL-SQL

La papelera de Reciclaje en Oracle

Cuando la RecycleBin está activada, las tablas que borremos en realidad no se eliminan.En cambio, cuando se elimina una tabla, Oracle sólo cambia el nombre de la tabla ytodos sus objetos asociados (índices, triggers, segmentos de línea de negocio, etc)a un nombre generado por el sistema que se inicia con BIN$.

Por defecto la papelera de reciclaje viene activada en Oracle, para verificar que esto escorrecto se puede hacer la verificación por el SQLPlus como usuario SYSTEM así:

SQL> show parameter recyclebin

Ejemplo de Uso de la papelera

1. Crear una tabla como sigue:

create table tabla1( version varchar2(10) not null, fecha varchar2(10) default to_char(sysdate , 'dd/mm/yyyy') not null, hora varchar2(8) default to_char(sysdate , 'hh24:mi:ss') not null);

2. Insertar un dato para la verificación.

SQL>insert into tabla1 (version) values ('version 1');

3. Borrar la tabla

SQL> drop table tabla1;

4. Listar las tablas del usuario así:

SQL>select * from user_tables;

ó

SQL>select * from tab;

5. Listar los objetos de la papelera de reciclaje

SQL>select object_name, original_name, type, can_undrop as "UND", can_purge as"PUR", droptime from recyclebin;

6. Recobrar la tabla de la papelera de reciclaje

SQL>flashback table tabla1 to before drop;

7. Listar las tablas del usuario y el contenido de la tabla recuperada

Page 36: Mis Apuntes Oracle PL-SQL

SQL>select * from tab;

SQL>select * from tabla1;

8. Borrar nuevamente la tabla, ejecutando el paso 3.

9. Crear nuevamente la tabla exactamente igual que en el paso 1.

10. realizar el siguiente insert.

SQL>insert into tabla1 (version) values ('version 2');

11. Listar las tablas del usuario y el contenido de tabla1, como en el paso 7.

12. Borrar la tabla nuevamente

SQL> drop table tabla1;

13. Listar los objetos de la papelera de reciclaje.

SQL>select object_name, original_name, type, can_undrop as "UND", can_purge as"PUR", droptime from recyclebin;

14. Recobrar nuevamente la tabla: tabla1

SQL>flashback table tabla1 to before drop;

15. Listar la información de la tabla. ¿Qué versión aparece y porqué?

16. Borrar nuevamente la tabla.

17. Listar nuevamente la papelera de reciclaje y verificar las columnas droptime o base_object, para identificar el primer objeto en ingresar a la papelera.

18 recuperar este objeto mediante la instrucción del paso 14, sustituyendo tabla1 por el valorde la columna object_name entre comillas dobles.

19, Listar el contenido de la tabla.

Ahora bien, si deseamos borrar una tabla omitiendo la papelera de reciclaje, se puede hacercomo sigue:

SQL>drop table tabla1 purge;

Si se desea vaciar la papelera de reciclaje, se puede hacer así:

SQL>purge recyclebin;

Si se desea que las tablas borradas durante la sesión no vayan a la papelera de reciclaje, sepuede desactivar la papelera de la sesión así:

Page 37: Mis Apuntes Oracle PL-SQL

SQL>alter session set recyclebin=on;

Vale la pena aclarar que si antes de realizar esta acción ya habían objetos en la papelera estos permanecerán allí, a no ser que se liberen explícitamente.

Ofuscación de Código (wrap)

Generar el resultado de una consulta en un archivo (spool)

Cargar la información de un archivo de texto a una tabla de la dase de datos (sqlldr)

***************************************** Pausa Activa *****************************************

Oracle : Instancia

La instancia en Oracle describe varios procesos residentes en la memoria del computador(es) y un área de memoria compartida por aquellos procesos. En arquitecturas de bases de datos tales como, Microsoft SQL Server y IBM DB2, la palabra instancia indica una colección de bases de datos que comparten recursos de memoria en común, o sea, la relación entre instancia y bases de datos es 1 a N. Pero la relación entre la instancia de Oracle y la base de datos es 1 a 1 o n a 1. Cuando hay una relación N a 1, la configuración es llamada RAC (Real Application Cluster), donde la base de datos reside en discos compartidos y las instancias en múltiples computadores anexados a la base de datos.La instancia de Oracle es el motor que procesa los requerimientos de datos desde la base de datos. Está compuesta por procesos en primer plano, en segundo plano y un área de memoria compartida (SGA).

Una instancia de Oracle es un conjunto de estructuras de memoria que están asociadas con los archivos de datos(datafiles) en una máquina. Una base de datos (database) es una colección de archivos físicos.

Page 38: Mis Apuntes Oracle PL-SQL

Esquema <> Usuario

Es muy común escuchar que la gente asocie los términos usuario y esquema (user yschema). Esto puede ser cierto en algunos motores de bases de datos pero no en Oracle.Para Oracle, un USER es un nombre de una cuenta que se agrega a una base de datos, y unESQUEMA es el conjunto de objetos que ese USUARIO posee. Si bien es cierto que uno delos pasos cuando uno crea un usuario es la creación del ESQUEMA en el que se almacenaransus objetos, y que el nombre que se le asocia es el mismo que tiene el usuario, es bastantesimple demostrar por que no es lo mismo una cosa que la otra.

Ejemplo: Crear una tabla llamada mi_tabla con una columna llamada usuario de tipo varchar2de 30 caracteres, esta misma tabla se debe crear para dos usuarios, e insertar un dato con elnombre del usuario.

para cambiar el esquema por defecto, se puede usar:

SQL>ALTER SESSION SET CURRENT_SCHEMA=usuario2;

Verificar el estado de las tablas para cada usuario.

Si se desea ver el usuario y esquema actual, se pueden emplear estas dos consultas:

Page 39: Mis Apuntes Oracle PL-SQL

SQL>SELECT USERNAME USUARIO, SCHEMANAME ESQUEMA FROMV$SESSION WHERE SID IN (SELECT SID FROM V$MYSTAT);

ó

SQL>SELECT USER USUARIO, SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA') ESQUEMA FROM DUAL;

Lo más importante a recordar es que el comando alter session set current_schema solamentecambia el ESQUEMA por defecto del USUARIO. No modifica los privilegios que tenemos sobreese ESQUEMA, ni cambian los resultados cuando hacemos una consulta que depende delnombre del usuario, como por ejemplo las consultas sobre las USER_ views.

Que es un perfil

Los perfiles se utilizan para limitar la cantidad de recursos del sistema y de la BD disponiblespara un usuario. Si no se definen perfiles para un usuario se utiliza el perfil por defecto, que especifica recursos ilimitados.

Los recursos que pueden ser limitados via perfil son los siguientes:

COMPOSITE_LIMITSuma del máximo de CPU_PER_SESSION, CONNECT_TIME, LOGICAL_READS_PER_SESSION y PRIVATE_SGA. Si este limite es excedido, Oracle aborta la sesión y regresa un error.

CONNECT_TIMETiempo permitido de conexión por sesión en minutos.

CPU_PER_CALLMáximo tiempo de CPU por llamada en centésimas de segundo.

CPU_PER_SESSIONMáximo tiempo de CPU por sesión en centésimas de segundo.

IDLE_TIMETiempo máximo permitido sin actividad por el usuario antes de ser desconectado. Se expresa en minutos.

LOGICAL_READS_PER_CALLMáximo número de bloques de base de datos leídos por llamada.

LOGICAL_READS_PER_SESSIONMáximo numero de bloques de base de datos leídos por sesión.

PRIVATE_SGAMáxima cantidad de bytes de espacio privado reservado en la SGA. Se puede expresar en el formato enteroK para kilobytes o enteroM para megabytes.

Page 40: Mis Apuntes Oracle PL-SQL

SESSIONS_PER_USERMáximo número de sesiones concurrentes permitidas por usuario.

FAILED_LOGIN_ATTEMPTSNúmero de intentos fallidos de conexión de un usuario, antes de que Oracle ponga la cuenta bloqueada.

PASSWORD_GRACE_TIMENúmero de días de gracia para realizar un cambio de password de nuestra cuenta. Si en el periodo de tiempo delimitado no fue cambiado el password, el password expira.

PASSWORD_LIFE_TIMENúmero de días de vida de un password.

PASSWORD_LOCK_TIMENúmero de días que permanecerá bloqueado un usuario después de rebasar el límite FAILED_LOGIN_ATTEMPTS.

PASSWORD_REUSE_MAXNúmero de veces que un password puede ser re­usado.

PASSWORD_REUSE_TIMENúmero de días que tienen que pasar para poder re­usar un password.

PASSWORD_VERIFY_FUNCTIONEn este parámetro, se puede especificar un script para validar el password. Por ejemplo, que tenga una determinada cantidad de caracteres, que tenga letras y números, etcétera.

Creación, borrado y alteración de perfiles

Para crear un perfil, se requiere tener el privilegio CREATE PROFILE asignado en el usuarioque lo quiere crear, y se usa el siguiente comando:

create profile nombre_perfil limit nombre_limite_1 [valor entero | unlimited | default ] nombre_limite_2 [valor entero | unlimited | default ] ... nombre_limite_n [valor entero | unlimited | default ];

Por default, cada perfil creado tiene todos los límites posibles del mismo de acuerdo a laversión de la base de datos. Existe un perfil llamado default el cual, regirá a todos los usuariosde la base de datos, mientras no sea creado uno nuevo y asignado a un usuario en especial.En el perfil creado, los límites que no sean asignados con un valor predefinido, tendrán el valordel perfil default de la base de datos, como se ve en el siguiente ejemplo:

Para habilitar el uso de perfiles, se debe digitar la siguiente sentencia como usuarioadministrador:

SQL>alter system set resource_limit=true;

Page 41: Mis Apuntes Oracle PL-SQL

Para activar los perfiles el administrador debe ejecutar la siguiente orden:

Ejemplo de creación de un perfil

SQL>create profile per_prueba limit connect_time 45;

Visualizar los atributos del perfil:

SQL>select * from dba_profiles where profile = 'PER_PRUEBA' order byresource_name;

Ejemplo de modificación de un perfil (Se debe tener privilegio de ALTER PROFILE)

SQL>alter profile per_prueba limit password_life_time 30;

SQL>select * from dba_profiles where profile = 'PER_PRUEBA' order byresource_name;

Nota. Si se desea regresar un valor al default, se tendrá que poner dicho valor en vez de un número propiamente.

Para borrar un perfil, nada más tenemos que aplicar el comando drop como en muchos tipos de objetos en Oracle.

SQL>drop profile per_prueba;

Crear un perfil

SQL>create profile per_prueba limit idle_time 1failed_login_attempts 1sessions_per_user 1;

Consultar el perfil del usuario:

SQL>select username, default_tablespace, temporary_tablespace, profilefrom dba_users where username = 'XXX';

Asignar el nuevo perfil al usuario:

SQL>alter user XXX profile per_prueba;

Verificación de los parametros del perfil.

En general, el perfil por defecto debe ser adecuado para los usuarios normales; los usuarioscon requerimientos especiales deberían tener perfiles especiales.

Privilegios

Page 42: Mis Apuntes Oracle PL-SQL

Es la capacidad de un usuario dentro de la base de datos a realizar determinadas operaciones o acceder a determinados objetos de otros usuarios.

Privilegios sobre los objetos

Nos permite acceder y realizar cambios en los datos de otros usuairo. Ejemplo: El privilegio de consultar la tabla de otro usuario es un privilegio sobre objetos.

GRANT PRIV_OBJETO [, PRIV_OBJETO]… | ALL [PRIVILEGES][(COL [,COL]…)]ON [USUARIO] OBJETOTO USUARIO | ROL | PUBLIC [,USUARIO | ROL | PUBLIC…][WITH GRANT OPTION];

ON = Especifica el objeto sobre el que se dan los privilegios.TO = Identifica a los usuarios o roles a los que se conceden los privilegios.ALL = Concede todos los privilegios sobre el objeto especificado.WITH GRANT OPTION = Permite que el receptor del privilegio o rol se lo asigne a otros usuarios o roles.PUBLIC = Asigna los privilegios a todos los usuarios actuales y futuros: El propósito principal del grupo PUBLIC es garantizar el acceso a determinados objetos a todos los usuarios de la base de datos.

Privilegios de sistema

Dan derecho a ejecutar un tipo de comando SQL o a realIzar alguna acción sobre objetos deun tipo especificado. Por ejemplo, el privilegio para crear TABLESPACES es un privilegio desistema. Formato:

GRANT PRIVILEGIO | ROL [, PRIVILEGIO | ROL, …]TO USUARIO | ROL | PUBLIC [,USUARIO | ROL | PUBLIC][WITH ADMIN OPTION];

WITH ADMIN OPTION = Permite que el receptor del privilegio o rol pueda conceder esosmismos privilegios a otros usuarios o roles.

Retirada de privilegios de objetos a los usuarios

REVOKE PRIV_OBJETO [,PRIV_OBJETO]… | ALL [PRIVILEGES]ON [USUARIO.]OBJETOFROM USUARIO | ROL | PUBLIC [, USUARIO | ROL | PUBLIC]…;

Retirada de privilegios de sistema o roles a los usuarios

REVOKE PRIV_SISTEMA | ROL [,PRIV_SISTEMA | ROL]…FROM USUARIO | ROL | PUBLIC [,USUARIO | ROL | PUBLIC]…;

Cada tipo de objeto tiene su propio conjunto de permisos:

Page 43: Mis Apuntes Oracle PL-SQL

Tablas: select, insert, update, delete, alter, debug, flashback, on commit refresh, query rewrite, references, all

Vistas: select, insert, update, delete, under, references, flashback, debug

Secuencias: alter, select

Paquetes, Procedimientos, Funciones, Clases JAVA: execute, debug

Vistas Materializadas: delete, flashback, insert, select, update

Directorios: read, write

Librerias: execute

Tipos de Datos: execute, debug, under

Operadores: execute

Indextypes: execute

Roles

Conjunto de privilegios agrupados. Formato:

CREATE ROLE NOMBREROL [IFENTIFIED BY CONTRASEÑA];

Nota: Un rol puede decidir el acceso de un usuario a un objeto, pero no puede permitir lacreación de objetos.

Supresión de privilegios en los roles

REVOKE NOMBREPRIVILEGIO ON NOMBRETABLA FROM NOMBREROL;

REVOKE NOMBREPRIVILEGIO FROM NOMBREROL;

Supresión de un rol

DROP ROLE NOMBREROL;

Establecer un rol por defecto

ALTER USER NOMBREUSUARIODEFAULT [ROLE NOMBRE_ROL] | [NONE];

NONE = Hace que el usuario no tenga rol por defecto.

Page 44: Mis Apuntes Oracle PL-SQL

Para la verificación de los roles y privilegios asignados a la sesión actual, se pueden usar lassiguientes consultas:

SQL>SELECT GRANTED_ROLE "Rol", ADMIN_OPTION "Admin" FROMUSER_ROLE_PRIVS;

SQL>SELECT PRIVILEGE "Privilegio", ADMIN_OPTION "Admin" FROMUSER_SYS_PRIVS;

Si se desea hacer esta consulta para otros usuarios, se deberán utilizar la vistadba_role_privs.

Tipos de Objetos en Oracle

TablasSon la unidad básica de almacenamiento de datos en Oracle. Los datos sonalmacenados en filas y columnas. La tabla se define a través de:

Nombre.Conjunto de columnas (nombre y tipo)

SinonimosUn sinónimo es un nombre alternativo que identifica un tabla en la base de datos. Con un sinónimo se pretende normalmente simplificar el nombre original de la tabla, aunque también se suelen utilizar para evitar tener que escribir el nombre del propietario de la tabla.

FuncionesUna función es un conjunto de instrucciones en PL/SQL, que pueden ser llamadosusando el nombre con que se le haya creado. Se diferencian de los procedimientos, enque las funciones retornan un valor al ambiende desde donde fueron llamadas.

ProcedimientosUn procedimiento almacenado es un conjunto de instrucciones en PL/SQL, que pueden ser llamado usando el nombre que se le haya asignado.

PaquetesLos paquetes en Oracle se utilizan para guardar subprogramas y otros objetos de labase de datos. Un paquete consta de los siguientes elementos:

Especificación o cabecera: contiene las declaraciones públicas (es decir, accesiblesdesde cualquier parte de la aplicación) de sus programas, tipos, constantes, variables,cursores, excepciones, etc.

Cuerpo: contiene los detalles de implementación y declaraciones privadas, es decir,accesibles solamente desde los objetos del paquete.

TriggersUn Trigger en PLSQL es un tipo especial de procedimiento almacenado asociado con

Page 45: Mis Apuntes Oracle PL-SQL

una tabla de la base de datos Oracle y que se "dispara" (is triggered) cada vez que seejecuta sobre dicha tabla una sentencia INSERT, una sentencia UPDATE o unasentencia DELETE, es decir, es un procedimiento que permite realizar distintasoperaciones cuando un registro de una tabla Oracle es actualizado o borrado, o cuandose añade un registro nuevo a dicha tabla.

IndicesUn índice es una estructura de datos que permite acceder a diferentes filas de unamisma tabla a través de un campo (o campos clave). Un índice permite un accesomucho más rápido a los datos.

Constraints Secuencias JAVA DBLinks Usuarios Jobs Types Directorios Perfiles Tablespaces Vistas Vistas Materializadas Roles

2. Fundamentos de SQL

Definición

El lenguaje de consulta estructurado o SQL (por sus siglas en inglés structured querylanguage) es un lenguaje declarativo de acceso a bases de datos relacionales que permiteespecificar diversos tipos de operaciones en éstas. Una de sus características es el manejodel álgebra y el cálculo relacional permitiendo efectuar consultas con el fin de recuperar ­deuna forma sencilla­ información de interés de una base de datos, así como también hacercambios sobre ella. Es un lenguaje informático de cuarta generación (4GL).

Orígenes y Evolución

Los orígenes del SQL están ligados a los de las bases de datos relacionales. En 1970 E. F.Codd propone el modelo relacional y asociado a éste un sublenguaje de acceso a los datosbasado en el cálculo de predicados. Basándose en estas ideas, los laboratorios de IBM definenel lenguaje SEQUEL (Structured English QUEry Language) que más tarde sería ampliamenteimplementado por el sistema de gestión de bases de datos (SGBD) experimental System R,desarrollado en 1977 también por IBM. Sin embargo, fue Oracle quien lo introdujo por primeravez en 1979 en un programa comercial.

El SEQUEL terminaría siendo el predecesor de SQL, siendo éste una versión evolucionada delprimero. El SQL pasa a ser el lenguaje por excelencia de los diversos sistemas de gestión debases de datos relacionales surgidos en los años siguientes y es por fin estandarizado en

Page 46: Mis Apuntes Oracle PL-SQL

1986 por el ANSI, dando lugar a la primera versión estándar de este lenguaje, el "SQL­86" o"SQL1". Al año siguiente este estándar es también adoptado por la ISO.Sin embargo, este primer estándar no cubre todas las necesidades de los desarrolladores eincluye funcionalidades de definición de almacenamiento que se consideraron suprimir. Asíque en 1992 se lanza un nuevo estándar ampliado y revisado del SQL llamado "SQL­92" o"SQL2".

En la actualidad el SQL es el estándar de facto de la inmensa mayoría de los SGBDcomerciales. Y, aunque la diversidad de añadidos particulares que incluyen las distintasimplementaciones comerciales del lenguaje es amplia, el soporte al estándar SQL­92 esgeneral y muy amplio.

El ANSI SQL sufrió varias revisiones y agregados a lo largo del tiempo:

Año Nombre Alias Comentarios

1986 SQL­86 SQL­87 Primera publicación hecha por ANSI.Confirmada por ISO en 1987.

1989 SQL­89 Revisión menor.

1992 SQL­92 SQL2 Revisión mayor.

1999 SQL:1999 SQL2000 Se agregaron expresiones regulares,consultas recursivas (para relacionesjerárquicas), triggers y algunascaracterísticas orientadas a objetos.

2003 SQL:2003 Introduce algunas características de XML,cambios en las funciones, estandarizacióndel objeto sequence y de las columnasautonumericas. (Ver Eisenberg et al.:SQL:2003 Has Been Published.)

2006 SQL:2006 ISO/IEC 9075­14:2006 Define las manerasen las cuales el SQL se puede utilizarconjuntamente con XML. Define manerasimportar y guardar datos XML en una basede datos SQL, manipulándolos dentro de labase de datos y publicando el XML y losdatos SQL convencionales en forma XML.Además, proporciona facilidades quepermiten a las aplicaciones integrar dentrode su código SQL el uso de XQuery,

Page 47: Mis Apuntes Oracle PL-SQL

lenguaje de consulta XML publicado por elW3C (World Wide Web Consortium) paraacceso concurrente a datos ordinarios SQLy documentos XML.

2008 SQL:2008 Permite el uso de la cláusula ORDER BYfuera de las definiciones de los cursores.Incluye los disparadores del tipo INSTEADOF. Añade la sentencia TRUNCATE. (Ver[1].)

Características Generales

El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones en éstos últimos.

Es un lenguaje declarativo de "alto nivel" o "de no procedimiento", que gracias a su fuerte base teórica y su orientación al manejo de conjuntos de registros, y no a registros individuales, permite una alta productividad en codificación y la orientación a objetos. De esta forma una sola sentencia puede equivaler a uno o más programas que se utilizarían en un lenguaje de bajo nivel orientado a registros.

Optimización

Como ya se dijo arriba, y suele ser común en los lenguajes de acceso a bases de datos de alto nivel, el SQL es un lenguaje declarativo. O sea, que especifica qué es lo que se quiere y no cómo conseguirlo, por lo que una sentencia no establece explícitamente un orden de ejecución.

El orden de ejecución interno de una sentencia puede afectar gravemente a la eficiencia del SGBD, por lo que se hace necesario que éste lleve a cabo una optimización antes de su ejecución. Muchas veces, el uso de índices acelera una instrucción de consulta, pero ralentiza la actualización de los datos. Dependiendo del uso de la aplicación, se priorizará el acceso indexado o una rápida actualización de la información. La optimización difiere sensiblemente en cada motor de base de datos y depende de muchos factores.

Existe una ampliación de SQL conocida como FSQL (Fuzzy SQL, SQL difuso) que permite el acceso a bases de datos difusas, usando la lógica difusa. Este lenguaje ha sido implementado a nivel experimental y está evolucionando rápidamente.

Lenguaje de definición de datos (DDL)

El lenguaje de definición de datos (en inglés Data Definition Language, o DDL), es el que se encarga de la modificación de la estructura de los objetos de la base de datos. Existen cuatro operaciones básicas: CREATE, ALTER, DROP y TRUNCATE.

Page 48: Mis Apuntes Oracle PL-SQL

CREATEEste comando crea un objeto dentro de la base de datos. Puede ser una tabla, vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte.

ALTEREste comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos a una tabla, modificar el tipo de un campo, agregar/quitar índices a una tabla, modificar un trigger, etc.

RENAMECambia el nombre a una tabla, vista, secuencia o sinonimo privado.

DROPEste comando elimina un objeto de la base de datos. Puede ser una tabla, vista, índice, trigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia ALTER.

TRUNCATEEste comando trunca todo el contenido de una tabla. La ventaja sobre el comando DROP, es que si se quiere borrar todo el contenido de la tabla, es mucho más rápido, especialmente si la tabla es muy grande. La desventaja es que TRUNCATE sólo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la cláusula WHERE. Si bien, en un principio, esta sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en realidad una DDL, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta ninguna transacción.

Lenguaje de manipulación de datos DML(Data Manipulation Languaje)

Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es unlenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuariosllevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo dedatos adecuado.

El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar ymanipular datos en una base de datos relacional.

INSERTUna sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en unabase de datos relacional.

UPDATEUna sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla.

MERGElo que permite la sentencia SQL MERGE es, dependiendo de una condición lógica, actualizar registros (UPDATE) cuando la condición se cumple, o insertar registros (INSERT) cuando dicha condición no se cumple, de ahí surge la denominación de UPSERT.

Page 49: Mis Apuntes Oracle PL-SQL

DELETEUna sentencia DELETE de SQL borra uno o más registros existentes en una tabla,

Instrucciones de Transferencia

Administran las modificaciones creadas por las instrucciones DML. Lo forman lasinstrucciones ROLLBACK, COMMIT y SAVEPOINT.

Lenguaje de Control de Datos DCL (Data Control Language)

Administran los derechos y restricciones de los usuarios. Lo forman las instrucciones GRANTy REVOKE.

Tipos de Datos en Oracle

Es importante conocer los tipos de datos disponibles en un Sistema Gestor de Base de Datos (SGBD), de esta forma podremos optimizar al máximo el uso de recursos de las aplicaciones.A continuación se indican los tipos de datos de Oracle y sus características básicas:

TIPO CARACTERISTICAS OBSERVACIONES

CHAR Cadena de caracteres (alfanuméricos) de longitud fija

Entre 1 y 2000 bytes como máximo. Aunque se introduzca un valor más corto que el indicado en el tamaño, se rellenará al tamaño indicado. Es de longitud fija, siempre ocupará lo mismo, independientemente del valor que contenga

VARCHAR2 Cadena de caracteres de longitud variable

Entre 1 y 4000 bytes como máximo. El tamaño del campo dependerá del valor que contenga, es de longitud variable.

VARCHAR Cadena de caracteres de longitud variable

En desuso, se utiliza VARCHAR2 en su lugar

NCHAR Cadena de caracteres de longitud fija que sólo almacena caracteres Unicode

Entre 1 y 2000 bytes como máximo. El juego de caracteres del tipo de datos (datatype) NCHAR sólo puede ser AL16UTF16 ó UTF8. El juego de caracteres se especifica cuando se crea la base de datos Oracle

Page 50: Mis Apuntes Oracle PL-SQL

NVARCHAR2 Cadena de caracteres de longitud variable que sólo almacena caracteres Unicode

Entre 1 y 4000 bytes como máximo. El juego de caracteres del tipo de datos (datatype) NCHAR sólo puede ser AL16UTF16 ó UTF8. El juego de caracteres se especifica cuando se crea la base de datos Oracle

LONG Cadena de caracteres de longitud variable

Como máximo admite hasta 2 GB (2000 MB). Los datos LONG deberán ser convertidos apropiadamente al moverse entre diversos sistemas.Este tipo de datos está obsoleto (en desuso), en su lugar se utilizan los datos de tipo LOB (CLOB,NCLOB). Oracle recomienda que se convierta el tipo de datos LONG a alguno LOB si aún se está utilizando.No se puede utilizar en claúsulas WHERE, GROUP BY, ORDER BY, CONNECT BY ni DISTINCTUna tabla sólo puede contener una columna de tipo LONG.Sólo soporta acceso secuencial.

LONG RAW Almacenan cadenas binarias de ancho variable

Hasta 2 GB.En desuso, se sustituye por los tipos LOB.

RAW Almacenan cadenas binarias de ancho variable

Hasta 32767 bytes.En desuso, se sustituye por los tipos LOB.

LOB (BLOG, CLOB, NCLOB, BFILE)

Permiten almacenar y manipular bloques grandes de datos no estructurados (tales como texto, imágenes, videos, sonidos, etc) en formato binario o del carácter

Admiten hasta 8 terabytes (8000 GB).Una tabla puede contener varias columnas de tipo LOB.Soportan acceso aleatorio.Las tablas con columnas de tipo LOB no pueden ser replicadas.

BLOB Permite almacenar datos binarios no estructurados

Admiten hasta 8 terabytes

CLOB Almacena datos de tipo carácter

Admiten hasta 8 terabytes

NCLOB Almacena datos de tipo carácter

Admiten hasta 8 terabytes.Guarda los datos según el

Page 51: Mis Apuntes Oracle PL-SQL

juego de caracteres Unicode nacional.

BFILE Almacena datos binarios no estructurados en archivos del sistema operativo, fuera de la base de datos. Una columna BFILE almacena un localizador del archivo a uno externo que contiene los datos

Admiten hasta 8 terabytes.El administrador de la base de datos debe asegurarse de que exista el archivo en disco y de que los procesos de Oracle tengan permisos de lectura para el archivo .

ROWID Almacenar la dirección única de cada fila de la tabla de la base de datos

ROWID físico almacena la dirección de fila en las tablas, las tablas en clúster, los índices, excepto en las índices-organizados (IOT).ROWID lógico almacena la dirección de fila en tablas de índice-organizado (IOT).Un ejemplo del valor de un campo ROWID podría ser: "AAAIugAAJAAC4AhAAI". El formato es el siguiente:Para "OOOOOOFFFBBBBBBRRR", donde:OOOOOO: segmento de la base de datos (AAAIug en el ejemplo). Todos los objetos que estén en el mismo esquema y en el mismo segmento tendrán el mismo valor.FFF: el número de fichero del tablespace relativo que contiene la fila (fichero AAJ en el ejemplo).BBBBBB: el bloque de datos que contiene a la fila (bloque AAC4Ah en el ejemplo). El número de bloque es relativo a su fichero de datos, no al tablespace. Por lo tanto, dos filas con números de bloque iguales podrían residir en diferentes datafiles del mismo tablespace.RRR: el número de fila en el bloque (fila AAI en el ejemplo).Este tipo de campo no aparece en los SELECT ni se puede modificar en los UPDATE, ni en los INSERT. Tampoco se puede utilizar en los CREATE. Es un tipo de

Page 52: Mis Apuntes Oracle PL-SQL

datos utilizado exclusivamente por Oracle. Sólo se puede ver su valor utilizando la palabra reservada ROWID, por ejemplo:select rowid, nombre, apellidos from clientesEjemplo 2:SELECT ROWID, SUBSTR(ROWID,15,4)"Fichero", SUBSTR(ROWID,1,8) "Bloque",SUBSTR(ROWID,10,4) "Fila" FROM proveedoresEjemplo 3: una forma de saber en cuántos ficheros de datos está alojada una tabla:SELECTCOUNT(DISTINCT(SUBSTR(ROWID,7,3))) "Numero ficheros " FROM facturacion

UROWID ROWID universal Admite ROWID a tablas que no sean de Oracle, tablas externas. Admite tanto ROWID lógicos como físicos.

NUMBER Almacena números fijos y en punto flotante

Se admiten hasta 38 dígitos de precisión y son portables a cualquier entre los diversos sistemas en que funcione Oracle.Para declarar un tipo de datos NUMBER en un CREATE ó UPDATE es suficiente con:nombre_columna NUMBERopcionalmente se le puede indicar la precisión (número total de dígitos) y la escala (número de dígitos a la derecha de la coma, decimales, los cogerá de la precisión indicada):nombre_columna NUMBER (precision, escala)Si no se indica la precisión se tomará en función del número a guardar, si no se indica la escala se tomará escala cero.Para no indicar la precisión y sí la escala podemos utilizar:nombre_columna NUMBER (*, escala)Para introducir números que no estén el el formato estándar

Page 53: Mis Apuntes Oracle PL-SQL

de Oracle se puede utilizar la función TO_NUMBER.

FLOAT Almacena tipos de datos numéricos en punto flotante

Es un tipo NUMBER que sólo almacena números en punto flotante

DATE Almacena un punto en el tiempo (fecha y hora)

El tipo de datos DATE almacena el año (incluyendo el siglo), el mes, el día, las horas, los minutos y los segundos (después de medianoche).Oracle utiliza su propio formato interno para almacenar fechas.Los tipos de datos DATE se almacenan en campos de longitud fija de siete octetos cada uno, correspondiendo al siglo, año, mes, día, hora, minuto, y al segundo.Para entrada/salida de fechas, Oracle utiliza por defecto el formato DD-MMM-AA. Para cambiar este formato de fecha por defecto se utiliza el parámetro NLS_DATE_FORMAT.Para insertar fechas que no estén en el mismo formato de fecha estándar de Oracle, se puede utilizar la función TO_DATE con una máscara del formato: TO_DATE (el “13 de noviembre de 1992”, “DD del MES, YYYY”)

TIMESTAMP Almacena datos de tipo hora, fraccionando los segundos

TIMESTAMP WITH TIME ZONE Almacena datos de tipo hora incluyendo la zona horaria (explícita), fraccionando los segundos

TIMESTAMP WITH LOCAL TIME ZONE

Almacena datos de tipo hora incluyendo la zona horaria local (relativa), franccionando los segundos

Cuando se usa un SELECT para mostrar los datos de este tipo, el valor de la hora será ajustado a la zona horaria de la sesión actual

XMLType Tipo de datos abstracto. En realidad se trata de un CLOB.

Se asocia a un esquema XML para la definición de su estructura.

Page 54: Mis Apuntes Oracle PL-SQL

De los tipos anteriores, los comunmente utilizados son: VARCHAR2 (cadenas de texto no muy grandes), DATE (fechas, horas), NUMBER (números), BLOB (ficheros de tipo word, excel, access, video, sonido, imágenes, etc) y CLOB (cadenas de texto muy grandes).

Actualmente el tipo de dato VARCHAR es sinonimo de VARCHAR2. Sin embargo Oracle no recomienda utilizar el tipo VARCHAR. En el futuro, Oracle redefinirá al tipo de dato VARCHAR como un tipo de datos para cadenas de caracteres de longitud variable con semantica de comparacion diferente a la del VARCHAR2.

Operadores de Comparación

Operador Operación Ejemplo

= Igualdad select * from emp where cod_dep = 100;

!=, <>, ^= Desigualdad select * from emp where cod_dep != 100;

< Menor que select * from emp where cod_dep < 200;

> Mayor que select * from emp where cod_dep > 200;

<= Menor o igual que select * from emp where cod_dep <= 200;

>= Mayor o igual que select * from emp where cod_dep >= 200;

in Igual a cualquiera de los miembros entre paréntesis

select * from emp where cod_dep in (100, 300);

not in Distinto a cualquiera de los miembros entre paréntesis

select * from emp where cod_dep not in (200);

between Contenido en el rango select * from emp where cod_emp between 100 and 199;

not between Fuera del rango select * from emp where cod_emp not between 100 and 199;

like '_abc%' Contiene la cadena 'abc' a partir del segundo carácter y luego cualquier cadena de caracteres

select * from emp where nombre like 'Ma%';

Operadores de Aritméticos

Operador Operación Ejemplo

Page 55: Mis Apuntes Oracle PL-SQL

+ Suma select nombre, salario+comision from emp where oficio='VENDEDOR';

- Resta select nombre from emp where sysdate-fecha_alta > 365;

* Producto select nombre, salario*12 from emp;

/ División select nombre, salario/31 from emp;

Operadores de Cadenas de Caracteres

Operador Operación Ejemplo

|| Concatenación select nombre||oficio from emp;

Oracle Built in Functions

Existen en SQL muchas funciones que pueden complementar el manejo de los datos en las consultas. Se utilizan dentro de las expresiones y actuan con los valores de las columnas, variables o constantes.

Se pueden incluir en las clásulas SELECT, WHERE y ORDER BY.

Pueden anidarse funciones dentro de funciones. Y existe una gran variedad de funciones para cada tipo de datos:

aritméticas,de cadenas de caracteres,de manejo de fechas,de conversión,otras,de grupo.

Funciones Aritméticas

Función Cometido Ejemplo Resultado

ABS(n) Calcula el valor absoluto de n.

select abs(-15) from dual;

15

CEIL(n) Calcula el valor entero inmediatamentesuperior o igual a n.

select ceil(15.7) from dual;

16

FLOOR(n) Calcula el valor entero inmediatamanteinferior o igual a n.

select floor(15.7) from dual;

15

MOD(m,n) Calcula el resto select mod(11,4) from 3

Page 56: Mis Apuntes Oracle PL-SQL

resultante de dividir m entre n.

dual;

POWER(m,n) Calcula la potencia n-esima de m.

select power(3,2) from dual;

9

ROUND(m,n) Calcula el redondeo de m a n decimales. Si n<0 el redondeo se efectua a por la izquierda del punto decimal.

selectround(123.456,1) from dual;

123.5

SQRT(n) Calcula la raíz cuadrada de n.

select sqrt(4) from dual;

2

TRUNC(m,n) Calcula m truncado a n decimales (n puede ser negativo).

selecttrunc(123.456,1) from dual;

123.4

SIGN(n) Calcula el signo de n, devolviendo -1 si n<0, 0 si n=0 y 1 si n>0.

select sign(-12) from dual;

-1

Funciones de Cadenas de Caracteres

Función Cometido Ejemplo Resultado

CHR(n) Devuelve el carácter cuyo valor codificado es n.

select chr(65) from dual;

A

ASCII(cad) Devuelve el valor ascii de cad.

select ascii('A') from dual;

65

CONCAT(cad1,cad2) Devuelve cad1 concatenada con cad2. Esta función es esquivalente al operador ||.

selectconcat(concat(nombre,' es '),oficio) from emp;

Cano es Presidente, etc.

LOWER(cad) Devuelve la cadena cad con todas sus letras convertidas a minúsculas.

selectlower('MinUsCulAs')from dual;

minusculas

UPPER(cad) Devuelve la cadena cad con todas sus letras convertidas a mayúsculas.

selectupper('maYuSCulAs')from dual;

MAYUSCULAS

INITCAP(cad) Devuelve cad con el primer caracter en mayúsculas.

select initcap('isabel') from dual;

Isabel

LPAD(cad1,n,cad2) Devuelve cad1 con select lpad('P',5,'*') ****P

Page 57: Mis Apuntes Oracle PL-SQL

longitud n, y ajustada a la derecha, rellenando por la izquierda con cad2.

from dual;

RPAD(cad1,n,cad2) Devuelve cad1 con longitud n, y ajustada a la izquierda, rellenando por la derecha con cad2.

select rpad('P',5,'*') from dual;

P****

REPLACE(cad,ant,nue) Devuelve cad en la que cada ocurrencia de la cadena ant ha sido sustituida por la cadena nue.

selectreplace('digo','i','ie')from dual;

diego

SUBSTR(cad,m,n) Devuelve la sudcadena de cad compuesta por n caracteres a partir de la posicion m.

selectsubstr('ABCDEFG',3,2)from dual;

CD

LENGTH(cad) Devuelve la longitud de cad.

selectlength('cadena') from dual;

6

Funciones de Manejo de Fechas

Función Cometido Ejemplo Resultado

SYSDATE Devuelve la fecha y hora actuales.

select sysdate from dual;

14-MAR-97

ADD_MONTHS(d,n) Devuelve la fecha d incrementada en n meses.

selectadd_months(sysdate,4) from dual;

14-JUL-97

LAST_DAY(d) Devuelve la fecha del último día del mes de d.

selectlast_day(sysdate)from dual;

31-MAR-97

MONTHS_BETWEEN(d1, d2)

Devuelve la diferencia en meses entre las fechas d1 y d2.

selectmonths_between(sysdate,'01-JAN-97') from dual;

2.43409424

NEXT_DAY(d,cad) Devuelve la fecha del primer día de la semana cad después de la fecha d.

selectnext_day(sysdate,'sunday') from dual;

16-MAR-97

Funciones de Conversión de Tipos

Función Cometido Ejemplo Resultado

Page 58: Mis Apuntes Oracle PL-SQL

TO_NUMBER(cad,fmto)

Convierte la cadena cad a un número, opcionalmente de acuerdo con el formato fmto.

selectto_number('12345')from dual;

124345

TO_CHAR(d, fmto) Convierte la fecha d a una cadena de caracteres,opcionalmente de acuerdo con el formato fmto.

selectto_char(sysdate) from dual;

'14-MAR-97'

TO_DATE(cad,fmto) Convierte la cadena cad de tipo varchar2 a fecha, opcionalmente de acuerdo con el formato fmto.

selectto_date('1-JAN-97')from dual;

01-JAN-97

Con las fechas pueden utilizarse varios formatos. Estos formatos permiten modificar la presentación de una fecha. En la siguiente tabla se presentan algunos formatos de fecha y el resultado que generan.Máscaras de Formato Numéricas

Formato Cometido Ejemplo Resultado

cc ó scc Valor del siglo. selectto_char(sysdate,'cc')from dual;

20

y,yyy ó sy,yyy Año con coma, con o sin signo.

selectto_char(sysdate,'y,yyy') from dual;

1,997

yyyy ó yyy ó yy ó y Año sin signo con cuatro, tres, dos o un dígitos.

selectto_char(sysdate,'yyyy') from dual;

1997

q Trimestre. selectto_char(sysdate,'q')from dual;

1

ww ó w Número de la semana del año o del mes.

selectto_char(sysdate,'ww')from dual;

11

mm Número del mes. selectto_char(sysdate,'mm')from dual;

03

ddd ó dd ó d Número del día del año, del mes o de la semana.

selectto_char(sysdate,'ddd')from dual;

073

hh ó hh12 ó hh24 La hora en formato select 12

Page 59: Mis Apuntes Oracle PL-SQL

12h. o 24h. to_char(sysdate,'hh')from dual;

mi Los minutos de la hora.

selectto_char(sysdate,'mi')from dual;

15

ss ó sssss Los segundos dentro del minuto, o desde las 0 horas.

selectto_char(sysdate,'sssss') from dual;

44159

Máscaras de Formato de Caracteres

Formato Cometido Ejemplo Resultado

syear ó year Año en Inglés selectto_char(sysdate,'syear) from dual;

nineteen ninety-seven

month o mon Nombre del mes o su abreviatura de tres letras.

selectto_char(sysdate,'month') from dual;

march

day ó dy Nombre del día de la semana o su abreviatura de tres letras.

selectto_char(sysdate,'day')from dual;

friday

a.m. ó p.m. El espacio del día. selectto_char(sysdate,'a.m.') from dual;

p.m.

b.c. ó a.d. Indicador del año respecto al del nacimiento de Cristo.

selectto_char(sysdate,'b.c.') from dual;

a.d.

Otras Funciones

Función Cometido Ejemplo Resultado

DECODE(var, val1, cod1, val2, cod2, ..., defecto)

Convierte el valor de var, de acuerdo con la codificación.

select decode(oficio, 'Presidente', 'P', 'Director', 'D', 'X') from emp;

P, D, X, ...

GREATEST(exp1,exp2, ...)

Devuelve el mayor valor de una lista.

sin ejemplo. sin ejemplo.

LEAST(cad,fmto) Devuelve el menor valor de una lista.

sin ejemplo. sin ejemplo.

NVL(val, exp) Devuelve la expresión exp si val es NULL, y val si en otro caso.

selectsalario+nvl(comision,0) from emp;

450000, 350000, ...

Page 60: Mis Apuntes Oracle PL-SQL

Clausula Group by

La cláusula Group By sirve para calcular propiedades de uno o más conjuntos de filas. Si se selecciona más de un conjunto de filas, Group By controla que las filas de la tabla original sean agrupadas en un temporal.

Los datos seleccionados en la sentencia "Select" que lleva el "Group By" deben ser: Una constante. Una función de grupo (SUM, COUNT, AVG…) Una columna expresada en el Group By.

Clausula Having

La cláusula Having se emplea para controlar cual de los conjuntos de filas se visualiza. Se evalúa sobre la tabla que devuelve el Group By. No puede existir sin Group By.

Having es similar al Where, pero trabajo con grupos de filas; pregunta por una característica de grupo, es decir, pregunta por los resultados de las funciones de grupo, lo cual Where no pude hacer.

Funciones de Grupo

Oracle dispone de funciones que nos permiten contar registros, calcular sumas, promedios, obtener valores máximos y mínimos. Las funciones de grupo operan sobre un conjunto de valores (registros) y retornan un solo valor.

Características:

Se pueden usar en una instrucción "select" y combinarlas con la cláusula "group by" Todas estas funciones retornan "null" si ningún registro cumple con la condicion del "where"

(excepto "count" que en tal caso retorna cero). El tipo de dato del campo determina las funciones que se pueden emplear con ellas.

Las relaciones entre las funciones de grupo y los tipos de datos es la siguiente:

count: se puede emplear con cualquier tipo de dato. min y max: con cualquier tipo de dato. sum y avg: sólo en campos de tipo numérico.

Tratamiento de los valores nulos:

Si realiza una consulta con la función "count" incluyendo entre paréntesis un campo y la tabla contiene 18 registros, 2 de los cuales contienen valor nulo, el resultado devuelve un total de 16 filas porque no considera aquellos con valor nulo.

Todas las funciones de grupo, excepto "count(*)", excluye los valores nulos de los campos;

"count(*)" cuenta todos los registros, incluidos los que contienen "null".

Las funciones de grupo que se pueden utilizar son las siguientes.

Función Cometido Ejemplo

Page 61: Mis Apuntes Oracle PL-SQL

COUNT(col) Cuenta el número de filas agrupadas.

select count(nombre),oficio from emp group by oficio;

AVG(col) Calcula el valor medio de todos los valores de la columna col.

select avg(salario),oficio from emp group by oficio;

MAX(col) Calcula el valor máximo de todos los valores de la columna col.

select max(salario),oficio from emp group by oficio;

MIN(col) Calcula el valor mínimo de todos los valores de la columna col.

select min(salario),oficio from emp group by oficio;

SUM(col) Calcula la suma de los valores de la columna col.

select sum(salario), oficio from emp group by oficio;

STDDEV(col) Calcula la desviación típica de los valores de la columna col sin tener en cuenta los valores nulos.

select stddev(salario), oficio from emp group by oficio;

VARIANCE(col) Calcula la varianza de los valores de la columna col sin tener en cuenta los valores nulos.

select variance(salario), oficio from emp group by oficio;

Hay que tener en cuenta que los valores nulos no participan en el cálculo de las funciones de conjuntos. Estas funciones se pueden utilizar con las cláusulas DISTINCT y ALL. También se pueden utilizar aunque no realicemos agrupación alguna en la consulta, considerando a toda la tabla como un grupo.

Operaciones con Conjuntos

Permite combinar los resultados de varios "Select" para obtener un único resultado.

UNION: Combina los resultados de dos consultas. Las filas duplicadas que aparecen se reducen a una fila única.UNION ALL: Como la anterior pero aparecerán nombres duplicados.INTERSECT: Devuelve las filas que son iguales en ambas consultas. Todas las filas duplicadas serán eliminadas.MINUS: Devuelve aquellas filas que están en la primera "Select" y no están en la segunda "Select". Las filas duplicadas del primer conjunto se reducirán a una fila única antes de que empiece la comparación con el otro conjunto.

Reglas para la utilización de operadores de conjunto:

Las columnas de las dos consultas se relacionan en orden, de izquierda a derecha. Los nombres de columna de la primera sentencia "Select" no tiene porque ser los mismos que

los nombres de la segunda. Los "Select" necesitan tener el mismo numero de columnas. Los tipos de datos deben coincidir, aunque la longitud no tiene que ser la misma.

Page 62: Mis Apuntes Oracle PL-SQL

Otras características adicionales en los operadores de conjunto

Los resultados se ordenan ascendentemente por defecto según las columnas de la primer sentencia SELECT, excepto en UNION ALL

La cláusula ORDER BY Puede aparecer sólo una vez al final de la sentencia Puede aceptar el nombre de la columna o el alias de la primer sentencia SELECT o la notación

de posición Los operadores de conjuntos pueden ser usados en subconsultas Cuando se usa un operador de conjuntos en la cláusula WHERE, debe existir coincidencia

entre las columnas de la condición y las del resultado del operador de conjunto

Combinaciones de Tabla (Joins)

La sentencia join en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado.

En casos especiales una tabla puede unirse a sí misma, produciendo una auto­combinación, SELF­JOIN.

Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional, y generalizando es una función de composición.

Tablas de ejemplo

Todas las explicaciones que están a continuación utilizan las siguientes dos tablas para ilustrarel efecto de diferentes clases de uniones JOIN.

Apellido IDDepartamento

Andrade 31

Jordán 33

Steinberg 33

Róbinson 34

Zolano 34

Gaspar 36

NombreDepartamento IDDepartamento

Ventas 31

Page 63: Mis Apuntes Oracle PL-SQL

Ingeniería 33

Producción 34

Mercadeo 35

La tabla Empleado contiene a los empleados con el número del departamento al que pertenecen; mientras que la tabla Departamento, contiene el nombre de los departamentos de la empresa, se puede notar que existe un empleado que tiene asignado un número de departamento que no se encuentra en la tabla Departamento (Gaspar), igualmente, en la tabla Departamento existe un departamento al cual no pertenece empleado alguno (Mercadeo). Esto servirá para presentar algunos ejemplos más adelante.

Combinación interna (INNER JOIN)

Con esta operación se calcula el producto cruzado de todos los registros; así cada registro en la tabla A es combinado con cada registro de la tabla B; pero sólo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen.

Este es el tipo de JOIN más utilizado por lo que es considerado el tipo de combinación predeterminado.

SQL:2003 especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explícita usa la palabra JOIN, mientras que la segunda es implícita y usa ',' para separar las tablas a combinar en la sentencia FROM de la declaración SELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones que cumplan lo que indica la sentencia WHERE.

Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL ya que el valor nulo no se combina con otro valor o con otro nulo, excepto cuando se le agregan predicados tales como IS NULL o IS NOT NULL.

Como ejemplo, la siguiente consulta toma todos los registros de la tabla Empleado y encuentra todas las combinaciones en la tabla Departamento. La sentencia JOIN compara los valores en la columna IDDepartamento en ambas tablas. Cuando no existe esta correspondencia entre algunas combinaciones, éstas no se muestran; es decir que si el número de departamento de un empleado no coincide con los números de departamento de la tabla Departamento, no se mostrará el empleado con su respectivo departamento en la tabla resultante.

Las dos consultas siguientes son similares, y se realizan de manera explicita (A) e implícita (B).

A. Ejemplo de la sentencia INNER JOIN explícita:

SELECT *FROM empleado

Page 64: Mis Apuntes Oracle PL-SQL

INNER JOIN departamentoON empleado.IDdepartamento = departamento.IDdepartamento

B. Ejemplo de la sentencia INNER JOIN implícita:

SELECT *FROM empleado, departamentoWHERE empleado.IDdepartamento = departamento.IDDepartamento

Resultados:

Empleado.Apellido Empleado.IDdepartamento

departamento.NombreDepartamen

to

departamento.IDDepartamento

Zolano 34 Producción 34

Jordán 33 Ingeniería 33

Róbinson 34 Producción 34

Steinberg 33 Ingeniería 33

Andrade 31 Ventas 31

El empleado Gaspar y el departamento de Mercadeo no son presentados en los resultados ya que ninguno de éstos tiene registros correspondientes en la otra tabla. No existe un departamento con número 36 ni existe un empleado con número de departamento 35.A la combinación que utiliza comparaciones dentro del predicado JOIN se le llama theta­join.

C. Ejemplo de combinación tipo theta:

SELECT *FROM empleadoINNER JOIN departamentoON empleado.IDDepartamento < departamento.IDDepartamento

Las operaciones INNER JOIN puede ser clasificadas como de equivalencia, naturales, y cruzadas.

De equivalencia (equi­join)Es una especie de theta­join que usa comparaciones de igualdad en el predicado JOIN. Cuando se usan operadores, tales como < o > no se puede clasificar en este rango.

D. Ejemplo de combinación de equivalencia:

SELECT *

Page 65: Mis Apuntes Oracle PL-SQL

FROM empleadoINNER JOIN departamentoON empleado.IDDepartamento = departamento.IDDepartamento

La tabla resultante presenta dos columnas llamadas IDDepartamento, una proveniente de la tabla Empleado y otra de la tabla Departamento.SQL:2003 no tiene una sintaxis específica para esta clase de combinaciones.

Natural (Natural join)Es una especialización de la combinación de equivalencia, anteriormente mencionada. En este casose comparan todas las columnas que tengan el mismo nombre en ambas tablas. La tabla resultantecontiene sólo una columna por cada par de columnas con el mismo nombre.

E. Ejemplo de combinación natural:

SELECT *FROM empleado NATURAL JOIN departamento

El resultado es un poco diferente al del ejemplo D, ya que esta vez la columna IDDepartamento se muestra sola una vez en la tabla resultante.

Empleado.Apellido IDDepartamento Departamento.NombreDepartamento

Zolano 34 Producción

Jordán 33 Ingeniería

Róbinson 34 Producción

Steinberg 33 Ingeniería

Andrade 31 Ventas

El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos cambia, porque al añadir, quitar, o renombrar las columnas, puede perder el sentido la sentencia; por esta razón es preferible expresar el predicado usando las otras expresiones nombradas anteriormente (ejemplos A y B).

Cruzada (Cross join)

Presenta el producto cartesiano de todos los registros de las dos tablas.El código SQL para realizar este producto cartesiano enuncia las tablas que serán combinadas, pero no incluye algún predicado que filtre el resultado.

F. Ejemplo de combinación cruzada explícita:

SELECT *

Page 66: Mis Apuntes Oracle PL-SQL

FROM empleado CROSS JOIN departamento

G. Ejemplo de combinación cruzada implícita:SELECT *FROM empleado, departamento;

Empleado.Apellido

Empleado.IDDepartamento

Departamento.NombreDepartam

ento

Departamento.IDDepartamento

Andrade 31 Ventas 31

Jordán 33 Ventas 31

Steinberg 33 Ventas 31

Zolano 34 Ventas 31

Róbinson 34 Ventas 31

Gaspar 36 Ventas 31

Andrade 31 Ingeniería 33

Jordán 33 Ingeniería 33

Steinberg 33 Ingeniería 33

Solano 34 Ingeniería 33

Róbinson 34 Ingeniería 33

Gaspar 36 Ingeniería 33

Andrade 31 Producción 34

Jordán 33 Producción 34

Steinberg 33 Producción 34

Solano 34 Producción 34

Róbinson 34 Producción 34

Gaspar 36 Producción 34

Andrade 31 Mercadeo 35

Jordán 33 Mercadeo 35

Page 67: Mis Apuntes Oracle PL-SQL

Steinberg 33 Mercadeo 35

Solano 34 Mercadeo 35

Róbinson 34 Mercadeo 35

Gaspar 36 Mercadeo 35

Esta clase de combinaciones son usadas pocas veces, generalmente se les agregan condiciones de filtrado con la sentencia WHERE para hallar resultados específicos.

Combinación externa (OUTER JOIN)Mediante esta operación no se requiere que cada registro en las tablas a tratar tenga un registro equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no existe otro registro que le corresponda.

En SQL:2003 no existe una notación implícita para las combinaciones externas.Este tipo de operación se subdivide dependiendo de la tabla a la cual se le admitirán los registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla derecha, o combinación completa.

de tabla izquierda (LEFT OUTER JOIN o LEFT JOIN)El resultado de esta operación siempre contiene todos los registros de la tabla de la izquierda (la primera tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la derecha, para uno de la izquierda.

La sentencia LEFT OUTER JOIN retorna la pareja de todos los valores de la tabla izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia.A diferencia del resultado presentado en los ejemplos A y B (de combinación interna) donde no se mostraba el empleado cuyo departamento no existía; en el siguiente ejemplo se presentarán los empleados con su respectivo departamento, e inclusive se presentará el empleado, cuyo departamento no existe.

H. Ejemplo de tabla izquierda para la combinación externa:

SELECT distinct *FROM empleadoLEFT OUTER JOIN departamentoON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido

Empleado.IDDepartamento

Departamento.NombreDepartam

ento

Departamento.IDDepartamento

Page 68: Mis Apuntes Oracle PL-SQL

Jordán 33 Ingeniería 33

Andrade 31 Ventas 31

Róbinson 34 Producción 34

Zolano 34 Producción 34

Gaspar 36 NULL NULL

Steinberg 33 Ingeniería 33

de tabla derecha (RIGHT OUTER JOIN o RIGHT JOIN)Esta operación es inversa a la anterior; el resultado de esta operación siempre contiene todos los registros de la tabla de la derecha (la segunda tabla que se menciona en la consulta), aun cuando no exista un registro correspondiente en la tabla de la izquierda, para uno de la derecha.

La sentencia RIGHT OUTER JOIN retorna la pareja de todos los valores de la tabla derechacon los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL encaso de no correspondencia.

I. Ejemplo de tabla derecha para la combinación externa:

SELECT *FROM empleadoRIGHT OUTER JOIN departamentoON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido

Empleado.IDDepartamento

Departamento.NombreDepartam

ento

Departamento.IDDepartamento

Zolano 34 Producción 34

Jordán 33 Ingeniería 33

Róbinson 34 Producción 34

Steinberg 33 Ingeniería 33

Andrade 31 Ventas 31

NULL NULL Mercadeo 35

En este caso el área de Mercadeo fue presentada en los resultados, aunque aún no hay

Page 69: Mis Apuntes Oracle PL-SQL

empleados registrados en dicha área.

combinación completa (FULL OUTER JOIN)Esta operación presenta los resultados de tabla izquierda y tabla derecha aunque no tengan correspondencia en la otra tabla. La tabla combinada contendrá, entonces, todos los registros de ambas tablas y presentará valores nulos NULLs para registros sin pareja.J. Ejemplo de combinación externa completa:

SELECT *FROM empleadoFULL OUTER JOIN departamentoON empleado.IDDepartamento = departamento.IDDepartamento

Empleado.Apellido

Empleado.IDDepartamento

Departamento.NombreDepartam

ento

Departamento.IDDepartamento

Zolano 34 Producción 34

Jordán 33 Ingeniería 33

Róbinson 34 Producción 34

Gaspar 36 NULL NULL

Steinberg 33 Ingeniería 33

Andrade 31 Ventas 31

NULL NULL Mercadeo 35

Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en su área correspondiente, y se muestra además el departamento de Mercadeo con valor nulo en los empleados de esa área.

Algunos sistemas de bases de datos no soportan esta funcionalidad, pero esta puede ser emulada a través de las combinaciones de tabla izquierda, tabla derecha y de la sentencia de unión.

K. El mismo ejemplo puede expresarse así:

SELECT *FROM empleadoLEFT JOIN departamentoON empleado.IDDepartamento = departamento.IDDepartamentoUNION

Page 70: Mis Apuntes Oracle PL-SQL

SELECT *FROM empleadoRIGHT JOIN departamentoON empleado.IDDepartamento = departamento.IDDepartamentoWHERE empleado.IDDepartamento IS NULL

El catálogo de Oracle

El catálogo de oracle es un conjunto de tablas y vistas que contienen la definición de laestructura lógica y física de la base de datos.

Esto incluye los objetos existentes, la situación de los datafiles, la configuración de losusuarios, etc.

Los nombres de las tablas de catálogo sigue la siguiente nomenclatura de prefijos:

DBA_ Objetos con información de administrador. Sólo accesibles por usuarios DBA.USER_ Objetos con información del usuario con el que estamos conectado. Proporcionan menos información que los objetos DBA_ALL_ Objetos con información de todos los objetos en base de datos.V_$ ó V$ Tablas virtuales

Existe una tabla de catálogo para cada tipo de objeto posible (en plural).

TABLES, VIEWS, SEQUENCES, TABLESPACES...

Sabiendo esto podemos ver algunos ejemplos:

DBA_TABLES Información para administradores de las tablas en base de datos.USER_VIEWS Información de las vistas creadas por el usuario desde el que accedemos.ALL_SEQUENCES Información de todas las secuencias existentes en base de datos.DBA_TABLESPACES Información de administración sobre los tablespaces.USER_TAB_COLUMNS Todas las columnas de tabla en el usuario activo.

Los objetos de catálogo pueden estar relacionados entre ellos. Por ejemplo, el objeto ALL_TABLES guarda una relación 1­N con el objeto ALL_TAB_COLUMNS: Una tabla tiene N columnas.Si se quiere que todos los usuarios tengan algún tipo de acceso a un objeto, podemos dar ese privilegio al rol PUBLIC.

El catálogo público son aquellas tablas (USER_ y ALL_) que son accesibles por todos los usuarios. Normalmente dan información sobre los objetos creados en la base de datos.

El catálogo de sistema (DBA_ y V_$) es accesible sólo desde usuarios DBA y contiene tanto información de objetos en base de datos, como información específica de la base de datos en sí (versión, parámetros, procesos ejecutándose...)

Page 71: Mis Apuntes Oracle PL-SQL

Ciertos datos del catálogo de Oracle debe actualizarse para el buen funcionamiento de la base de datos (ANALYZE).

Disponemos de un par de tablas en el catálogo público que sirven al analista y al programador para crear comentarios sobre tablas y columnas.

ALL_TAB_COMMENTS Contiene los comentarios para tablas y vistas.ALL_COL_COMMENTS Contiene los comentarios para las columnas de tablas yvistas.

Estas tablas se mantienten por medio de la sentencia COMMENT.

Con todas esta información en la base de datos, podemos escribir procedimientos o scriptsSQL para generar documentación o generar a su vez scripts.

Fuentes

http://www.gplivna.eu/papers/sql_join_types.htm#p4

http://www.oracle­developer.net/display.php?id=213

http://www.oraclepassport.com/OracleJoins.html

http://www.smart­soft.co.uk/Oracle/oracle­tips­and­tricks.htm

http://www.java2s.com/Code/Oracle/CatalogOracle.htm

http://es.wikipedia.org/wiki/Join

http://www.plsql.biz/2007/01/hints­en­plsql­para­determinar­el­mtodo.html

http://www.oracle.com/index.html

http://es.wikipedia.org/wiki/Oracle

http://en.wikipedia.org/wiki/Oracle_Database

http://www.pythian.com/news/13291/installing­oracle­11gr2­enterprise­edition­on­ubuntu­10­04­lucid­lynx/

http://ubuntulife.wordpress.com/2007/02/11/instalar­oracle­10g­release­2­en­ubuntu ­edgy/

Page 72: Mis Apuntes Oracle PL-SQL

http://www.taringa.net/posts/linux/5400558/Aplicaciones­X­remotas­desde­Window s.html

http://www.buanzo.com.ar/lin/x_cliente_servidor.html

http://www.infor.uva.es/~jvegas/cursos/bd/orarq/orarq.html

http://www.infor.uva.es/~jvegas/cursos/bd/oraseg/oraseg.html

http://blobgle.com/blog/?p=51

http://alexhomar.blogspot.com/2007/05/esquema­usuario.html

http://orlandoolguin.wordpress.com/2009/09/20/manejo­de­perfiles/

http://cursos.atica.um.es/cursosdba/dba10g1.php

http://www.desarrolloweb.com/manuales/tutorial­oracle.html

http://www.elartedeprogramar.cl/foro/sql/mini­guia­de­programacion­oracle­pl­sql/?PHPSESSID=d5f1570a72e581449b195c2a4f5d1857

http://www.devjoker.com/gru/Tutorial­PLSQL/PLSQ/Tutorial­PLSQL.aspx

http://www.dataprix.com/como­crear­un­nuevo­esquema­en­oracle­paso­paso

http://www.programacionweb.net/foros/mensaje/?num=16941

http://www.infor.uva.es/~jvegas/cursos/bd/orarq/orarq.html

http://www.dbasupport.com.mx/index.php?option=com_content&view=article&id=126:Apuntes+de+SQLPlus&catid=1:administracion&Itemid=3

http://www.infor.uva.es/~jvegas/cursos/bd/sqlplus/sqlplus.html#conexion

http://www.orafaq.com/wiki/SQL*Plus_FAQ

http://www.exes.es/ManSQL/index.asp?Pg=sql_plsql_10.htm

http://4.bp.blogspot.com/_nt6c3XlwGIs/Sh2sQXxP6gI/AAAAAAAAAaI/74PTi9JdGPM/s1600­h/query.jpg

http://www.dba­oracle.com/oracle_tips_like_sql_index.htm

http://carcasco.blogspot.com/2009/05/oracle­busquedas­like­fuzzy­contains.html

http://www.dba­oracle.com/plsql/

http://www.dba­oracle.com/oracle_tips_like_sql_index.htm

Page 73: Mis Apuntes Oracle PL-SQL

http://www.orafaq.com/node/1918

http://knoworacle.wordpress.com/2010/02/25/oracle­10g­top­10­oracle­plsql­performance­tips/

http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96624/12_tune.htm

http://download.oracle.com/docs/cd/B12037_01/appdev.101/b10807/12_tune.htm

http://www.plsql.biz/2006/08/bucles­y­problemas­de­rendimiento.html

http://www.devshed.com/c/a/Oracle/Tuning­PLSQL­Code/

http://www.dba­oracle.com/oracle_news/2004_2_5_rittman.htm

http://www.dbspecialists.com/files/presentations/bulk_binds.html

http://daust.blogspot.com/2006/01/xe­changing­default­http­port.html

http://www.maestrosdelweb.com/editorial/tutsql1/

http://www.desarrolloweb.com/manuales/9/

http://es.wikipedia.org/wiki/SQL

http://www.redcientifica.com/oracle/c0002p0004.html

http://www.softcov.com/es/database/oracle­­data­dictionary­used.html

http://www.bd.cesma.usb.ve/ci5313/em04/taller4_MEV.pdf

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=268

http://66.221.222.85/reference/builtin_functions.html

http://techonthenet.com/oracle/functions/

http://www.infor.uva.es/~jvegas/cursos/bd/sqlplus/sqlplus.html#columnas

http://www.oracle­base.com/articles/10g/MergeEnhancements10g.php

http://www.oracleya.com.ar/simulador/simulador.php?cod=212&punto=54

http://oracleya.com.ar/temarios/descripcion.php?cod=190&punto=1

http://www.desarrolloweb.com/articulos/1900.php

Page 74: Mis Apuntes Oracle PL-SQL