Desarrollo y explotación de aplicaciones empresariales con...

110
1 Desarrollo y explotación de aplicaciones empresariales con base de datos Oracle: 1835.090 Julio de 2004

Transcript of Desarrollo y explotación de aplicaciones empresariales con...

Page 1: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

1

Desarrollo y explotación de aplicaciones empresariales con

base de datos Oracle:

1835.090Julio de 2004

Page 2: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

2

Presentación del curso

Page 3: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

3

© Luis Vinuesa Martínez - 2004

Presentación

DirectorLuis Vinuesa Martínez

ProfesoresAlberto Manuel Fernández ÁlvarezÁngel Lombas Fernández Luis Vinuesa Martínez

Page 4: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

4

© Luis Vinuesa Martínez - 2004

Presentación

Asistencia obligatoria (80%)Evaluación

Trabajo individual (propuesto por los profesores o por el alumno, con aprobación por parte de los profesores)

Mail del [email protected]

Page 5: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

5

© Luis Vinuesa Martínez - 2004

Presentación

CalendarioEntrega de prácticas

PlazosElección de prácticaCalificaciones

Software

Page 6: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

6

© Luis Vinuesa Martínez - 2004

Presentación

Directorio de trabajoCread un directorio en el ordenadorSOLO TRABAJAR EN ESTE DIRECTORIO.

Página del cursowww.di.uniovi.es/~vinuesa/cursos/curso_oracle/curso90.htm

Page 7: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

7

Introducción

Page 8: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

8

© Luis Vinuesa Martínez - 2004

Introducción

Bases de datos relacionalesConceptosEvoluciónUtilidadSituación actual

SQL

Page 9: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

9

Arquitectura Oracle

Page 10: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

10

© Luis Vinuesa Martínez - 2004

Arquitectura

Page 11: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

11

© Luis Vinuesa Martínez - 2004

Arquitectura

InstanciasSchemaUser/PasswordSQLNET o NET8 SQLNET LISTENER

Page 12: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

12

© Luis Vinuesa Martínez - 2004

Arquitectura - memoriaSGA (Shared Global Area)

Database Buffer/caché de buffer de base de datosRedo-log-buffer /caché de rehacerShared Pool / área de agrupamiento compartido

Dictionary cache /caché de diccionarioLibrary cache (caché de SQL)

PGA (Program/Process Global Area)

Page 13: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

13

© Luis Vinuesa Martínez - 2004

Arquitectura - procesos

DBWR (database writer)LGWR (log writer)SMON (system monitor)PMON (process monitor)ARCH (archiver)CKPT (checkpoint process)

Page 14: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

14

© Luis Vinuesa Martínez - 2004

Arquitectura – organización lógica

Base de datosTablespace (Espacio de tablas)SegmentosExtensiones (Extent)

Page 15: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

15

© Luis Vinuesa Martínez - 2004

Arquitectura – Ficheros

Datafiles/archivos de base de datosBloques[Rowid]Control Files/archivos de controlRedo-log Files/ficheros de rehacerArchive LogPFILE y SPFILE

Page 16: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

16

© Luis Vinuesa Martínez - 2004

Arquitectura - transacciones

CommitRollbackDML explícitoDDL implícito

Page 17: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

17

© Luis Vinuesa Martínez - 2004

Arquitectura – seguridad

UsuariosPrivilegios

De sistemaDe objetos

RolesPerfiles

Page 18: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

18

© Luis Vinuesa Martínez - 2004

Arquitectura - objetosTablasVistasSinónimosÍndicesClustersDatabase linksSecuencias (sequence)Pseudocolumnas

Page 19: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

19

Administración

Page 20: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

20

© Luis Vinuesa Martínez - 2004

Administración

Servicios de OracleExplicación de la arquitectura OEM

Page 21: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

21

© Luis Vinuesa Martínez - 2004

ArquitecturaPráctica: Instalación del cliente

Instalar: SQL+, oci, jdbc, odbcConfiguración del sqlnet para la conexión a la base de datos (ficheros sqlnet.ora y tnsnames.ora)Conexión con el SQL+ Variable de entorno tns_admin (para el sqlnet)Edición del registro de Windows

Page 22: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

22

© Luis Vinuesa Martínez - 2004

AdministraciónPráctica: OEM, creación de usuario

