Sunteți pe pagina 1din 90

COLEGIO DE INGENIEROS DEL

PERU

Programacin PL/SQL
Oracle 11g

1.Introduccin PL/SQL
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

Introduccin PL/SQL
1.1 PL/SQL
Proporciona funcionalidades adicionales a SQL como:
Manipulacin de registros a travs de cursores.
Almacenar el cdigo en el servidor y no en el cliente.
Manejo de excepciones.
Trabajar con variables, parmetros, colecciones, registros, arreglos,
objetos, cursores, etc.
1.2 Bloque PL/SQL
Es un bloque de cdigo que se ejecuta en una sesin.
No es almacenado en la base de datos.
No puede ser llamado desde otra sesin.
Ejemplo:
DECLARE
v_Date TIMESTAMP;
BEGIN
SELECT systimestamp - 1/24 INTO v_Date FROM dual;
DBMS_OUTPUT.PUT_LINE('One hour ago: '||v_Date);
END;

Programacin PL/SQL-Carlos Janjachi

COLEGIO DE INGENIEROS DEL


PERU

Introduccin PL/SQL
1.3. Procesamiento de PL/SQL
La ejecucin de un bloque PL/SQL pasa por las siguientes etapas:
El cdigo es enviado al PL/SQL Engine
Se parsea.
El parte procedural se envia al Procedural Statement Executor.
El parte sql se enva al SQL Statement Executor.

Parseo:
Hard
Soft
Proceso:
Sintaxis
Semntica (objetos y privilegios)
Asigna espacio en SQL rea (shared pool).
Genera la sentencia parseada (hash) + plan
Guarda parsed en el SQL rea.
Programacin PL/SQL-Carlos Janjachi

Introduccin PL/SQL
Procesamiento Bloque PL/SQL

Programacin PL/SQL-Carlos Janjachi

COLEGIO DE INGENIEROS DEL


PERU

Introduccin PL/SQL
Procesamiento Procedimiento PL/SQL

Programacin PL/SQL-Carlos Janjachi

Introduccin PL/SQL
1.4. PL/SQL Engine
Se encuentra presente en:
Oracle server
Oracle Forms (Version 3 and later)
SQL*Menu (Version 5 and later)
Oracle Reports (Version 2 and later)
Oracle Graphics (Version 2 and later)
Bloques annimos son enviados desde:
Oracle precompilers
Oracle Call Interfaces (OCIs)
SQL*Plus
Oracle Enterprise Manager

Programacin PL/SQL-Carlos Janjachi

COLEGIO DE INGENIEROS DEL


PERU

Introduccin PL/SQL
Enlaces
SQL, PL/SQL, and Java
http://www.macs.hw.ac.uk/dept/facil/guides/oracle_9i/doc/server.901/a
88856/c16sqlpl.htm

Programacin PL/SQL-Carlos Janjachi

Programacin PL/SQL
Oracle 11g

2.Tools PL/SQL
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

COLEGIO DE INGENIEROS DEL


PERU

Tools PL/SQL
2.1. Tools PL/SQL
Algunas herramientas de pl/sql son:
SQL Plus
SQL Developer
http://www.oracle.com
CAST SQLBuilder
http://www.castsoftware.com
FROG
http://sourceforge.net/projects/frogfororacle/
PLEdit
http://www.benthicsoftware.com
SQL Navigator
http://www.quests.com
TOAD
http://www.toadsoft.com
Tambin se puede hacer desarrollo pl/sql desde los IDE:
Netbeans
JDeveloper.

Programacin PL/SQL-Carlos Janjachi

Programacin PL/SQL-Carlos Janjachi

10

Tools PL/SQL
2.2. SQLDeveloper
Requerimientos:

Tomado de E15223-01, Pag 14.

COLEGIO DE INGENIEROS DEL


PERU

Tools PL/SQL
JDBC Drivers
SQLDeveloper soporta drivers java que le permiten la conexin a otras bases
de datos como:
IBM DB2
db2jcc.jar, db2jcc_license_cu.jar
MySQL
mysql-connector-java-5.0.4-bin.jar
SQL Server jtds-1.2.jar

Programacin PL/SQL-Carlos Janjachi

11

Tools PL/SQL
Algunas caracteristicas de SQLDeveloper son:
Conexiones
SQLDeveloper permite compartir conexiones entre las ejecuciones de
bloque pl/sql.
Format
CTRL+F7, para dar el formato (sangrado) estandar de la herramienta

Programacin PL/SQL-Carlos Janjachi

12

COLEGIO DE INGENIEROS DEL


PERU

Tools PL/SQL
Crear Objetos de BD
SQLDeveloper permite crear objetos de base de datos como tablas, ndices,
vistas, secuencias, procedimientos almacenados, etc.

Programacin PL/SQL-Carlos Janjachi

13

Tools PL/SQL
Crear Tablas
Creacin de tablas y sus caractersticas.

Programacin PL/SQL-Carlos Janjachi

14

COLEGIO DE INGENIEROS DEL


PERU

Tools PL/SQL
Exportar Datos
SQLDeveloper permite exportar datos de las tablas a los formatos:
csv
fixed
html
insert
loader
text
xls
xml

Programacin PL/SQL-Carlos Janjachi

15

Tools PL/SQL
Enlaces

SQLDeveloper download
http://www.oracle.com/technetwork/developer-tools/sqldeveloper/downloads/index.html
SQLDeveloper documentacin
http://download.oracle.com/docs/cd/E15846_01/index.htm
CAST SQLBuilder
http://www.castsoftware.com
FROG
http://sourceforge.net/projects/frogfororacle/
PLEdit
http://www.benthicsoftware.com
SQL Navigator
http://www.quests.com
TOAD
http://www.toadsoft.com

Programacin PL/SQL-Carlos Janjachi

16

COLEGIO DE INGENIEROS DEL


PERU

Programacin PL/SQL
Oracle 11g

3. PL/SQL Bsico
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

17

PL/SQL Bsico
3.1. Estructura de Bloque PL/SQL
La estructura de un bloque pl/sql contiene las siguientes secciones:
DECLARATION (Opcional)
Usado para declarar las variables y tipos de datos que sern utilizados en
el bloque.
Listado de variables locales.
EXECUTION [BEGIN, END] (Requerido)
Es el bloque de ejecucin.
Debe contener pl/sql estandar para compilar.
Soporta comandos DML.
EXCEPTION (Opcional)
Usado para atrapar los errores que ocurren durante la ejecucin.

Programacin PL/SQL-Carlos Janjachi

18

COLEGIO DE INGENIEROS DEL


PERU

PL/SQL Bsico
3.2. Bloque PL/SQL Annimo.
Es un bloque pl/sql con la estructura basica.
No se les asigna un nombre y no se almacenan en la base de datos.
Pueden llamar a otros programas (procedimientos, funciones, paquetes) pero
no a otro bloque annimo.

Programacin PL/SQL-Carlos Janjachi

19

Programacin PL/SQL-Carlos Janjachi

20

PL/SQL Bsico

COLEGIO DE INGENIEROS DEL


PERU

PL/SQL Bsico
3.3. Bloque PL/SQL Anidados.
Un bloque anidado es aquel que contiene a otros sub-bloques.
Los sub-bloques se permiten en las secciones EXECUTION y EXCEPTION, no en
DECLARATION.

Programacin PL/SQL-Carlos Janjachi

21

Programacin PL/SQL-Carlos Janjachi

22

PL/SQL Bsico

COLEGIO DE INGENIEROS DEL


PERU

PL/SQL Bsico
3.4. Errores en Tiempo de Compilacin.
Durante la compilacin de un bloque pl/sql nombrado (procedimientos y
funciones) oracle realiza la siguiente comprobacin:
Sintaxis
Dependencia de los objetos
Permisos
Si el bloque nombrado contiene errores, oracle devuelve un mensaje y asigna
el estado invalido al objeto.
Para un bloque annimo no aplica porque este pasa directamente a un tiempo
de ejecucin.

Programacin PL/SQL-Carlos Janjachi

23

Programacin PL/SQL-Carlos Janjachi

24

PL/SQL Bsico

COLEGIO DE INGENIEROS DEL


PERU

PL/SQL Bsico

Programacin PL/SQL-Carlos Janjachi

25

Programacin PL/SQL
Oracle 11g

4. Creacin de BD
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

26

COLEGIO DE INGENIEROS DEL


PERU

Creacin de BD
4.1. La Base de Datos de Practica.
El esquema de trabajo es USOCIAL y contiene las tablas de un sistema de ofertas
a clientes.

