Qu es PL/SQL?
PL/SQL provee una manera muy cmoda de relacionar los conceptos de bases
de datos y manejarlos mediante ciertas estructuras de control, dentro del
contexto de una herramienta netamente de programacin.
Estructuras de Bloque
Un bloque PL/SQL tiene tres partes: una seccin de declaracin, una seccin de
ejecucin y otra de manejo de excepciones. Slo el bloque de ejecucin es
obligatorio en un programa PL/SQL.
DECLARE Opcional
BEGIN-Obligatorio
1
Sentencias sql
EXCEPTION-Opcional
END;-Obligatorio
2
TIPOS DE BLOQUES
PRIMER_PROG.SQL
BLOQUES ANONIMOS
Los bloques annimos son bloques sin nombre. Se declaran en algn punto de
la aplicacin donde son ejecutados y pasados a el PLSQL engine para su
ejecucin en runtime.
Los triggers en Developer-2000 consisten de tales bloques.
SUBPROGRAMAS
Son bloques PLSQL con nombre, que pueden tomar parmetros y ser
invocados. Se pueden declarar procedimientos o funciones. Generalmente se
usa un procedimiento para para ejecutar una accin y una funcin para calcular
un valor.
3
Variables y Constantes
REUSABILIDAD
Una vez declaradas, las variables pueden ser usadas repetidamente dentro de
una aplicacin simplemente referenciandolas en otras sentencias, incluyendo
otras sentencias declarativas.
4
DECLARACION DE VARIABLES PLSQL
SINTAXIS
5
DECLARACION DE CONSTANTES
Alcance y Visibilidad
TIPOS NUMERICOS
BINARY_INTEGER
6
ALCANCE.SQL
NUMBER
SINTAXIS
NUMBER(precision,scale)
TIPOS CARCTER
CHAR
Se utiliza para almacenar datos de tipo carcter de longitud fija. El tipo de datos
char toma un parmetro opcional que permite especificar un tamao mximo de
32767 bytes. Se puede especificar el tamao en trminos de bytes o caracteres,
donde cada carcter contiene uno o ms bytes.
SINTAXIS
LONG
7
VARCHAR2
TIPOS LOB
TIPO BOOLEAN
TIPO FECHA
DATE
Conversiones
Algunas veces se hace necesario convertir un valor desde un tipo de dato a otro.
En PL/SQL se aceptan las conversiones de datos implcitas y explcitas.
8
el que mejor se adecue dependiendo del contexto en que se encuentre.
Tampoco significa que todas las conversiones son permitidas. Algunos ejemplos
de conversin implcita ms comunes se dan cuando variables de tipo char se
operan matemticamente para obtener un resultado numrico.
Desde
BIN_INT X X X X X
CHAR X X X X X X X X
DATE X X X
LONG X X X
NUMBER X X X X X
PLS_INT X X X X X
RAW X X X
ROWID X X
VARCHA X X X X X X X X
R2
9
Uso de %TYPE
El atributo %TYPE define el tipo de una variable utilizando una definicin previa
de otra variable o columna de la base de datos.
Ejemplo:
DECLARE
credito REAL(7,2);
debito credito%TYPE;
debito cuenta.debe%TYPE;
Uso de %ROWTYPE
Ejemplo:
DECLARE
emp_rec emp%ROWTYPE;
dept_rec c1%ROWTYPE;
10
Uso_type.sql
Uso_rowtype.sql
Este captulo se centra en pequeos aspectos del lenguaje, tal como el grupo de
caracteres vlidos, las palabras reservadas, signos de puntuacin y otras reglas
de formacin de sentencias que es preciso conocer antes de empezar a trabajar
con el resto de funcionalidades.
Para asegurar la fcil comprensin del cdigo se pueden aadir espacios entre
identificadores o smbolos. Tambin es una buena prctica utilizar saltos de lnea
e indentaciones para permitir una mejor legibilidad.
11
Ejemplo:
IF x > y THEN
max := x;
ELSE
max := y;
END IF;
Delimitadores e Identificadores
Smbolo Significado
+ operador de suma
% indicador de atributo
delimitador de caracteres
. selector de componente
/ operador de divisin
12
) expresin o delimitador de lista
, separador de tems
* operador de multiplicacin
= operador relacional
; terminador de sentencias
Smbolo Significado
:= operador de asignacin
|| operador de concatenacin
13
** operador de exponenciacin
.. operador de rango
!= operador relacional
^= operador relacional
14
Algunos identificadores especiales, llamados palabras reservadas, tienen un
especial significado sintctico en PL/SQL y no pueden ser redefinidos. Son
palabras reservadas, por ejemplo, BEGIN, END, ROLLBACK, etc.
IDENTIFICADORES
t2
v_nombre
v_costo
Lastname
lastname
LASTNAME
15
El tamao de un identificador no puede exceder los 30 caracteres.
LITERALES
LITERALES NUMERICAS
6 -13 0
Una literal real, es un entero con signo opcional, o un nmero fraccional con
punto decimal.
Una literal tipo carcter es un carcter individual encerrado por comillas simples
(apostrofes). Ejemplo:
16
Hola Mundo
$100.00
02-ENE-06
baker
LITERALES BOOLEANAS
Son los valores predefinidos de TRUE, FALSE y NULL. Las literales booleanas
son valores no cadenas.
COMENTARIOS
Comentarios simples
FROM contabilidad
Comentarios multilnea
17
/* Cursor para validar el usuario */
CURSOR cur_user IS
SELECT user_id
FROM fnd_user
/* Valida que todos los productos existan en la lista de precios del cliente */
OPEN cur_list_headers;
IF cur_list_headers%FOUND THEN
DECLARACIONES
Birthday DATE;
Utilizando DEFAULT
18
Se utiliza DEFAULT para variables que tienen un valor tpico. El operador de
asignacin se utiliza para variables que tienen un valor no tpico (contadores,
acumuladores). Ejemplo:
Contador number := 0;
Las variables definidas como NOT NULL no pueden tomar el valor de nulo. Si
esto sucede PLSQL dispara una exception de VALUE_ERROR. Ejemplo :
I,j,k integer;
i integer;
j integer;
k integer;
PRECEDENCIA DE OPERADORES
OPERACION
OPERADOR
19
** exponenciacin
*, / Multiplicacin, divisin
And Conjuncin
OR Inclusin
OPERADORES LOGICOS
x Y x AND y x OR y NOT
TRUE TRUE TRUE TRUE FALSE
TRUE FALSE FALSE TRUE FALSE
TRUE NULL NULL TRUE FALSE
FALSE TRUE FALSE TRUE TRUE
FALSE FALSE FALSE FALSE TRUE
FALSE NULL FALSE NULL TRUE
NULL TRUE NULL TRUE NULL
NULL FALSE FALSE NULL NULL
NULL NULL NULL NULL NULL
OPERADORES RELACIONALES
20
Los operadores relacionales permiten comparar expresiones complejas.
OPERADOR SIGNIFICADO
= Igual a
!=,<>,^=, No igual a
< Menor que
> Mayor que
<= Menor o igual
>= Mayor o igual
OPERADOR IS NULL
OPERADOR LIKE
OPERADOR BETWEEN
OPERADOR IN
OPERADOR CONCATENACION
21
Dos barras verticales | | sirven como operador de concatenacin los cuales
aaden una cadena a otra. Ejemplo :
CURSORES
Para procesar un una orden SQL, Oracle asigna un rea de memoria que recibe
el nombre de rea de contexto. Esta rea contiene informacin sobre el
procesamiento, como el nmero de filas procesadas por la orden y en caso de
consultas el conjunto activo, que es el conjunto de filas resultado de la consulta.
CURSORES IMPLICITOS
Todas las rdenes SQL se ejecutan dentro de un rea de contexto y tienen, por
tanto, un cursor asociado. Este cursor se conoce con el nombre de cursor SQL y
sirve para procesar las rdenes INSERT, UPDATE, DELETE, y las rdenes
SELECT-INTO de una sola fila. Este se abre y se cierra automticamente, sin
embargo se puede acceder a sus atributos.
CURSORES EXPLICITOS
22
CURSOR nombre_cursor IS orden SELECT;
Apertura de un cursor
OPEN nombre_cursor;
Despus de cada FETCH, se incrementa el punto del conjunto activo para que
apunte a la siguiente fila. De esta forma con un bucle cada FETCH devolver
filas sucesivas del conjunto activo.
Cierre de un cursor
CLOSE nombre_cursor;
23
Existen cuatro atributos en PLSQL que pueden aplicarse a los cursores para
obtener valores sobre ellos. Los atributos son %FOUND, %NOTFOUND,
%ISOPEN, y %ROWCOUNT.
Cursores parametrizados
ESTRUCTURAS DE CONTROL
24
`
25
Sentencia CASE
26
Utilizando la sentencia CASE
27
IF condicion1 THEN IF condicion1 THEN
Sentencia1; sentencia1;
ELSE ELSIF condicion2 THEN
IF condicion2 THEN sentencia2;
Sentencia2; ELSIF condicion3 THEN
ELSE sentencia3;
IF condicion3 THEN END IF;
Sentencia3;
END IF;
END IF;
END IF;
CONTROL ITERATIVO
28
Bucle_basico.sql
29
EXIT
LOOP
END IF;
END LOOP;
--El control continua aqu.
EXIT-WHEN
30
La sentencia EXIT-WHEN permite al loop completar condicionalmente. When la
se encuentra la sentencia EXIT, la condicin en la clusula WHEN se evala. Si
la condicin es TRUE, el loop se completa y el control pasa a la siguiente
sentencia despus del loop. Ejemplo:
LOOP
FETCH c1 INTO
EXIT WHEN c1%NOTFOUND; --Sale del loop si la condicin es TRUE
END LOOP;
Close c1;
Ex_when.sql
Ejemplo:
31
Uso_while_loop.sql
32
33
FOR i in reverse 1..12 loop
End loop;
34
MANEJO DE ERRORES
35
Excepciones predefinidas
36
Nombre Excepcin Accionada cuando SQLCODE
PL/SQL permite al usuario definir sus propias excepciones, las que debern ser
declaradas y disparadas explcitamente utilizando otros comandos del lenguaje.
Declaracin
Reglas de Alcance
Una excepcin no puede ser declarada dos veces en un mismo bloque. Tal
como las variables, una excepcin declarada en un bloque es local a ese bloque
y global a todos los sub-bloques que comprende.
La sentencia "RAISE"
38
Finalmente, cabe destacar la existencia de la excepcin OTHERS, que simboliza
cualquier condicin de excepcin que no ha sido declarada. Se utiliza
comnmente al final del bloque de excepciones para absorber cualquier tipo de
error que no ha sido previsto por el programador. En ese caso, es comn
observar la sentencia ROLLBACK en el grupo de sentencias de la excepcin o
39
alguna de las funciones SQLCODE SQLERRM, que se detallan en el prximo
punto.
Sqlcode siempre retornar el nmero del error de Oracle y un "0" (cero) en caso
exitoso al ejecutarse una sentencia SQL.
40
41
42
43
44
45
46
47
48
49