Crear usuario de la BBDD con el role DBA (curso90/curso90)Crear usuario de oem con permiso de superadministrador (oem90/oem90)Entrar al oem con el usuario recién creadoCrear un nuevo usuario (individual para cada uno, permisos dba)Conectarse con ese nuevo usuario

Page 23: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

23

© Luis Vinuesa Martínez - 2004

Administracion

Práctica: OEM, usohttp://156.35.150.125 (normalmente 3339)Descubrir nodosDBA studio:

Creación de tablespacesCreación de datafilesCreación de usuarios

Page 24: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

24

© Luis Vinuesa Martínez - 2004

Administración

Práctica: configuración de una instanciaModificación del init%.ora (instancemanager)

NLS_DATE_FORMAT = “DD/MM/YYYY”NLS_LANGUAGE = SPANISHNLS_TERRITORY = SPAINUTL_FILE_DIR = *REMOTE_DEPENDENCIES_MODE = SIGNATURE/TIMESTAMP

Page 25: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

25

© Luis Vinuesa Martínez - 2004

AdministraciónPráctica: Creación de nueva instancia

Crear una nueva instancia Contraseñas estándar Comprobar el listener.oraVer la estructura de directorios creada: oracle\admin y oracle\oradata y \databaseConfigurar los clientes (sqlnet) para que se conecten a ellaConfigurar el oem para que se conecte a ella (primero rearrancar el Agent)

Page 26: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

26

© Luis Vinuesa Martínez - 2004

Administración

PrácticaExportImportSQL Loader

Page 27: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

27

SQL

Explotación de la Información

Page 28: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

28

© Luis Vinuesa Martínez - 2004

SQLManejo del SQL+

Connect usuario[/contraseña][@string]Todas las sentencias acaban en “;”EdEjecución de la ultima sentenciaManejo del ratónDescVariables y parámetros

Page 29: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

29

© Luis Vinuesa Martínez - 2004

SQLCommit/RollbackTabla dualVista tabsSysdateValores nulos (null y NVL)Uso de comodines (% y _ )TO_CHAR / TO_DATE / TO_NUMBERDECODE

Page 30: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

30

© Luis Vinuesa Martínez - 2004

SQLTablas de ejemplo

TpaisTprovinciaTciudadTcalleTdomicilioTpersonaTpersona_domicilio

Page 31: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

31

© Luis Vinuesa Martínez - 2004

SQL

Uso de aliasEn las columnasEn las tablas

Page 32: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

32

© Luis Vinuesa Martínez - 2004

SQLConsultas

Order byOperadoresFuncionesSubconsultasJoinSelfjoinOuter JoinGroup ByConnect byConjuntos

Page 33: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

33

© Luis Vinuesa Martínez - 2004

SQL

ORDER BYLa ordenación puede ser de distintos tipos, y depende de NLS_SORTASC, DESC

Page 34: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

34

© Luis Vinuesa Martínez - 2004

SQLOperadores

PrecedenciaAritméticos (+,-,*,/)Concatenación (||)Comparación(=,<>,>,<,IN, SOME, LIKE, BETWEEN, IS NULL.....)Lógicos (AND, OR, NOT)Conjuntos (UNION [ALL], INTERSECT, MINUS)

Page 35: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

35

© Luis Vinuesa Martínez - 2004

SQL

FuncionesDe un valor

NuméricasDe caracterDe fechaDe conversiónOtras

Agregación

Page 36: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

36

© Luis Vinuesa Martínez - 2004

SQL - subconsultasOPCIÓN A

SELECT deptnoFROM empWHERE empno=7369; (resultado 20)

SELECT empnoFROM empWHERE deptno=20;

OPCIÓN BSELECT empno

FROM empWHERE deptno=(SELECT deptno

FROM emp

WHERE empno=7369);

Page 37: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

37

© Luis Vinuesa Martínez - 2004

SQL - subconsultasLa subconsulta puede aparecer en la cláusula WHERE y en la cláusula FROMPueden devolver un valor único o una lista de valores.

SELECT ename,deptnoFROM empWHERE (sal,deptno) IN (SELECT MAX(sal),deptno

FROM empGROUP BY deptno);

Page 38: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

38

© Luis Vinuesa Martínez - 2004

SQL - Joins

JoinSelfjoinOuter join

Page 39: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