Programacin PL/SQL-Carlos Janjachi

27

Programacin PL/SQL-Carlos Janjachi

28

Creacin de BD
TABLA SCLIENTE

TABLA SOFERTA

COLEGIO DE INGENIEROS DEL


PERU

Creacin de BD
TABLA SPERFIL

TABLA SCLIE_PERF

Programacin PL/SQL-Carlos Janjachi

29

Programacin PL/SQL-Carlos Janjachi

30

Creacin de BD
TABLA SOFER_PERF

COLEGIO DE INGENIEROS DEL


PERU

Creacin de BD
TABLA SREG_CLIE_OFER

Programacin PL/SQL-Carlos Janjachi

31

Programacin PL/SQL
Oracle 11g

5. Estructuras de Control
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

32

COLEGIO DE INGENIEROS DEL


PERU

Estructuras de Control
5.1 EXPRESIONES PL/SQL.
Una composicin de operadores y operandos.
Operadores de Asignacin.
Asigna un valor, variable o expresin a una variable.
Se da en la seccin de declaracin o en dentro del bloque durante el tiempo
de ejecucin.
Ejemplo:
v_precio := 1200;
Ejemplo:
BEGIN
v_string := 'CREATE TABLE authors(id NUMBER PRIMARY KEY, first_name
VARCHAR2(50), last_name VARCHAR2(50))';EXECUTE IMMEDIATE
(v_string);
END;

Programacin PL/SQL-Carlos Janjachi

33

Estructuras de Control
Operadores de Concatenacin.
Permite la concatenacin de cadenas, valores o expresiones.
Ejemplo:
BEGIN
v_string := 'CREATE TABLE authors(' ||'id NUMBER PRIMARY KEY, '
||'first_name VARCHAR2(50), ' ||'last_name VARCHAR2(50))';
EXECUTE IMMEDIATE (v_string);
END;

Programacin PL/SQL-Carlos Janjachi

34

COLEGIO DE INGENIEROS DEL


PERU

Estructuras de Control
5.2. ESTRUCTURAS DE CONTROL.
Condicionales.
Procesa porciones de cdigo pl/sql de acuerdo a criterios de evaluacin

IF-THEN-ELSE
La condicin se evala como TRUE, FALSE, NULL.
Si es verdadera entonces se realiza la accin 1.
Si es falsa entonces se realiza la accin 2.
IF condition
THEN action1;
ELSE action2
END IF;

Programacin PL/SQL-Carlos Janjachi

35

Estructuras de Control

IF-THEN-ELSIF
Si una de las condiciones es verdadera el resto se asume como falso y son
obviados.
IF condition
THEN action
ELSIF condition THEN
action [ELSE
action] END IF;
CASE
Evaluacin condicional.
CASE expression
WHEN test1 THEN action;
WHEN test2 THEN action; ...
ELSE action;
END CASE;

Programacin PL/SQL-Carlos Janjachi

36

COLEGIO DE INGENIEROS DEL


PERU

Estructuras de Control
Bucles.
LOOP
Permite la ejecucin circular (repeticin) de cdigo pl/sql.
LOOP
action;
EXIT [WHEN condition]
END LOOP;
FOR
Permite un nmero finito de ejecuciones de cdigo pl/sql.
FOR counter IN low_number .. high_number
LOOP
action;
END LOOP;
WHILE
Permite un nmero de ejecuciones hasta que la condicin sea verdadera.
WHILE condition
LOOP
action;
END LOOP;
Programacin PL/SQL-Carlos Janjachi

37

Estructuras de Control
Navegacin.
GOTO
Permite saltar hacia un porcin de cdigo pl/sql en el bloque.
No puede referenciar a una etiqueta en un bloque anidado.
No puede referenciar desde fuera de un bloque hacia adentro, tampoco
al reves.
BEGIN
GOTO label_name;
.. .. .. ..
<< label_name>>
END;

Programacin PL/SQL-Carlos Janjachi

38

COLEGIO DE INGENIEROS DEL


PERU

Programacin PL/SQL
Oracle 11g

6. Stored Function
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

39

Stored Function
6.1. PL/SQL Function
Las funciones son subprogramas pl/sql que se almacenan en la base de datos.
Contienen secciones de declaracin, ejecucin y manejo de excepciones.
Manejan parmetros de entrada y salida durante su llamada, sin embargo a
diferencia de un procedimiento, la llamada a una funcin se hace como parte
de una expresin (ej. una condicin).
6.2. Ciclo de una Funcin
Se crean con CREATE OR REPLACE FUNCTION.
El subprograma pl/sql se compila.
El cdigo fuente se almacena en la base de datos.
El cdigo compilado se almacena en la base de datos.
El subprograma compilado puede ser ejecutado desde otro bloque pl/sql.
Durante la ejecucin se puede pasar parmetros a la funcin.
El control pasa a la funcin, especficamente a su primera lnea.
Al finalizar la funcin o ocurrir una excepcin, el control retorna al bloque que
la invoco.

Programacin PL/SQL-Carlos Janjachi

40

COLEGIO DE INGENIEROS DEL


PERU

Stored Function
6.3. Creacin de Funciones Almacenadas
La estructura de un procedimiento almacenado es:
CREATE OR REPLACE FUNCTION function_name [parameter_list]
RETURN parameter
AS
/* Declarative section is here */
BEGIN
/* Executable section is here */
RETURN parameter_value_out
EXCEPTION
/* Exception section is here */
RETURN parameter_value_out
END;
6.4. Eliminacin de Funciones AlmacenadAs.
DROP FUNCTION function_name ;
Programacin PL/SQL-Carlos Janjachi

41

Stored Function
6.5. Parmetros.
Los parmetros formales pueden ser:
IN
El valor del parmetro es pasado a la funcin.
En la funcin, el parmetro acta como una constante solo de
lectura.
OUT
Esta implcito en el RETURN.
Cuando el procedimiento finaliza, retorna el contenido del
parmetro de salida.

Programacin PL/SQL-Carlos Janjachi

42

COLEGIO DE INGENIEROS DEL


PERU

Stored Function
Ej. Creacin de Funcin

Programacin PL/SQL-Carlos Janjachi

43

Stored Function
Ej. Ejecucin de Funcin.

Programacin PL/SQL-Carlos Janjachi

44

COLEGIO DE INGENIEROS DEL


PERU

Stored Function
6.6. Otras caractersticas.

%TYPE.
Soporta %TYPE en la declaracin.

Excepciones.
En la seccin de ejecucin, se permite hacer uso de raise de las
excepciones (predefinidas o definidas por el usuario).
Si la funcin no controla la excepcin esta se propaga al bloque que la
llamo.

Sin parmetros.
Si la funcin no tiene parmetros, la llamada tambin se debe realizar sin
pasar valores.

Parmetro por Posicin


Por defecto, la llamada y paso de valores a los parmetros se hace por
posicin, el primer valor al primer parmetro, etc.

Programacin PL/SQL-Carlos Janjachi

45

Stored Function

Parmetro por Defecto


Permite asignar valores por defecto a los parmetros.
Si se pasa valor al parmetro se toma el valor enviado.
Si no se pasa valor al parmetro se toma el valor por defecto.
parameter_name [mode] parameter_type {:= | DEFAULT} initial_value
(*) mode: IN, OUT, IN OUT

Programacin PL/SQL-Carlos Janjachi

46

COLEGIO DE INGENIEROS DEL


PERU

Programacin PL/SQL
Oracle 11g

7. Stored Procedure
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

47

Stored Procedure
7.1. PL/SQL Procedure
Son subprogramas (procedimientos) de pl/sql que se almacenan en la base de
datos.
Contienen secciones de declaracin, ejecucin y manejo de excepciones.
7.2. Ciclo de un Procedimiento Almacenado.
Se crean con CREATE OR REPLACE PROCEDURE.
El subprograma se compila.
El cdigo fuente se almacena en la base de datos.
El cdigo compilado se almacena en la base de datos.
El subprograma compilado puede ser ejecutado desde otro bloque pl/sql.
Durante la ejecucin se puede pasar parmetros al procedimiento.
El control pasa al procedimiento, especficamente a su primera lnea.
Al finalizar el procedimiento, el control retorna al bloque que le invoco.

Programacin PL/SQL-Carlos Janjachi

48

COLEGIO DE INGENIEROS DEL


PERU

