1. 2. Escribiendo instrucciones
El lenguaje PL/SQL
1
Objetivos
• Describir la relevancia de la sección de
ejecución
• Emplear identificadores correctamente
• Escribir instrucciones en la sección de
ejecución
• Describir las reglas de los bloques anidados
• Ejecutar y comprobar un bloque PL/SQL
• Empleo de convenciones de código
2
1
2. Sintaxis y guía de uso
• Las instrucciones pueden tener su continuación a
través de varias líneas de código, no ocurriendo lo
mismo con las palabras reservadas del lenguaje
• Las unidades léxicas se pueden clasificar como:
– Delimitadores
– Identificadores
– Literales
– Comentarios
3
Delimitadores
4
2
3. Identificadores
• Pueden contener hasta 30 caracteres
• Deben comenzar con un carácter alfanumérico
• Pueden contener números, signos de dólar, guión bajo
y símbolos de número
– Identificadores válidos: money$$$tree, SN##,
try_again_
• No pueden contener caracteres tales como guiones,
barras, y espacios
– Identificadores no válidos: dots&dashes, debit-
amount, on/off, user id
5
Identificadores
• No deberían tener el mismo nombre que el de una
columna de una tabla de la base de datos
– Si los identificadores de PL/SQL presentes en una
sentencia SQL tienen el mismo nombre que una columna,
entonces Oracle asume que es la columna la que está
siendo referenciada.
• No deberían tener el mismo nombre que las palabras
reservadas
– Las palabras reservado no se pueden utilizar como
identificadores a menos que se encierren entre dobles
comillas: “SELECT”
6
3
4. Sintaxis y guía de uso
• Literales
– Los literales de cadena de caracteres y fecha deben estar
encerrados entre comillas simples
– Los números pueden expresarse como valores simples o en
notación científica (-32.5, 2E5)
• Una barra (/) ejecuta el bloque PL/SQL en un fichero
guión o en algunos entornos tales como iSQL*PLUS.
7
Comentarios
• Los comentarios de única línea se implementan
usando el doble guión (--)
• Para emplear comentarios de varias líneas, éstas se
colocan entre /* y */.
8
4
5. Funciones SQL en PL/SQL
• Disponibles
– Funciones numéricas (ABS, STR, TRUNC, MOD, …)
– Funciones de caracteres (CHR, UPPER, LOWER,
LENGTH, …)
– Funciones de conversión de tipos (TO_CHAR, TO_DATE,
TO_NUMBER)
– Funciones de fecha (LAST_DAY, NEXT_DAY, …)
– Funciones de marca de tiempo
– GREATEST, LEAST
– Funciones varias
9
Funciones SQL en PL/SQL
• No Disponibles
– DECODE
– Funciones agregadas (AVG, MIN, MAX, COUNT, SUM,
STDDEV, VARIANCE, …)
• Las funciones agregadas se aplican a grupos de registros en una
tabla y por tanto sólo están disponibles como instrucciones SQL
dentro de un bloque PL/SQL.
10
5
6. Funciones SQL en PL/SQL: Ejemplos
• Construcción de la lista de correo para una compañía
– CHR es una función SQL que convierte un código ASCII
en su carácter correspondiente; 10 es el código del salto de
línea
• Convertir el nombre de un empleado a minúsculas
11
Conversión de tipos de datos
• PL/SQL intenta convertir los tipos de datos de manera
dinámica si estos se mezclan en una instrucción
• Dentro de una expresión deberíamos asegurarnos de que todos
los tipos de datos son iguales.
• Funciones de conversión:
– TO_CHAR
– TO_DATE
– TO_NUMBER
12
6
7. Conversión de tipos de datos
• Almacenar una cadena de caracteres que representa una fecha
en una variable declarada como DATE provoca un error de
sintaxis
• Para corregir el error, hay que emplear la función de
conversión TO_DATE
13
Bloques anidados y alcance de variables
• Los bloques PL/SQL se pueden anidar en cualquier
punto en el que se pueda introducir una instrucción
ejecutable
• Un bloque anidado se convierte en una instrucción
• La sección de manejo de errores pueden contener
también bloques anidados
• El alcance de un identificador se define como la
región de dicha unidad de programación (bloque,
subprograma, o paquete) en la cual dicho
identificador puede ser referenciado
14
7
8. Bloques anidados y alcance de variables
• Ejemplo:
15
Alcance de un identificador
• Un identificador es visible en aquellas regiones en las
que se puede referenciar dicho identificador sin tener
que cualificarlo:
– Un bloque puede mirar hacia el bloque que lo engloba
– Un bloque no puede mirar dentro de los bloques que
engloba variable
16
8
9. Cualificar un identificador
• El cualificador puede ser la etiqueta del bloque que
engloba a otro bloque
• Se puede cualificar el identificador empleando como
prefijo la etiqueta del bloque
17
Determinar el alcance de una variable
18
9
10. Operadores en PL/SQL
• Lógicos
• Aritméticos
• Concatenación
• Paréntesis
• Operador exponencial (**)
19
Operadores en PL/SQL
• Incrementar un contador en un lazo
• Establecer el valor de una variable booleana
• Validar si un número de empleado contiene un valor
20
10
11. Operadores en PL/SQL
• Las comparaciones que involucran valores nulos
siempren dan como resultado NULL
• Si se aplica el operador NOT a un nulo el resultado es
NULL
• En sentencias de control condicional, si la condición
es NULL, entonces la secuencia de instrucciones
asociada no se ejecuta
21
Consejos de programación
• Documentar el código con comentarios
• Utilización de mayúsculas (instrucciones SQL,
palabras clave PL/SQL, tipos de datos) y minúsculas
(identificadores y parámetros, tablas y columnas de
las bases de datos)
• Empleo de convenciones de notación para
identificadores y otros objetos
• Mejora de la lectura mediante el uso del sangrado
22
11