39

© Luis Vinuesa Martínez - 2004

SQL - JoinsSELECT e1.empnoFROM emp e1WHERE e1.deptno=(SELECT deptno

FROM empWHERE empno=7369)

SELECT e1.empnoFROM emp e1, emp e2WHERE e1.deptno=e2.deptnoAND e2.empno=7369

Page 40: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

40

© Luis Vinuesa Martínez - 2004

SQL – Group by

Agrupa filas y devuelve información sumariada de cada grupo de filas.Necesaria cuando se desea recuperar valores de funciones de grupo (MAX; MIN, SUM, etc.) junto a valores no de grupo.

Page 41: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

41

© Luis Vinuesa Martínez - 2004

SQL – GROUP BYSELECT deptno, MIN(sal), MAX (sal)

FROM empWHERE job = 'CLERK'GROUP BY deptno;

SELECT deptno, MIN(sal), MAX (sal)FROM empWHERE job = 'CLERK'GROUP BY deptnoHAVING MIN(sal) < 1000;

Page 42: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

42

© Luis Vinuesa Martínez - 2004

SQL – CONNECT BY

Permite realizar consultas jerárquicas (árbol genealógico)

SELECT LPAD(' ',6*(LEVEL-1)) ||ename nombreFROM empSTART WITH job='PRESIDENT'CONNECT BY

PRIOR empno = mgr;

Page 43: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

43

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Calles de Oviedo y de Gijón que empiecen por A o por C

Page 44: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

44

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Calles de Oviedo y de Gijón que empiecen por A o por C

SELECT des_calle,des_ciudadFROM tcalle ca, tciudad ciWHERE ca.cod_pais=ci.cod_pais

AND ca.cod_provincia=ci.cod_provinciaAND ca.cod_ciudad=ci.cod_ciudadAND ca.cod_pais=3 --España AND ca.cod_provincia=2 -- Asturias AND (UPPER(ca.des_calle) LIKE 'A%'

OR UPPER(ca.des_calle) LIKE 'C%')AND (UPPER(des_ciudad) LIKE '%OVIEDO'

OR UPPER(des_ciudad) LIKE '%GIJON')

Page 45: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

45

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Personas con más de un domicilio

Page 46: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

46

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Personas con más de un domicilioSELECT DISTINCT(p.dni)

FROM tpersona_domicilio pWHERE 1<(SELECT COUNT(*)

FROM tpersona_domicilio p2WHERE p.dni=p2.dni)

SELECT p2.dniFROM tpersona_domicilio p2GROUP BY p2.dniHAVING COUNT(*)>1

Page 47: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

47

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Nombre de ciudad, código, código de provincia y % total del calles que tiene esa ciudad sobre el total de calles de ciudades que tengan en su nombre la palabra AVILES, en España (cod_pais=3)

Page 48: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

48

© Luis Vinuesa Martínez - 2004

SQL - EjerciciosSELECT c.des_ciudad, c.cod_ciudad,

c.cod_provincia,a.num_calles/b.total_calles "%calles"FROM (SELECT ca.cod_pais,ca.cod_ciudad,ca.cod_provincia, COUNT(*)

num_callesFROM tcalle ca, tciudad ciWHERE ca.cod_pais=3 --España

AND ca.cod_pais=ci.cod_paisAND ca.cod_provincia=ci.cod_provinciaAND ca.cod_ciudad=ci.cod_ciudadAND des_ciudad LIKE '%AVILES'

GROUP BY ca.cod_pais,ca.cod_ciudad,ca.cod_provincia) a,(SELECT COUNT(*) total_calles

FROM tcalle ca,tciudad ciWHERE ca.cod_pais=3 /*España*/

AND ca.cod_pais=ci.cod_paisAND ca.cod_provincia=ci.cod_provinciaAND ca.cod_ciudad=ci.cod_ciudadAND des_ciudad LIKE '%AVILES') b,

tciudad cWHERE c.cod_pais=a.cod_paisAND c.cod_provincia=a.cod_provinciaAND c.cod_ciudad=a.cod_ciudad

Page 49: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

49

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Obtener el nombre y código de la calle y la ciudad a la que pertenece que tiene el nombre más largo dentro de cada ciudad

Page 50: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

50

© Luis Vinuesa Martínez - 2004