Stored Procedure
7.3. Creacin de Procedimientos Almacenados
La estructura de un procedimiento almacenado es:
CREATE OR REPLACE PROCEDURE procedure_name [parameter_list]
AS
/* Declarative section is here */
BEGIN
/* Executable section is here */
EXCEPTION
/* Exception section is here */
END [ procedure_name];
7.4. Eliminacin de Procedimientos Almacenados.
DROP PROCEDURE procedure_name;

Programacin PL/SQL-Carlos Janjachi

49

Stored Procedure
7.5. Ejecucin de Procedimientos Almacenados.
BEGIN
procedure_name(valor1,valor2, .. );
END;
7.6. Parmetros.
Los parmetros formales pueden ser de tres tipos IN, OUT, IN OUT:
IN
El valor del parmetro es pasado al procedimiento.
En el procedimiento, el parmetro acta como una constante solo de
lectura.
OUT
Cualquier valor pasado al procedimiento es ignorado.
En el procedimiento en tiempo de ejecucin, el parmetro acta como
una variable no inicializada o nula.
Puede ser leda y asignarle un valor.
Cuando el procedimiento finaliza, el contenido del parmetro de salida es
el ultimo valor asignado.
Programacin PL/SQL-Carlos Janjachi

50

COLEGIO DE INGENIEROS DEL


PERU

Stored Procedure

IN OUT
El valor del parmetro es pasado al procedimiento.
En el procedimiento, el parmetro acta como variable no inicializada o
nula, puede ser leda y asignarle un valor.
Cuando el procedimiento termina, el contenido del parmetro (el ultimo
valor asignado) es retornado.

Programacin PL/SQL-Carlos Janjachi

51

Stored Procedure
7.7. Otras caractersticas.

%TYPE.
En la declaracin de parmetros formales soporta %TYPE.

Excepciones.
En la seccin de ejecucin, se permite hacer uso de raise (lanzar) las
excepciones tanto predefinidas o definidas por el usuario.
Si el procedimiento no controla la excepcin esta se propaga al bloque
que llamo al procedimiento.

Sin parmetros.
Si el procedimiento no tiene parmetros, la llamada tambin se debe
realizar sin pasar valores.

Parmetro por Posicin


Por defecto, la llamada y paso de valores a los parmetros se hace por
posicin, el primer valor al primer parmetro, etc.

Parmetro por Defecto


Permite asignar valores por defecto a los parmetros.
Si se pasa valor al parmetro se toma el valor pasado.
Si no se pasa valor al parmetro se toma el valor por defecto.
Programacin PL/SQL-Carlos Janjachi

52

COLEGIO DE INGENIEROS DEL


PERU

Programacin PL/SQL
Oracle 11g

8. Packages
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

53

Packages
8.1. Packages.
Es un PL/SQL que permite la construccin de objetos relacionados que
comparten conceptos o caractersticas similares y se almacenen juntos.
Un paquete tiene dos partes separadas: la especificacin y el cuerpo.
Cada uno se almacena por separado en el diccionario de datos.
Adems de permitir el agrupamiento de objetos, los paquetes son tiles
porque son menos restrictivos que los subprogramas almacenados en lo
que respecta a las dependencias.
La parte de especificacin en un paquete es esencialmente una seccin
declarativa. Cualquier objeto, variables, etc. que puedan ir en la parte
declarativa de un bloque pl/sql puede ir tambin en la especificacin de
un paquete. Esto incluye los procedimientos, funciones, cursores, tipos
y variables.
Una de las ventajas de poner estos objetos en un paquete es la
capacidad para hacer referencia a ellos desde el mismo paquete.

Programacin PL/SQL-Carlos Janjachi

54

COLEGIO DE INGENIEROS DEL


PERU

Packages
8.2. HEADER - Especificacin del Paquete.
La especificacin del paquete, tambin es llamado HEADER o cabecera
contiene informacin del contenido del paquete.
No contiene el cdigo pl/sql.
La especificacin de un paquete puede contener procedimientos,
funciones, variables, excepciones o otros tipos de datos, tal como en un
bloque annimo.
Los elementos pueden ser declarados en cualquier orden sin embargo
deben estar declarados antes de ser referenciados.
8.3. BODY Cuerpo del Paquete.
Contiene el cdigo de lo declarado en la cabecera.
Todas las declaraciones puestas en la cabecera deben estar
desarrolladas en el BODY, y sobretodo en el cuerpo la especificacin del
procedimiento o funcin debe ser la misma que en la cabecera.
Tambin puede contener otras declaraciones adicionales: variables,
cursores, types o subprogramas.

Programacin PL/SQL-Carlos Janjachi

55

Packages
8.4. CREACION DE PAQUETE PL/SQL
Se realiza con el comando:
CREATE [OR REPLACE] PACKAGE [schema.]package_name
AS package
CREATE [OR REPLACE] PACKAGE BODY [schema.]package_name
AS plsql_package_body

8.5. ELIMINACION DE PAQUETE PL/SQL.


Se realiza con el comando:
DROP PACKAGE name_pkg;

Programacin PL/SQL-Carlos Janjachi

56

COLEGIO DE INGENIEROS DEL


PERU

Packages
Ej. Creacin de un paquete.

..continua.
Programacin PL/SQL-Carlos Janjachi

57

Programacin PL/SQL-Carlos Janjachi

58

Packages

..continua.

COLEGIO DE INGENIEROS DEL


PERU

Packages

..continua.
Programacin PL/SQL-Carlos Janjachi

59

Packages
Ej. Ejecucin del paquete.

Programacin PL/SQL-Carlos Janjachi

60

COLEGIO DE INGENIEROS DEL


PERU

Packages
Ej. Error de compilacin por diferencia entre HEADER y BODY.

Programacin PL/SQL-Carlos Janjachi

61

Packages
8.6. Especificacin de Variables Globales.
El BODY de un paquete es opcional.
Si la cabecera del paquete contiene nicamente la declaracin de
variables, cursores, types y no contiene procedimientos ni funciones
entonces no se requiere el BODY.
En la practica, esta forma de codificar se utiliza para declarar variables
globales en las aplicaciones o desarrollos.

Programacin PL/SQL-Carlos Janjachi

62

COLEGIO DE INGENIEROS DEL


PERU

Packages
8.7. Object Types y Sobrecarga.
Se puede sobrecargar los subprogramas de un paquete con diferentes
tipos de objetos definidos por el usuario.
Ej. Creacin de tipos definidos por usuario.

Programacin PL/SQL-Carlos Janjachi

63

Packages
Ej. Sobrecarga del paquete.

Programacin PL/SQL-Carlos Janjachi

64

COLEGIO DE INGENIEROS DEL


PERU

Programacin PL/SQL
Oracle 11g

9. Cursores en Oracle
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

65

Cursores en Oracle
9.1. CURSOR
Un cursor es un subconjunto de datos definido por una consulta.
Se mantienen en memoria, desde que se abren y leen hasta que se cierran .
Un cursor apunta a un espacio de memoria en el rea de Proceso Global
(PGA), especficamente en el User Global Area (UGA) que contiene la sesin
del usuario, ah se almacena lo siguiente:
Filas (row) devueltas por un query.
Numero de filas procesadas por el query.
Un puntero al parsed query en el Shared Pool Area (Shared SQL Pool).
La vista que muestra los cursores es v$open_cursor.
9.2. Ciclo de Cursor
Se declara el cursor.
Al abrir el cursor, se toman una instantnea de los datos y se cargan a
memoria los registros devueltos por el query y el numero de registros.
Si luego se agregan, actualizan o eliminan los registros de la fuente, en
memoria el cursor no refleja estos cambios.
OPEN===>PARSE===>BIND===>EXECUTE===>FETCH===>CLOSE
Programacin PL/SQL-Carlos Janjachi

66

COLEGIO DE INGENIEROS DEL


PERU

Cursores en Oracle
Ej. Datos en memoria en un cursor (Que sucede?).

..continua
Programacin PL/SQL-Carlos Janjachi

67

Programacin PL/SQL-Carlos Janjachi

68

Cursores en Oracle

COLEGIO DE INGENIEROS DEL


PERU

Cursores en Oracle
9.3. TIPOS DE CURSOR
En Oracle existen 4 tipos de cursores:
Cursores Explicitos
Cursores Implicitos
Cursores Variables
Cursores Sub-query
(*) SYS_REFCURSOR: es un tipo de cursor ref dbil y predefinido, permite
simplificar la declaracin de la variable de cursor de este modo:
l_cursor SYS_REFCURSOR;

Programacin PL/SQL-Carlos Janjachi

69

Cursores en Oracle
9.4. CURSOR EXPLICITO
Se indica el cursor en la seccin DECLARATION en forma explicita con:
Usando la declaracin CURSOR
Asignndole un nombre.
Se especifica una sentencia SELECT para uso del cursor.
CURSOR cursor_name [parameter_list]
[RETURN return_type]
IS query
[FOR UPDATE [OF (column_list)][NOWAIT]];
parameter_list:
parmetro para uso en la ejecucin del query.
return_type:el tipo de dato que ser devuelto
column_list: lista de columnas

Programacin PL/SQL-Carlos Janjachi

70

COLEGIO DE INGENIEROS DEL


PERU

Cursores en Oracle
9.5. Clausula FOR UPDATE
Cuando se abre el cursor se bloquean los registros utilizados por el query.
Los registros se muestran como solo lectura (READ ONLY) para otras sesiones.
Si se indica NOWAIT no se abrir el cursor si no se logra obtener un bloqueo
exclusivo de los registros.
Parmetros en Cursores
Permite pasar valores al query durante su ejecucin
Ej. Cursor sin paso de valores.
CURSOR author_cur1
IS SELECT rowid FROM authors WHERE id > 50;
Ej. Cursor con paso de valores.
CURSOR author_cur1 (i_id IN NUMBER)
IS SELECT rowid FROM authors WHERE id > i_id;

Programacin PL/SQL-Carlos Janjachi

71

Cursores en Oracle
9.6. Comando OPEN
Sirve para preparar y abrir un cursor para uso en pl/sql.
Cuando se ejecuta el query es parseado.
Los valores de las variables (bind) son pasados al query.
Se carga los registros devueltos al PGA.
Las sintaxis del comando es:
OPEN cursor_name [(parameter_values)];

Programacin PL/SQL-Carlos Janjachi

72

COLEGIO DE INGENIEROS DEL


PERU

Cursores en Oracle
9.7. Comando FETCH
Sirve para recibir registros desde el context area en un variable para su uso.
El comando acta sobre el registro actual (activo).
Continua con los siguientes registros uno a la vez.
Las sintaxis del comando es:
FETCH cursor_name INTO variable_name(s) | PL/SQL_record;
cursor_name:
variable_name:

nombre del cursor


una o mas variables separadas por coma, las
variables son del mismo tipo y longitud que las
columnas resultado.

Ej. FETCH author_cur INTO v_first_name, v_last_name;

Programacin PL/SQL-Carlos Janjachi

73

Cursores en Oracle
Ej. Para registros pl/sql.
DECLARE
v_author authors%ROWTYPE;
BEGIN
...
FETCH author_cur INTO v_author;
...
Para referenciar al valor de la columna id en el registro author_cur se hace:
v_author.id
9.8. Comando CLOSE
Cierra un cursor abierto de forma explicita.
Las sintaxis del comando es:
CLOSE cursor_name;

Programacin PL/SQL-Carlos Janjachi

74

COLEGIO DE INGENIEROS DEL


PERU

Cursores en Oracle
9.9. Comando LOOP
Permite navegar por el cursor, cada registro activo es recibido y puesto listo
para uso. Se avanza un registro a la vez.
La sintaxis del comando es:
LOOP ... END LOOP;
Ej. Uso de loop.

Programacin PL/SQL-Carlos Janjachi

75

Cursores en Oracle
9.10. Atributos de un Cursor
Los cursores en oracle manejan 6 atributos:
%BULK_EXCEPTIONS
%BULK_ROWCOUNT
%FOUND
%ISOPEN
%NOTFOUND
%ROWCOUNT
(*) Ver su uso en 09_ExplicitAttribute.sql

Programacin PL/SQL-Carlos Janjachi

76

COLEGIO DE INGENIEROS DEL


PERU

Cursores en Oracle
9.11. CURSOR IMPLICITO.
Son abiertos y cerrados por oracle.
En la practica, cada sentencia DML de tipo SQL se guarda como un cursor en el
PGA (context area).
No manejan OPEN, FETCH, CLOSE pero si permiten el uso de
%BULK_EXCEPTIONS, %BULK_ROWCOUNT, %FOUND, %ISOPEN, %NOTFOUND,
%ROWCOUNT

Programacin PL/SQL-Carlos Janjachi

77

Cursores en Oracle
Ej. Uso de cursor implcito

Programacin PL/SQL-Carlos Janjachi

78

COLEGIO DE INGENIEROS DEL


PERU

Cursores en Oracle
9.12. CURSOR VARIABLE.
Se declara el cursor como un registro.
En tiempo de ejecucin se asigna un query al cursor.

Programacin PL/SQL-Carlos Janjachi

79

Cursores en Oracle
9.13. CURSOR SUB-QUERY.
Consiste en utilizar un cursor como parte del query que define otro cursor.
Ver ejemplo en 09_CursorSubquery.sql

Programacin PL/SQL-Carlos Janjachi

80

COLEGIO DE INGENIEROS DEL


PERU

Cursores en Oracle
9.14. Numero de Cursor Abiertos
El numero de maximo cursores abiertos se especifica en parametro
OPEN_CURSORS en el init.ora.

Programacin PL/SQL-Carlos Janjachi

81

Programacin PL/SQL
Oracle 11g

10.Handling Exceptions
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

82

COLEGIO DE INGENIEROS DEL


PERU

Handling Exceptions
10.1. Bloque PL/SQL
La estructura de un bloque pl/sql contiene las siguientes secciones:
DECLARATION
BEGIN, END
EXCEPTION
Usado para atrapar los errores que ocurren durante la ejecucin.

Programacin PL/SQL-Carlos Janjachi

83

Handling Exceptions
10.2. Manejo de Excepciones
Existen dos tiempos para manejar las excepciones:
Compilacin
Reportado por el compilador.
Ejecucin
Los errores son lanzados por un manejador de excepciones.

Programacin PL/SQL-Carlos Janjachi

84

COLEGIO DE INGENIEROS DEL


PERU

Handling Exceptions
10.3. SQLCODE y SQLERROR
SQLCODE
Retorna el numero de error de la excepcin.
SQLERROR
Retorna el mensaje de error de la excepcin.

Programacin PL/SQL-Carlos Janjachi

85

Handling Exceptions
10.4. Excepciones Predefinidas
La lista de excepciones se encuentran en
..\product\11.1.0\db_1\RDBMS\ADMIN\stdspec
Algunos tipos comunes de excepciones predefinidas son:

Programacin PL/SQL-Carlos Janjachi

86

COLEGIO DE INGENIEROS DEL


PERU

Handling Exceptions
10.5. Excepciones Definidas Usuario
Son excepciones definidas por desarrollador en la seccin DECLARE e
indicando la excepcin que manejara.
Se hace de dos formas:
Utilizando PRAGMA EXCEPTION_INIT para asociar la excepcin con un numero
de error.

Programacin PL/SQL-Carlos Janjachi

87

Handling Exceptions
10.5. Excepciones Definidas Usuario
Declarando la excepcin, lanzando la excepcin y manejndola en la seccin
EXCEPTION.

Programacin PL/SQL-Carlos Janjachi

88

COLEGIO DE INGENIEROS DEL


PERU

Handling Exceptions
10.6. Propagacin de Excepciones
Un bloque interno lanza y maneja una excepcin.
Cuando el bloque interno es terminado el control pasa a las sentencias del
bloque externo.

Programacin PL/SQL-Carlos Janjachi

89

Handling Exceptions
10.6. Propagacin de Excepciones
Un bloque interno lanza la excepcin A pero no la controla.
El bloque interno propaga el error al bloque externo donde se controla la
excepcin.

Programacin PL/SQL-Carlos Janjachi

90

COLEGIO DE INGENIEROS DEL


PERU

Handling Exceptions
10.6. Propagacin de Excepciones
Un bloque interno lanza la excepcin A pero no la controla.
El bloque interno propaga el error al bloque externo
El bloque externo no controla la excepcin y la propagada hacia el host.

Programacin PL/SQL-Carlos Janjachi

91

Handling Exceptions
Enlaces

Handling PL/SQL Errors


http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/07
_errs.htm

Programacin PL/SQL-Carlos Janjachi

92

COLEGIO DE INGENIEROS DEL


PERU

Programacin PL/SQL
Oracle 11g

11. Nuevo en 11g y


consideraciones PL/SQL
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

93

Lo nuevo en 11g y consideraciones PL/SQL