SQL - EjerciciosSELECT des_calle, cod_calle, ca.cod_pais,

ca.cod_provincia, ca.cod_ciudad

FROM tcalle ca,( SELECT cod_pais, cod_provincia, cod_ciudad, MAX(LENGTH(des_calle)) longitudFROM tcalleGROUP BY cod_pais, cod_provincia,

cod_ciudad) bWHERE b.cod_pais=ca.cod_paisAND b.cod_provincia=ca.cod_provinciaAND b.cod_ciudad=ca.cod_ciudadAND LENGTH(des_calle)= longitud

ORDER BY cod_pais, cod_provincia, cod_ciudad, des_calle;

Page 51: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

51

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Departamento con mayor número de empleados y el número de ellos

Page 52: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

52

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Departamento con mayor número de empleados y el número de ellos

Page 53: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

53

© Luis Vinuesa Martínez - 2004

SQL - EjerciciosSELECT deptno, cuantos

FROM (SELECT deptno,COUNT(*) cuantosFROM empGROUP BY deptno) a

WHERE cuantos=(SELECT MAX(cuantos)FROM (SELECT deptno,

COUNT(*) cuantosFROM empGROUP BY deptno) a)

SELECT * FROM (SELECT deptno, COUNT(*) cuantos

FROM empGROUP BY deptnoORDER BY cuantos DESC) a

WHERE ROWNUM<2

Page 54: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

54

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Calle con mas domicilios de una ciudad dada (p.ej: cod_pais=1, cod_provincia=1 y cod_ciudad=1)

Page 55: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

55

© Luis Vinuesa Martínez - 2004

SQL - EjerciciosSELECT ca.cod_calle,des_calle,cuantos

FROM tcalle ca, (SELECT cod_pais, cod_provincia, cod_ciudad, cod_calle, COUNT(*) cuantos

FROM tdomicilioWHERE cod_pais=1

AND cod_provincia=1AND cod_ciudad=1

GROUP BY cod_pais, cod_provincia, cod_ciudad, cod_calle) o

WHERE ca.cod_pais=o.cod_paisAND ca.cod_provincia=o.cod_provinciaAND ca.cod_ciudad=o.cod_ciudadAND ca.cod_calle=o.cod_calleAND o.cuantos=(SELECT MAX(cuantos)

FROM (SELECT cod_pais, cod_provincia, cod_ciudad, cod_calle, COUNT(*) cuantos

FROM tdomicilioWHERE cod_pais=1AND cod_provincia=1AND cod_ciudad=1

GROUP BY cod_pais, cod_provincia, cod_ciudad, cod_calle) h)

Page 56: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

56

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Obtener la media de domicilios que hay por cada ciudad.

Page 57: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

57

© Luis Vinuesa Martínez - 2004

SQL - EjerciciosSELECT (SELECT COUNT(*) FROM tdomicilio)

/(SELECT COUNT(*)FROM (SELECT cod_pais, cod_provincia, cod_ciudad

FROM tdomicilioGROUP BY cod_pais,

cod_provincia,cod_ciudad)) FROM dual;

SELECT COUNT(*)/COUNT( DISTINCTcod_pais*10000000+cod_provincia*10000+cod_ciudad)

FROM tdomicilio;SELECT AVG(cuantos) FROM(SELECT COUNT(*) cuantosFROM tdomicilioGROUP BY cod_pais,cod_provincia,cod_ciudad) b;

Page 58: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

58

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Obtener el total de domicilios que hay por país, por provincia, por ciudad y totales.

Page 59: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

59

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Obtener el total de domicilios que hay por país, por provincia, por ciudad y totales.