Continue
Es una nueva funcionalidad en Oracle 11g.
Permite saltar a la siguiente iteracin en un loop.

Programacin PL/SQL-Carlos Janjachi

94

COLEGIO DE INGENIEROS DEL


PERU

Lo nuevo en 11g y consideraciones PL/SQL


Pivot
Es una nueva funcionalidad en Oracle 11g.
Pivot puede es utilizado como operacin de agregacin para generar reportes
de doble entrada.
En lugar de escribir cdigo complicado no intuitivo con una gran cantidad de
funciones de decodificacin, se puede utilizar pivot para crear un informe
sobre cualquier tabla relacional.
Sintaxis:

pivot_column:
columnas a ser agregadas
pivot_for_column: columnas a ser agrupadas y pivoteadas
pivot_in_column: un filtro para las columnas en pivot_for_column
Programacin PL/SQL-Carlos Janjachi

95

Lo nuevo en 11g y consideraciones PL/SQL


ejemplo: Considerar los datos de clientes, cdigo del estado y ocurrencia de
compra.

ejemplo: Reporte de frecuencia de ocurrencia de compra por estado.

Programacin PL/SQL-Carlos Janjachi

96

COLEGIO DE INGENIEROS DEL


PERU

Lo nuevo en 11g y consideraciones PL/SQL


ejemplo: Uso de pivot, reporte de ocurrencia de compra por estado.

Programacin PL/SQL-Carlos Janjachi

97

Lo nuevo en 11g y consideraciones PL/SQL


Scalar Subquery Caching .

Es una nueva funcionalidad en Oracle 11g.


Si durante la ejecucin de un consulta esta incluye un subquery, oracle
almacena en la cache el resultado del subquery para intentar reutilizarlo.
Los datos son almacenados como una estructura hash table en la sesion de BD
esta estructura no es visible.

Programacin PL/SQL-Carlos Janjachi

98

COLEGIO DE INGENIEROS DEL


PERU

Lo nuevo en 11g y consideraciones PL/SQL


Consideraciones en Triggers
Cuando se utilizan trigger se deben de tener en cuenta :
Triggers en Cascada
Crear solo los triggers necesarios, un exceso de triggers en las tablas puede
causar interrelaciones complejas en las base de datos dificultando el
mantenimiento de la aplicacin.
Recordar el uso de constraints en la tablas como:
NOT NULL, UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DELETE CASCADE
DELETE SET NULL

Programacin PL/SQL-Carlos Janjachi

99

Lo nuevo en 11g y consideraciones PL/SQL


Triggers en Cascada

Programacin PL/SQL-Carlos Janjachi

100

COLEGIO DE INGENIEROS DEL


PERU

Lo nuevo en 11g y consideraciones PL/SQL


Referencias.
Pivot
http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html
Scalar Subquery
http://www.oracle.com/technetwork/issue-archive/2011/11-jan/o11asktom-195084.html

Programacin PL/SQL-Carlos Janjachi

101

Programacin PL/SQL
Oracle 11g

12. Dynamic SQL


Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

102

COLEGIO DE INGENIEROS DEL


PERU

Dynamic SQL
12.1. SQL DINAMICO.
Permite ejecutar sentencias sql construidas en tiempo de ejecucin.
A diferencia de un SQL esttico, los SQL dinmicos no conocen las tablas,
columnas o sentencias hasta el momento de ejecucin.
En un SQL esttico, oracle toma conocimiento de las tablas, columnas o
sentencias de un bloque pl/sql al momento de compilarlo.
En un SQL esttico, al compilar se reconoce los privilegios, roles que se
requieren para el bloque pl/sql.
Un SQL esttico genera estadsticas, por lo que se puede optimizar.
Los usos de SQL dinamico son:
Se puede incluir sentencias DDL en la ejecucion del bloque pl/sql.
Se puede construir el codigo de acuerdo a las necesidades del algoritmo
de desarrollo.

Programacin PL/SQL-Carlos Janjachi

103

Dynamic SQL
12.2. EXECUTE IMMEDIATE
Permite ejecutar sentencias de forma dinmica en un bloque pl/sql.
La sintaxis es:
EXECUTE IMMEDIATE statement;
Ej. Script de sql dinmico.

Programacin PL/SQL-Carlos Janjachi

104

COLEGIO DE INGENIEROS DEL


PERU

Dynamic SQL
Ej. Script de sql dinmico (continuacin).

Programacin PL/SQL-Carlos Janjachi

105

Dynamic SQL
Ej. Script para identificar y compilar objetos descompilados.

Programacin PL/SQL-Carlos Janjachi

106

COLEGIO DE INGENIEROS DEL


PERU

Programacin PL/SQL
Oracle 11g

13. Manejo de Dependencias


Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

107

Manejo de Dependencias
13.1. Dependencias en una Funcin.
Cuando una funcin se compila, se registra en el diccionario de datos la
dependencia a todos los objetos de Oracle a los que hace referencia.
Una funcin puede volverse no valido si una operacin DDL altera la estructura
de sus objetos referenciados.
Ej. Creacin de una funcin que depende de un objeto.

Programacin PL/SQL-Carlos Janjachi

108

COLEGIO DE INGENIEROS DEL


PERU

Manejo de Dependencias
Ej. Modificacin de un objeto referenciado.

Ej. Verificacin del estado de la funcin.

Programacin PL/SQL-Carlos Janjachi

109

Manejo de Dependencias
Re-Compilacin Automtica.
Si una funcin no es valida, el pl/sql engine lo re-compilara automaticamente en
la prxima llamada.
Ej. Re-compilacin automtica.

Ej. Verificacin del estado de la funcin.

Programacin PL/SQL-Carlos Janjachi

110

COLEGIO DE INGENIEROS DEL


PERU

Manejo de Dependencias
Re-Compilacin Manual.
Si una funcin no es valida, se puede re-compilar de forma manual con el
comando COMPILE.
ALTER FUNCTION function_name COMPILE;
Ej. Re-compilacin manual.

Programacin PL/SQL-Carlos Janjachi

111

Manejo de Dependencias
13.2. Dependencias en un Procedimiento Almacenado.
Cuando un procedimiento se compila, se registra en el diccionario de datos la
dependencia a todos los objetos de Oracle a los que hace referencia.
Un procedimiento puede volverse no valido si una operacin DDL altera la
estructura de sus objetos referenciados.
Ej. Creacin de un procedimiento que depende de un objeto.

Programacin PL/SQL-Carlos Janjachi

112

COLEGIO DE INGENIEROS DEL


PERU

Manejo de Dependencias
Ej. Modificacin de un objeto referenciado.

Ej. Verificacin del estado de la funcin.

Programacin PL/SQL-Carlos Janjachi

113

Manejo de Dependencias
Re-Compilacin Automtica.
Si una funcin no es valida, el pl/sql engine lo re-compilara automaticamente en
la prxima llamada.
Ej. Re-compilacin automtica.

Ej. Verificacin del estado de la funcin.

Programacin PL/SQL-Carlos Janjachi

114

COLEGIO DE INGENIEROS DEL


PERU

Manejo de Dependencias
Re-Compilacin Manual.
Si un procedimiento no es valido, se puede re-compilar de forma manual con el
comando COMPILE.
ALTER PROCEDURE procedure_name COMPILE;
Ej. Re-compilacin manual.

Programacin PL/SQL-Carlos Janjachi

115

Manejo de Dependencias
13.3. Dependencia en un Paquete.
Cuando un procedimiento almacenado o funcin se compila, todos los objetos
de Oracle a los que hace referencia se registran en el diccionario de datos.
Si un paquete tiene errores de compilacin se marca como no vlida en el
diccionario de datos.
Un paquete tambin puede volverse no valido si una operacin DDL se realiza
en uno de sus objetos referenciados.
Si se hace un DDL (ej. drop) sobre un objeto referenciado entonces solo el
BODY se hace invalida.
Si se agrega una declaracin de otro objeto al HEADER tambien se
invalida el BODY.

Programacin PL/SQL-Carlos Janjachi

116

COLEGIO DE INGENIEROS DEL


PERU

Manejo de Dependencias
Dependencia de Objetos.
Ej. Creacin de tabla referenciada.

Ej. Creacin de paquete dependiente de la tabla.

Ej. Creacin de procedimiento dependiente del paquete.

Programacin PL/SQL-Carlos Janjachi

117

Manejo de Dependencias
Ej. Verificacin del estado de los objetos.

Ej. Modificacin del BODY del paquete. ?

Programacin PL/SQL-Carlos Janjachi

118

COLEGIO DE INGENIEROS DEL


PERU

Manejo de Dependencias
Ej. Modificacin de la tabla. ?.

Ej. Verificacin del estado de los objetos.

Programacin PL/SQL-Carlos Janjachi

119

Manejo de Dependencias
Re-Compilacin Automtica.
Si una funcin no es valida, el pl/sql engine lo re-compilara automticamente en
la prxima llamada.
Ej. Re-compilacin automtica.

Ej. Verificacin del estado de la funcin.

Programacin PL/SQL-Carlos Janjachi

120

COLEGIO DE INGENIEROS DEL


PERU

Manejo de Dependencias
Re-Compilacin Manual.
Si un procedimiento no es valido, se puede re-compilar de forma manual con el
comando COMPILE.
ALTER PACAKGE package_name COMPILE;
ALTER PACKAGE package_name COMPILE SPECIFICATION;
ALTER PACKAGE package_name COMPILE BODY;

Programacin PL/SQL-Carlos Janjachi

121

Programacin PL/SQL
Oracle 11g

14. Large Objects


Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

122

COLEGIO DE INGENIEROS DEL


PERU

Large Objects
14.1. LARGE OBJECTS
Se conocen como LOBs.
Existen dos tipos de large objects:
Internal LOBs
Almacenados en la base de datos como BLOB, CLOB y NCLOB.
External LOBs
Son almacenados en un archivo del sistema operativo BFILE.
14.2. DBMS_LOB
Es la API pl/sql de oracle para la lectura y escritura de los tipo de datos LOBs.
Para trabajar con tipos LOB se requiere un LOB locator, que es un puntero a la
actual posicion del LOB (tanto en base de datos como en archivo).
(*) Los procedimientos y funciones de DBMS_LOB se detallan en el anexo 1.
14.3. APPEND.
Agrega un lob origen a un lob destino.
Trabaja con BLOB, CLOB y NCLOB.
No carga un CLOB a un BLOB.

Programacin PL/SQL-Carlos Janjachi

123

Programacin PL/SQL-Carlos Janjachi

124

Large Objects
Ej. Uso de append.

COLEGIO DE INGENIEROS DEL


PERU

Large Objects

Programacin PL/SQL-Carlos Janjachi

125

Large Objects
14.4. LOADCLOBFROMFILE/LOADBLOBFROMFILE
Permite cargar un archivo a una columna CLOB, BLOB.
Ej. Carga de un archivo pdf y txt a la base de datos.

Programacin PL/SQL-Carlos Janjachi

126

COLEGIO DE INGENIEROS DEL


PERU

Large Objects

Programacin PL/SQL-Carlos Janjachi

127

Large Objects
Verificacin de la carga del archivo.

Programacin PL/SQL-Carlos Janjachi

128

COLEGIO DE INGENIEROS DEL


PERU

Programacin PL/SQL
Oracle 11g

15. Triggers
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

129

Triggers
15.1. DATABASE TRIGGERS.
Algunas caractersticas de los triggers son:
Son bloques pl/sql nombrados.
Son objetos independientes y no forman parte de un bloque o paquete pl/sql.
Contienen las secciones DECLARATIVE, EXECUTION, EXCEPTION.
Un trigger no acepta parametros de entrada o salida.
15.1. CICLO DE UN TRIGGER.
Se crean con el comando CREATE [OR REPLACE] TRIGGER.
Se almacenan en la base de datos como objetos independientes.
Un trigger es llamado de forma implcita cuando ocurren ciertos eventos
como:
Sentencias DML: insert, delete, update.
Sentencias DDL: operaciones sobre una tabla o vista.
Eventos del sistema: startup. shutdown
Eventos del usuario: logon, logoff

Programacin PL/SQL-Carlos Janjachi

130

COLEGIO DE INGENIEROS DEL


PERU

Triggers
15.3. USOS DE TRIGGERS.
Aumenta la integridad de la base de datos, permite la creacin de
restricciones complejas.
Permite el registro de la auditoria de cambios de una tabla.
Permite lanzar acciones en base de datos ante cambios en una tabla.

Programacin PL/SQL-Carlos Janjachi

131

Triggers
15.4. CREACIN DE TRIGGERS.
Se realiza con la sintaxis:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF} triggering_event
[referencing_clause]
[WHEN trigger_condition]
[FOR EACH ROW]
trigger_body;
trigger_name:
nombre del trigger
triggering_event:
evento que dispara el trigger
(puede incluir la tabla o vista)
referencing_clause:indica los registros a evaluar
trigger_condition:
condicion a evaluar, si es verdadero se ejecuta el
trigger_body del trigger.
(*) El trigger_body no debe exceder 32K.
Programacin PL/SQL-Carlos Janjachi

132

COLEGIO DE INGENIEROS DEL


PERU

Triggers
15.5. TRIGGER DML.
Se dispara ante sentencias DML: insert, update, delete.
Actan sobre todas o algunas de las filas de una tabla.
Las opciones de lanzamiento de un trigger DML son:
Categoria
Statement
Timing
Level

Valor
INSERT, UPDATE, DELETE
BEFORE o AFTER
ROW o Statement

Orden de Ejecucin de un DML Trigger.


Cuando se dispara un trigger se procesa en el siguiente orden:
Ejecuta el BEFORE statement si existe.
Por cada fila:
Ejecuta el BEFORE ROW si existe.
Ejecuta el statement.
Ejecuta el AFTER ROW si existe.
Ejecuta el AFTER statement si existe.
Programacin PL/SQL-Carlos Janjachi

133

Triggers
15.6. Pseudo Registros OLD y NEW .
Presentes a nivel de fila (row).
Permiten acceder desde el trigger a la data que actualmente se esta
procesando.
El compilador los considera como pseudo registros de la forma:
triggering_table%ROWTYPE

Los usos de old y new:

Statement :old
INSERT
UPDATE
DELETE

:new
indefinido, todas la filas null valores que seran insertados
valores de la fila antes de
nuevos valores
actualizar
valores de la fila antes de
indefinido, todas la filas null
eliminar

Programacin PL/SQL-Carlos Janjachi

134

COLEGIO DE INGENIEROS DEL


PERU

Triggers
Pseudo Registros OLD y NEW .
Ej. Insercin de registros a tabla con ID secuencial.

Ej. Creacin del trigger que genera el ID secuencial.

Ej. Insercin del registro completo.

Programacin PL/SQL-Carlos Janjachi

135

Triggers
15.7. Clausula WHEN .
Solo presentes a nivel de fila (row).
Se ejecuta el BODY del trigger solo cuando las filas cumplen la condicin.

Programacin PL/SQL-Carlos Janjachi

136

COLEGIO DE INGENIEROS DEL


PERU

Triggers
15.8. INSTEAD OF TRIGGER .
Se definen para una vista.
Se dispara ante sentencias DML.
Reemplaza el cdigo de la sentencia DML.
Creacin de Instead of Trigger
La sintaxis del comando es:
CREATE [OR REPLACE] TRIGGER [schema.]trigger_name
{BEFORE | AFTER}
{ddl_event_list | database_event_list}
ON {DATABASE | [schema.]SCHEMA}
[when_clause]
trigger_body;
ddl_event_list: lista de sentencias DDL separado por OR
database_event_list: lista de eventos de BD separado por OR

Programacin PL/SQL-Carlos Janjachi

137

Triggers
Instead of Trigger.
Ej. Creacin de una vista.

Ej. Comprobacin que la vista es no actualizable.

Programacin PL/SQL-Carlos Janjachi

138

COLEGIO DE INGENIEROS DEL


PERU

Triggers
Instead of Trigger.
Ej. Creacin de un trigger instead of.

Ej. Comprobacin que la vista es actualizable.

Programacin PL/SQL-Carlos Janjachi

139

Triggers
15.9. SYSTEM TRIGGER.
Se dispara ante sentencias DDL o comandos de base de datos.
DDL: CREATE, ALTER, DROP
Database: startup, shutdown
Creacin de System Trigger
La sintaxis del comando es:
CREATE [OR REPLACE] TRIGGER [schema.]trigger_name
{BEFORE | AFTER}
{ddl_event_list | database_event_list}
ON {DATABASE | [schema.]SCHEMA}
[when_clause]
trigger_body;
ddl_event_list: lista de sentencias DDL separado por OR
database_event_list: lista de eventos de BD separado por OR

Programacin PL/SQL-Carlos Janjachi