SELECT DECODE(GROUPING(cod_pais),1,'Todos Paises',cod_pais),DECODE(GROUPING(cod_provincia),1,'Todas las

provincias',cod_provincia),DECODE(GROUPING(cod_ciudad),1,'Todas las

ciudades',cod_ciudad), COUNT(*) total_domicilios

FROM tdomicilioGROUP BY ROLLUP (cod_pais,cod_provincia,cod_ciudad)

Page 60: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

60

© Luis Vinuesa Martínez - 2004

SQL - Ejercicios

Obtener un árbol genealógico de los descendientes de la persona con DNI=200

Page 61: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

61

© Luis Vinuesa Martínez - 2004

SQL - EjerciciosObtener un árbol genealógico de los descendientes de la persona con DNI=200

SELECT LPAD(' ',6*(LEVEL-1)) ||nombreFROM tpersonaSTART WITH dni=200CONNECT BY

PRIOR dni = padre;

Page 62: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

62

PL/SQL

Explotación avanzada de la información

Page 63: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

63

© Luis Vinuesa Martínez - 2004

PL/SQL BloqueTipos de datosEstructuras de controlSentencias SQLTransaccionesCursoresExcepcionesSubprogramas: Procedimientos y FuncionesPackagesTriggersPackages estándar

Page 64: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

64

© Luis Vinuesa Martínez - 2004

PL/SQL - Bloque

DECLAREDeclaración de Variables;

BEGINSentencias Ejecutables;

[EXCEPTIONDeclaración de Excepciones;]

END;

Page 65: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

65

© Luis Vinuesa Martínez - 2004

PL/SQL – Tipos de DatosMás usados

NUMBER [(precisión,escala)]CHAR [(longitud_máxima)]VARCHAR2 [(longitud_máxima)]DATEBOOLEANRECORDTABLE

Page 66: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

66

© Luis Vinuesa Martínez - 2004

PL/SQL – Tipos de Datos

Muy importantes:Variables y constantes: %TYPE y %ROWTYPESintaxis %TYPE:

<nombre variable%TYPE>;<nombre propietario.tabla.columna%TYPE>;

Sintaxis %ROWTYPE<nombre propietario.tabla.columna%ROWTYPE>;

Page 67: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

67

© Luis Vinuesa Martínez - 2004

PL/SQL – Tipos de Datos

Tipo tabla:TYPE nombre IS TABLE OF

{variable%TYPE|tipo_columna|tabla.columna%TYPE} [NOT NULL] INDEX BY BINARY_INTEGER;

Tipo record:TYPE nombre IS RECORD

(campo1 {tipo_dato|variable%TYPE| tabla.columna%TYPE| tabla%ROWTYPE} [NOT NULL],

campo2 {tipo_dato|variable%TYPE| tabla.columna%TYPE| tabla%ROWTYPE} [NOT NULL],...................................);

Page 68: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

68

© Luis Vinuesa Martínez - 2004

PL/SQL - DeclaracionesSección DECLARE

<nombre> [CONSTANT] <tipo de dato> [NOT NULL] [:=<expresión>];

Ejemplo (ver ej1)DECLARE

impuestos NUMBER;continua BOOLEAN;multiplicador CONSTANT NUMBER(3,2):=0.10;fecha DATE;sal_max NUMBER(11,2):=500*multiplicador;nombre CHAR(30)

BEGIN

Page 69: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

69

© Luis Vinuesa Martínez - 2004

PL/SQL - Declaraciones

EjemploDECLARE

numero_dep dept.deptno%TYPE;nuevo_balance NUMBER(8):=10;referencia nuevo_balance%TYPE;reg_emp emp%ROWTYPE;

BEGINSELECT * INTO reg_emp

FROM empWHERE......;

IF reg_emp.deptno=20 THEN..............END;

Page 70: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

70

© Luis Vinuesa Martínez - 2004

PL/SQL - ÁmbitoDECLARE

a CHAR;b NUMBER;

BEGIN--a CHAR y BDECLARE

a NUMBER;c DATE;

BEGIN--a NUMBER, b y c

END;DECLARE

d BOOLEAN;BEGIN

--a CHAR, b y dEND;

END;

Page 71: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

71

© Luis Vinuesa Martínez - 2004

PL/SQL – Asignación y Operadores

Asignación :=Operadores (mayor a menor precedencia)

InclusiónOR

UniónAND

Comparación=,!=,<,>,<=,>= IS NULL, LIKE , IN, BETWEEN

Suma, resta, concatenación+,-,||

Multiplicación, división*,/

Identidad, negación+,-

Exponenciación, negación**,NOT

Page 72: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

72

© Luis Vinuesa Martínez - 2004

PL/SQL – Estructuras de control

CondicionalIterativoSecuencial

Page 73: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

73

© Luis Vinuesa Martínez - 2004

PL/SQL – Control condicionalIF THENIF condición THEN

conjunto de sentencias;END IF;

IF THEN ELSEIF condición THEN

conjunto de sentencias1;ELSE

conjunto de sentencias2;END IF;

IF THEN ELSIFIF condición1 THEN

conjunto de sentencias1;ELSIF condición2 THEN

conjunto de sentencias2;ELSE

conjunto de sentencias3;END IF;

Page 74: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

74

© Luis Vinuesa Martínez - 2004

PL/SQL – Control condicionalEjemplosIF x>y THEN

alto:=x;END IF;IF cadena=‘pe’ THEN

UPDATE tabla .......;ELSE

UPDATE tabla2 ......;END IF;IF contador<20 THEN

cambia:=50;ELSIF contador>50 THEN

cambia:=30;ELSE

cambia:=20;END IF;

Page 75: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

75

© Luis Vinuesa Martínez - 2004

PL/SQL – Control iterativo

LOOP

LOOPconjunto de sentencias;

EXIT WHEN condición de salidaconjunto de sentencias;

END LOOP;

Page 76: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

76

© Luis Vinuesa Martínez - 2004

PL/SQL – Control iterativo

WHILE

WHILE condición de permanencia LOOPconjunto de sentencias;

END LOOP;

Page 77: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

77

© Luis Vinuesa Martínez - 2004

PL/SQL – Control iterativo

Bucle FOR numérico

FOR variable IN [REVERSE] rango_mínimo..rango_máximo LOOP

conjunto de sentencias;END LOOP

Page 78: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

78

© Luis Vinuesa Martínez - 2004

PL/SQL – Control iterativoDECLARE

i NUMBER(3):=1;BEGIN

END;

FOR i IN 1..9 LOOPINSERT INTO tab

VALUES(i);END LOOP;

LOOPINSERT INTO tab

VALUES(i);i:=i+1;

EXIT WHEN i>9;END LOOP;

WHILE i<10 LOOPINSERT INTO tab

VALUES(i);i:=i+1;

END LOOP;

Page 79: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

79

© Luis Vinuesa Martínez - 2004

PL/SQL – Control secuencial

GOTO (no usar)NULL indica de forma explícita inacción.

IF ratio>90 THENcalcula(dni);

ELSENULL;

END IF;

Page 80: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

80

© Luis Vinuesa Martínez - 2004

PL/SQL - Transacciones

COMMIT ROLLBACKSAVEPOINT punto de salvaguarda

Page 81: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

81

© Luis Vinuesa Martínez - 2004

PL/SQL - TransaccionesEjemplo

BEGININSERT INTO tabla VALUES (‘uno’);SAVEPOINT A;INSERT INTO tabla VALUES (‘dos’);SAVEPOINT B;INSERT INTO tabla VALUES (‘tres’);SAVEPOINT C;.......IF x THENROLLBACK TO B;

ELSIF y THENROLLBACK;

ELSEROLLBACK TO A;

END IF;COMMIT;

END;

Page 82: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

82

© Luis Vinuesa Martínez - 2004

PL/SQL - Cursores

DeclaraciónCURSOR nombre IS

sentencia SELECT [cláusula FOR UPDATE OF ] ;

Forma de uso (el más sencillo)FOR variable IN nombre_cursor LOOP

conjunto de sentenciasEND LOOP;

Page 83: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

83

© Luis Vinuesa Martínez - 2004

PL/SQL - Cursores

Ejemplo (ver ej2)

DECLARECURSOR c1 IS

SELECT * FROM tpersona;BEGIN

FOR i IN c1 LOOPIF i.dni=‘ffff’ THEN ......;

END LOOP;END;

Page 84: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

84

© Luis Vinuesa Martínez - 2004

PL/SQL - Excepciones

TiposPredefinidasDefinidas por el usuario

Page 85: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

85

© Luis Vinuesa Martínez - 2004

PL/SQL - ExcepcionesControl de excepciones

......EXCEPTION

WHEN nombre_de_excepción THENconjunto de sentencias;

WHEN nombre_de_excepción THENconjunto de sentencias;

.......................WHEN OTHERS THEN

conjunto de sentencias;END;

Page 86: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

86

© Luis Vinuesa Martínez - 2004

PL/SQL - Excepciones

Excepciones predefinidas:

SUBSCRIPT_BEYOND_COUNT

SUBSCRIPT_OUTSIDE_LIMITCOLLECTION_IS_NULL

ACCES_INTO_NULLCURSOR_ALREADY_OPEN

ROWTYPE_MISMATCHTRANSACTION_BACKED_OUT

ZERO_DIVIDEVALUE_ERROR

TOO_MANY_ROWSTIMEOUT_ON_RESOURCE

STORAGE_ERRORPROGRAM_ERROR

NOT_LOGGED_ONNO_DATA_FOUND

LOGON_DENIEDINVALID_NUMBER

INVALID_CURSORDUP_VAL_ON_INDEX

Page 87: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

87

© Luis Vinuesa Martínez - 2004

PL/SQL - ExcepcionesDefinidas por el usuarioSintaxisNombre EXCEPTION;[PRAGMA EXCEPTION_INIT(nombre,-número);]

EjemploDECLARE

mi_error EXCEPTION;PRAGMA EXCEPTION_INIT(mi_error,-1999);......

Invocación mediante RAISERAISE mi_error;

Page 88: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

88

© Luis Vinuesa Martínez - 2004

PL/SQL - Excepciones

Funciones usadas con excepciones:SQLCODE devuelve el código de error que ha ocurridoSQLERRM devuelve la cadena de texto correspondiente al error ocurrido

Page 89: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

89

© Luis Vinuesa Martínez - 2004

PL/SQL - ExcepcionesEjemplo (ver ej3)

DECLAREfatal EXCEPTION;.....

BEGIN....IF campo IS NULL THEN RAISE fatal;....EXCEPCTION

WHEN fatal THEN.......

WHEN OTHERS THENcod:=SQLCODE;mensaje:=SQLERRM;INSERT INTO errores VALUES (cod,mensaje);COMMIT;

END;

Page 90: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

90

© Luis Vinuesa Martínez - 2004

PL/SQL - Subprogramas

Tipos Procedimientos (PROCEDURE)Funciones (FUNCTION)

InvocaciónDesde otro subprogramaDesde aplicacionesDesde SQL+ (EXECUTE)

Page 91: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

91

© Luis Vinuesa Martínez - 2004

PL/SQL - Procedimientos

Sintaxis

CREATE [OR REPLACE] PROCEDURE [esquema.]nombre[(argumento1 [{IN|OUT|IN OUT}] tipo_dato [{:=|DEFAULT} valor],

........argumenton [{IN|OUT|IN OUT}] tipo_dato [{:=|DEFAULT} valor])]

{IS|AS}cuerpo de procedimiento

Page 92: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

92

© Luis Vinuesa Martínez - 2004

PL/SQL - ProcedimientosEstructura

CREATE OR REPLACE PROCEDURE nombre IS/*sección declarativa*/

BEGIN/*sección ejecutable*/

EXCEPTION/*sección de excepciones*/

END [nombre];

Page 93: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

93

© Luis Vinuesa Martínez - 2004

PL/SQL - Procedimientos

Ejemplo

CREATE OR REPLACE PROCEDURE ejemplo (p_departamento NUMBER,p_emp temp.empno%TYPE,p_accion NUMBER(1) DEFAULT 1) IS

v_aux NUMBER;v_nuevo_dep tdept.deptno%TYPE;

BEGIN.......

EXCEPTIONWHEN .....

END ejemplo;

Page 94: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

94

© Luis Vinuesa Martínez - 2004

PL/SQL - Funciones

Sintaxis

CREATE [OR REPLACE] FUNCTION [esquema.]nombre[(argumento1 [{IN|OUT|IN OUT}] tipo_dato [{:=|DEFAULT}

valor],........

argumenton [{IN|OUT|IN OUT}] tipo_dato [{:=|DEFAULT} valor])]

RETURN tipo_dato_retorno {IS|AS}cuerpo de función

Page 95: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

95

© Luis Vinuesa Martínez - 2004

PL/SQL - Funciones

En el cuerpo de la función es necesario que se use la orden RETURN para devolver el valor de retorno de la función(También se puede usar en proceduressin ningún parámetro y sirve para provocar la salida inmediata del mismo)

Page 96: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

96

© Luis Vinuesa Martínez - 2004

PL/SQL - FuncionesEjemplo

CREATE OR REPLACE FUNCTION calcula (p_dni tpersona%TYPE,p_sal OUT NUMBER)

RETURN NUMBER ISv_porcen NUMBER(3,2);

BEGIN.......IF v_porcen>0.25 THEN

RETURN 1;ELSE

RETURN 2;END calcula;

Page 97: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

97

© Luis Vinuesa Martínez - 2004

PL/SQL - Subprogramas

Manejo de excepcionesRAISE (para excepciones predefinidas o definidas por el usuario)RAISE_APPLICATION_ERROR (para crear excepciones con sus propios mensajes de error)

RAISE_APPLICATION_ERROR(número,mensaje)El número debe estar entre –20000 y –20999El mensaje puede ser de hasta 512 caracteres

Page 98: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

98

© Luis Vinuesa Martínez - 2004

PL/SQL - Subprogramas

Privilegio EXECUTEParámetro REMOTE_DEPENDENCIES_MODE

SIGNATURETIMESTAMP

Page 99: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

99

© Luis Vinuesa Martínez - 2004

PL/SQL - Paquetes

Pueden incluir:ProcedimientosFuncionesCursoresTiposVariables (permiten variables privadas y “globales”)Excepciones

Page 100: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

100

© Luis Vinuesa Martínez - 2004

PL/SQL - Paquetes

Constan de EspecificaciónCuerpo

Page 101: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

101

© Luis Vinuesa Martínez - 2004

PL/SQL - Paquetes

EspecificaciónCREATE [OR REPLACE] PACKAGE nombre {IS|AS}

especificación_procedimientos |especificación_funciones |declaración_variables |definición_tipo |declaración_excepciones |declaración_cursores

END [nombre];

Page 102: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

102

© Luis Vinuesa Martínez - 2004

PL/SQL - Paquetes

CuerpoCREATE [OR REPLACE] PACKAGE BODY nombre

{IS|AS}código_procedimientos |código_funciones |

[BEGINcódigo_inicialización_paquete]

END [nombre];

Page 103: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

103

© Luis Vinuesa Martínez - 2004

PL/SQL - Paquetes

Permiten la sobrecarga de procedimientos y funcionesPara referirnos a ellos:

Esquema.paquete.objeto

Page 104: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

104

© Luis Vinuesa Martínez - 2004

PL/SQL - Disparadores

Subprogramas que se ejecutan cuando ocurre un suceso de disparo (orden DML, INSERT, UPDATE o DELETE) sobre una tabla de la base de datos

Page 105: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

105

© Luis Vinuesa Martínez - 2004

PL/SQL Disparadores

Un disparador puede ejecutarseBEFOREAFTER

De una operaciónINSERT UPDATEDELETE

Page 106: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

106

© Luis Vinuesa Martínez - 2004

PL/SQL - Disparadores

Sintaxis

CREATE [OR REPLACE] TRIGGER esquema.nombre{BEFORE|AFTER} {[OR]DELETE| [OR] INSERT|[OR] UPDATE

[OF columna]} ON esquema.tabla[REFERENCING OLD [AS] antiguo NEW[AS] nuevo]—NO SE USA[FOR EACH ROW] [WHEN condición]Bloque PL/SQL

Page 107: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

107

© Luis Vinuesa Martínez - 2004

PL/SQL - Disparadores

:NEW:OLDUPDATINGINSERTINGDELETING

Page 108: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

108

© Luis Vinuesa Martínez - 2004

PL/SQL - Disparadores

Orden de ejecución

1. BEFORE2. BEFORE ROW3. AFTER ROW4. ........5. BEFORE ROW6. AFTER ROW7. AFTER

Page 109: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

109

© Luis Vinuesa Martínez - 2004

PL/SQL – DisparadoresSi hay dos disparadores con el mismo evento orden de ejecución aleatorioNo se puede acceder a una tabla mutante (aquella que está siendo modificada, directamente o a través de ON DELETE CASCADE)No se puede modificar una tabla referenciada en las columnas implicadas en restricciones de integridad referencial que tiene que comprobar la sentencia que dispara el trigger.

Page 110: Desarrollo y explotación de aplicaciones empresariales con ...di002.edv.uniovi.es/~vinuesa/cursos/curso_oracle/transparencias.pdf · 1 Desarrollo y explotación de aplicaciones empresariales

110

© Luis Vinuesa Martínez - 2004

PL/SQL – Paquetes estándar

DBMS_JOBDBMS_OUTPUTUTL_FILE