140

COLEGIO DE INGENIEROS DEL


PERU

Triggers
System Trigger .
Ej. Creacin de una tabla de Auditoria de conexiones.

Ej. Procedimiento para auditoria de conexiones.

Ej. Trigger para auditoria de conexiones.

Programacin PL/SQL-Carlos Janjachi

141

Triggers
15.10. USER_TRIGGERS
Diccionario de Datos de un Trigger.
Cuando un trigger es creado se almacena en el diccionario de datos.
La vista user_triggers nos muestra informacin sobre el trigger: nombre, el
body, la clusula when, la tabla o vista, el tipo de trigger, estado etc.

Eliminacin de un Trigger
El comando tiene la sintaxis:
DROP TRIGGER triggername;
Deshabilitacin y Habilitacin de un Trigger
Para un trigger en particular:
ALTER TRIGGER triggername {DISABLE | ENABLE};
Los trigger de una tabla:
ALTER TABLE name_table {DISABLE | ENABLE} ALL TRIGGER ;
Programacin PL/SQL-Carlos Janjachi

142

COLEGIO DE INGENIEROS DEL


PERU

Triggers
Enlaces

Using Trigger 11g


http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/tri
ggers.htm

Programacin PL/SQL-Carlos Janjachi

143

Programacin PL/SQL
Oracle 11g

16. Vistas Materializadas


Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

144

COLEGIO DE INGENIEROS DEL


PERU

Vistas Materializadas
16.1. Vista Materializada.
Es una replica de datos de una base de datos maestra externa. La base de datos
maestra puede ser una tabla transaccional, mientras esta tabla se actualiza
constantemente la vista materializada se actualiza de forma manual.
Datawarehouse.
Se pueden utilizar vistas materializadas para hacer reportes y resmenes por
agrupamiento y calculo de los datos externos.

Programacin PL/SQL-Carlos Janjachi

145

Vistas Materializadas

igura. Vista Materializada

sta ilustracin muestra una vista materializada que se comunica con cada uno de
los tres sitios mediante un enlace de base de datos, las bases de datos mster se
comunican entre s mediante dblink de base de datos.
Programacin PL/SQL-Carlos Janjachi

146

COLEGIO DE INGENIEROS DEL


PERU

Vistas Materializadas
16.2. Beneficios de Uso de Vista Materializada.
Algunas ventajas de su uso son:
Reducir la carga de red.
Concentrando los datos de diferentes servidores en un solo servidor de
base de datos.
Las vistas materializadas se actualizan a travs de un proceso batch y en
periodos controlados.
Mejorar la velocidad de las consultas.
Creando en el servidor de la aplicacin replicas de las base de datos
externas que son altamente consultadas.
Crear vistas personalizadas para las aplicaciones finales.
Creando en el servidor de la base de datos subconjuntos de datos
personalizados para cada aplicacin final.
Permite el uso de datos off-line.
Las vistas materializadas no requiere una conexin de red dedicada, la
actualizacin de los datos desde las fuentes se puede hacer de forma
manual en el momento que se requiera.
Programacin PL/SQL-Carlos Janjachi

147

Vistas Materializadas
16.3. Creacin de Vistas Materializadas.
La sintaxis para la creacin de una vista materializada es:
CREATE MATERIALIZED VIEW nombre_vista_m
[TABLESPACE nombre_ts]
[PARALELL (DEGREE n)]
[BUILD {INMEDIATE|DEFERRED}]
[REFRESH {ON COMMIT | ON DEMAND | [START WITH fecha_inicio] NEXT
fecha_intervalo } | {COMPLETE | FAST | FORCE} ]
[{ENABLE|DISABLE} QUERY REWRITE]
AS SELECT ... FROM ... WHERE ...
por defecto:
BUILD : INMEDIATE
REFRESH : FORCE
ENABLE: DISABLE

Programacin PL/SQL-Carlos Janjachi

148

COLEGIO DE INGENIEROS DEL


PERU

Vistas Materializadas
16.4. Creacin de Vistas Materializadas.
BUILD :
INMEDIATE, la tabla asociada con la vista se puebla al momento de la
ejecucin del comando CREATE.
DEFERRED, el comando CREATE solo crea la estructura y la data se puebla
en la primera actualizacin de la vista.
REFRESH:
COMPLETE, la tabla asociada a la vista se borra completamente y se
vuelven a insertar todos los registros devueltos por el SQL de la vista.
FAST, la vista se actualiza solo con los cambios en los datos de las tablas
fuentes realizados desde la ultima actualizacin.
Se debe crear previamente los logs de cambios de todas las tablas
fuentes con CREATE MATERIALIZED VIEW LOG.
No soporta las funciones SUM, AVG, MAX, MIN o COUNT.
FORCE, si es posible la vista se actualiza con el mtodo FAST sino utiliza
COMPLETE.

Programacin PL/SQL-Carlos Janjachi

149

Vistas Materializadas
16.5. Creacin de Vistas Materializadas.
{ENABLE|DISABLE} QUERY REWRITE
Determina si el optimizador de Oracle (basado en costos) puede o no
reescribir la sentencia SQL de la vista.

Programacin PL/SQL-Carlos Janjachi

150

COLEGIO DE INGENIEROS DEL


PERU

Vistas Materializadas
16.6. Actualizacin Manual.
Se realizan utilizando el paquete PL/SQL estndar DBMS_MVIEW
Una vista especifica.
DBMS_MVIEW.REFRESH (' nombre_vista_m)

Todas las vistas que utilicen las tablas o vistas materializadas indicadas.
DBMS_MVIEW.REFRESH_DEPENDENT ('nom_tab1, nom_tab2, ...')

Todas las vistas materializadas y devuelve un entero (n) que es el numero


de registros actualizados.
DBMS_MVIEW.REFRESH_ALL_MVIEWS (n)

Se requiere que los parmetros de la base de datos JOB_QUEUE_PROCESSES y


JOB_QUEUE_INTERVAL estn configurados para permitir la ejecucion de jobs
encolados.

Programacin PL/SQL-Carlos Janjachi

151

Vistas Materializadas
16.7. Actualizacin Automtica.
ON COMMIT
La vista se actualiza cada vez que se ejecuta un COMMIT sobre alguna de
las tablas fuentes de la vista.

Programado.
Se programa en un tiempo determinado.
START WITH [hora del primer refresco en formato datetime]
NEXT[intervalo de tiempo entre actualizaciones en formato datetime ]

Se requiere configurar el parmetro JOB_QUEUE_PROCESSES.

Programacin PL/SQL-Carlos Janjachi

152

COLEGIO DE INGENIEROS DEL


PERU

Vistas Materializadas
Ej. Una vista materializada de una tabla que se actualiza un da a la semana y
de manera incremental.
CREATE MATERIALIZED VIEW LOG ON tabla_origen
WITH PRIMARY KEY
INCLUDING NEW VALUES;
CREATE MATERIALIZED VIEW nombre_vm
REFRESH FAST NEXT SYSDATE + 7
AS SELECT campo1, campo2, campo8
FROM tabla_origen
WHERE campo2 > 5000;

Programacin PL/SQL-Carlos Janjachi

153

Vistas Materializadas
Ej. Actualizacin programada de una Vista Materializada.
CREATE MATERIALIZED VIEW name_vm
REFRESH START WITH ROUND(SYSDATE + 1) + 9/24
NEXT NEXT_DAY(TRUNC(SYSDATE), 'TUESDAY') + 16/24
AS SELECT ...;
Ej. Actualizacin Manual de una Vista Materializada.
begin
dbms_mview.refresh(name_vm');
end;

Programacin PL/SQL-Carlos Janjachi

154

COLEGIO DE INGENIEROS DEL


PERU

Vistas Materializadas
Enlaces

Materialized View Concepts and Architecture


http://download.oracle.com/docs/cd/B10500_01/server.920/a96567/r
epmview.htm

Programacin PL/SQL-Carlos Janjachi

155

Programacin PL/SQL
Oracle 11g

A1. Arquitectura de la BD
Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

156

COLEGIO DE INGENIEROS DEL


PERU

Arquitectura de la BD
Oracle Server
Es un sistema gestor de base de datos.
Compuesto por una Instancia y una Base de Datos Oracle.
Oracle Instance
Gestiona el acceso a la base de datos (sesiones).
Compuesta por memoria y procesos en background.
Oracle Database
Una coleccin de datos integrados.
Compuesta por tres tipos de archivos:
Control file
Data file
Online Redo Log file

Programacin PL/SQL-Carlos Janjachi

157

Arquitectura de la BD
Database Connection

Programacin PL/SQL-Carlos Janjachi

158

COLEGIO DE INGENIEROS DEL


PERU

Arquitectura de la BD
Procesos de Oracle
Oracle implementa tres tipos de procesos durante la conexin.
User process
Se inicia cuando un usuario hace un request a la base de datos.
Server Process
Se conecta con la instancia de oracle.
Se inicia cuando el usuario establece una sesion.
Background Process
Se inicia cuando se inicia la instancia de oracle.

Programacin PL/SQL-Carlos Janjachi

159

Arquitectura de la BD
Arquitectura de Componentes de la Base de Datos

Programacin PL/SQL-Carlos Janjachi

160

COLEGIO DE INGENIEROS DEL


PERU

Arquitectura de la BD
Arquitectura de la Base de Datos

Programacin PL/SQL-Carlos Janjachi

161

Programacin PL/SQL
Oracle 11g

A2. SQL Loader


Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

162

COLEGIO DE INGENIEROS DEL


PERU

SQL Loader
SQL Loader
Es una utilidad para cargar datos a la base de datos oracle.
A menudo es utilizado para transportar datos de recursos externos a la base
de datos.

Programacin PL/SQL-Carlos Janjachi

163

SQL Loader
Control File
Indica donde encontrar la data a cargar.
El formato de la data.
Otros detalles de configuracin.
Gestin de memoria.
Record rejection.
Interrupcin de la carga.
Como se manipula la data.
Input File
SQL Loader lee la data desde dos o mas archivos indicados en el control file.
Un data file puede tener uno de los tres formatos:
Fixed record
Variable record
Stream record

Programacin PL/SQL-Carlos Janjachi

164

COLEGIO DE INGENIEROS DEL


PERU

SQL Loader
Control File
Indica donde encontrar la data a cargar.
El formato de la data.
Otros detalles de configuracin.
Gestin de memoria.
Record rejection.
Interrupcin de la carga.
Como se manipula la data.
Input File
SQL Loader lee la data desde dos o mas archivos indicados en el control file.
Un data file puede tener uno de los tres formatos:
Fixed record
Variable record
Stream record

Programacin PL/SQL-Carlos Janjachi

165

Programacin PL/SQL
Oracle 11g

A3. Tipos de Sentencias


Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

166

COLEGIO DE INGENIEROS DEL


PERU

Tipos de Sentencias
Tipos de Scripts SQL
Algunos tipos de script sql son:
DML
Data Manipulation Language.
Sentencias para el manejo de los datos de un esquema o una base de
datos.
Se ejecuta en un bloque pl/sql.
Incluye las sentencias:
select, insert, update, delete,
merge, operacin upsert (insert o update).
call, llamada a subprograma pl/sql o java.
explain plan, muestra el plan de acceso a la data.
lock table, controla la concurrencia sobre una tabla.

Programacin PL/SQL-Carlos Janjachi

167

Tipos de Sentencias
Tipos de Scripts SQL
DDL
Data Definition Language.
Sentencias para definir la estructura de un esquema o base de datos.
No se ejecuta en un bloque pl/sql. ?
Incluye los comandos:
create, crea un objeto en la base de datos.
alter, altera un objeto en la base de datos.
drop, elimina un objeto en la base de datos.
truncate, remueve todos los registros de una tabla incluyendo el
espacio asignado para los registros.
comment, agregar comentarios al diccionario.
rename, renombrar un objeto.
Se hace un commit implcito antes y despus del comando.
Si se lanza un DDL sobre un objeto (ej. tabla) el objeto que es
dependiente (ej. procedure) puede hacerse invalido.

Programacin PL/SQL-Carlos Janjachi

168

COLEGIO DE INGENIEROS DEL


PERU

Tipos de Sentencias
Insert
INSERT INTO table_name [(column_list)]
VALUES select_statement | (value_list);

Programacin PL/SQL-Carlos Janjachi

169

Tipos de Sentencias
Update
UPDATE table_name
SET column_name = select_statement | value [, column_name =
value]
[WHERE where_clause | WHERE CURRENT OF cursor];

Programacin PL/SQL-Carlos Janjachi

170

COLEGIO DE INGENIEROS DEL


PERU

Tipos de Sentencias
Update

Programacin PL/SQL-Carlos Janjachi

171

Tipos de Sentencias
Delete
DELETE FROM table_name
[WHERE where_clause | WHERE CURRENT OF cursor]

Programacin PL/SQL-Carlos Janjachi

172

COLEGIO DE INGENIEROS DEL


PERU

Tipos de Sentencias
Tipos de Scripts SQL
DCL
Data Control Language
Usado para controlar el acceso a la base de datos.
Incluye los comandos:
grant, conceder privilegios de acceso a la base de datos.
revoke, retirar privilegios de acceso a la base de datos.
TCL
Transaction Control Language
Usado para controlar los cambios en una transaccin.
Incluye los comandos:
commit, rollback
savepoint, indica un punto en la transaccin hacia el cual se puede
hacer rollback.
set transaction, cambia las opciones en una transaccin (READ ONLY,
READ WRITE, ISOLATION LEVEL, ..).

Programacin PL/SQL-Carlos Janjachi

173

Programacin PL/SQL-Carlos Janjachi

174

Tipos de Sentencias
Savepoint.

COLEGIO DE INGENIEROS DEL


PERU

PL/SQL Bsico
Enlaces

SET TRANSACTION
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/se
ttransaction_statement.htm
SAVEPOINT
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/sq
loperations.htm#BABGAAIG

Programacin PL/SQL-Carlos Janjachi

175

Programacin PL/SQL
Oracle 11g

A4. Job Scheduler


Carlos Janjachi
carlos.janjachi@gmail.com

Programacin PL/SQL-Carlos Janjachi

176

COLEGIO DE INGENIEROS DEL


PERU

Job Scheduler
Job Scheduler

Consiste en automatizar la ejecucin de tareas comunes o repetitivas en la


base de datos.
La tareas incluyen acciones como:
recoleccin de estadsticas
volcado de datos desde distintas tablas
la ejecucin de bloques annimos pl/sql
ejecucin de procedimientos almacenados
envo de correos, etc.

Ciclo de JOB
Un job se programa con el paquete DBMS_JOB, a partir de 10g con el paquete
DBMS_SCHEDULER (con scheduler no se requiere setear parmetros de
inicializacin).
Los jobs son programados conforme llegan a la cola (queue).

Programacin PL/SQL-Carlos Janjachi

177

Job Scheduler
Privilegios
La cuenta que administra el scheduler debe tener el rol SCHEDULER_ADMIN.
Creacin de un Job
La sintaxis para crear un job a partir de un procedimiento con scheduler es:
DBMS_SCHEDULER.CREATE_JOB (
job_name
IN VARCHAR2
-- nombre job,
job_type
IN VARCHAR2
-- PLSQL_BLOCK / STORED_PROCEDURE
job_action
IN VARCHAR2,
-- cdigo plsql /nombre procedimiento
number_of_arguments IN PLS_INTEGER, -- parametros del job, 0-255, default 0
start_date
IN TIMESTAMP, -- tiempo inicio (zona horaria por defecto)
repeat_interval IN VARCHAR2, -- frecuencia de repeticin
end_date
IN TIMESTAMP, -- tiempo fin (zona horaria por defecto)
job_class
IN VARCHAR2,
-- default 'DEFAULT_JOB_CLASS'
enabled
IN BOOLEAN
-- default FALSE
auto_drop
IN BOOLEAN,
-- drop al finalizar o inhabilitar, default TRUE
comments
IN VARCHAR2,
-- default NULL
);

Programacin PL/SQL-Carlos Janjachi

178

COLEGIO DE INGENIEROS DEL


PERU

Job Scheduler
Ejemplo.
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name
=> 'STRESS_BD',
job_type
=> 'PLSQL_BLOCK',
job_action
=> 'BEGIN lsys.sp_proceso; END;',
start_date
=> 05-MAR-11 04.35.00 PM AMERICA/LIMA',
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1;',
end_date
=> 05-MAR-11 05.00.00 PM AMERICA/LIMA',
enabled
=> TRUE,
comments
=> 'Cada minuto');
END;

Programacin PL/SQL-Carlos Janjachi

179

Job Scheduler
Referencias
dbms_scheduler
http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28419/d_sched.ht
m

Programacin PL/SQL-Carlos Janjachi

180