SlideShare una empresa de Scribd logo
1. Tutorial PL/SQL.
1.1. Introducción.
SQL es un lenguaje de consulta para los sistemas de bases de datos relacionales,
pero que no posee la potencia de los lenguajes de programación. No permite el
uso de variables, estructuras de control de flujo, bucles, entre otros; además
elementos característicos de la programación. No es de extrañar, SQL es un
lenguaje de consulta, no un lenguaje de programación.
Sin embargo, SQL es la herramienta ideal para trabajar con bases de datos.
Cuando se desea realizar una aplicación completa para el manejo de una base de
datos relacional, resulta necesario utilizar alguna herramienta que soporte la
capacidad de consulta del SQL y la versatilidad de los lenguajes de programación
tradicionales. PL/SQL es el lenguaje de programación que proporciona Oracle
para extender el SQL estándar con otro tipo de instrucciones y elementos
propios de los lenguajes de programación.
Para abordar el presente tutorial con mínimo de garantías es necesario conocer
previamente SQL.
Cuando se desea realizar una aplicación completa para el manejo de una base de
datos relacional, resulta necesario utilizar alguna herramienta que soporte la
capacidad de consulta del SQL y la versatilidad de los lenguajes de programación
tradicionales. PL/SQL es el lenguaje de programación que proporciona Oracle
para extender el SQL estándar con otro tipo de instrucciones.
¿Que vamos a necesitar?
Para poder seguir este tutorial correctamente necesitaremos tener los siguientes
elementos:
• Una instancia de ORACLE 8i o superior funcionando correctamente.
• Herramientas cliente de ORACLE, en particular SQL*Plus para poder
ejecutar los ejemplo.
• Haber configurado correctamente una conexión a ORACLE.
1
1.2. Programación PL/SQL.
Con PL/SQL vamos a poder programar las unidades de programa de la base de
datos ORACLE, están son:
• Procedimientos almacenados
• Funciones
• Triggers
• Scripts
Pero además PL/SQL nos permite realizar programas sobre las siguientes
herramientas de ORACLE:
• Oracle Forms
• Oracle Reports
• Oracle Graphics
• Oracle Aplication Server
2
2. Fundamentos de PL/SQL.
2.1. Primeros pasos con PL/SQL.
Para programar en PL/SQL es necesario conocer sus fundamentos.
Como introducción vamos a ver algunos elementos y conceptos básicos del
lenguaje.
• PL/SQL no es CASE-SENSITIVE, es decir, no diferencia mayúsculas de
minúsculas como otros lenguajes de programación como C o Java. Sin
embargo debemos recordar que ORACLE es CASE-SENSITIVE en la
búsquedas de texto.
• Una linea en PL/SQL contiene grupos de caracteres conocidos como
UNIDADES LEXICAS, que pueden ser clasificadas como:
• DELIMITADORES
• IDENTIFICADORES
• LITERALES
• COMENTARIOS
• EXPRESIONES
• DELIMITADOR: Es un símbolo simple o compuesto que tiene una función
especial en PL/SQL. Estos pueden ser:
• Operadores Aritméticos
• Operadores Lógicos
• Operadores Relacionales
• IDENTIFICADOR: Son empleados para nombrar objetos de programas en
PL/SQL así como a unidades dentro del mismo, éstas unidades y objetos
incluyen:
• Constantes
• Cursores
• Variables
• Subprogramas
• Excepciones
• Paquetes
3
• LITERAL: Es un valor de tipo numérico, caracter, cadena o lógico no
representado por un identificador (es un valor explícito).
• COMENTARIO: Es una aclaración que el programador incluye en el código.
Son soportados 2 estilos de comentarios, el de línea simple y de multilínea,
para lo cual son empleados ciertos caracteres especiales como son:
-- Linea simple
/*
Conjunto de Lineas
*/
4
2.2. Tipos de datos en PL/SQL.
Cada constante y variable tiene un tipo de dato en el cual se especifica el
formato de almacenamiento, restricciones y rango de valores válidos.
PL/SQL proporciona una variedad predefinida de tipos de datos . Casi todos los
tipos de datos manejados por PL/SQL son similares a los soportados por SQL. A
continuación se muestran los TIPOS de DATOS más comunes:
• NUMBER (Numérico): Almacena números enteros o de punto flotante,
virtualmente de cualquier longitud, aunque puede ser especificada la
precisión (Número de dígitos) y la escala que es la que determina el
número de decimales.
saldo NUMBER(16,2);
/* Indica que puede almacenar un valor numérico de 16
posiciones, 2 de ellas decimales. Es decir, 14 enteros
y dos decimales */
•CHAR (Caracter): Almacena datos de tipo caracter con una longitud máxima de
32767 y cuyo valor de longitud por default es 1
-- CHAR [(longitud_maxima)]
nombre CHAR(20);
/* Indica que puede almacenar valores alfanuméricos de 20
posiciones */
•VARCHAR2 (Caracter de longitud variable): Almacena datos de tipo caracter
empleando sólo la cantidad necesaria aún cuando la longitud máxima sea mayor.
-- VARCHAR2 (longitud_maxima)
nombre VARCHAR2(20);
/* Indica que puede almacenar valores alfanuméricos de hasta 20
posicones */
/* Cuando la longitud de los datos sea menor de 20 no se
rellena con blancos */
5
•BOOLEAN (lógico): Se emplea para almacenar valores TRUE o FALSE.
hay_error BOOLEAN;
•DATE (Fecha): Almacena datos de tipo fecha. Las fechas se almacenan
internamente como datos numéricos, por lo que es posible realizar operaciones
aritméticas con ellas.
• Atributos de tipo. Un atributo de tipo PL/SQL es un modificador que puede
ser usado para obtener información de un objeto de la base de datos. El
atributo %TYPE permite conocer el tipo de una variable, constante o
campo de la base de datos. El atributo %ROWTYPE permite obtener los
tipos de todos los campos de una tabla de la base de datos, de una vista o
de un cursor.
• PL/SQL también permite la creación de tipos personalizados (registros) y
colecciones(tablas de PL/SQL), que veremos en sus apartados
correspondientes.
Existen por supuesto más tipos de datos, la siguiente tabla los muestra:
6
Tipo de dato /
Sintáxis
Oracle 8i Oracle 9i Descripción
dec(p, e) La precisión
máxima es de 38
dígitos.
La precisión máxima es
de 38 dígitos.
Donde p es la
precisión y e la
escala.
Por ejemplo:
dec(3,1) es un
número que
tiene 2 dígitos
antes del
decimal y un
dígito después
del decimal.
decimal(p, e) La precisión
máxima es de 38
dígitos.
La precisión máxima es
de 38 dígitos.
Donde p es la
precisión y e la
escala.
Por ejemplo:
decimal(3,1) es
un número que
tiene 2 dígitos
antes del
decimal y un
dígito después
del decimal.
double
precision
float
int
integer
7
Tipo de dato /
Sintáxis
Oracle 8i Oracle 9i Descripción
numeric(p, e) La precisión
máxima es de 38
dígitos.
La precisión máxima es
de 38 dígitos.
Donde p es la
precisión y e la
escala. Por
ejemplo:
numeric(7,2) es
un número que
tiene 5 dígitos
antes del
decimal y 2
dígitos después
del decimal.
number(p, e) La precisión
máxima es de 38
dígitos.
La precisión máxima es
de 38 dígitos.
Donde p es la
precisión y e la
escala.
Por ejemplo:
number(7,2) es
un número que
tiene 5 dígitos
antes del
decimal y 2
dígitos después
del decimal.
real
smallint
char (tamaño) Hasta 32767 bytes
en PLSQL.
Hasta 2000 bytes
en Oracle 8i.
Hasta 32767 bytes en
PLSQL.
Hasta 2000 bytes en
Oracle 9i.
Donde tamaño
es el número de
caracteres a
almacenar. Son
cadenas de
ancho fijo. Se
rellena con
espacios.
varchar2
(tamaño)
Hasta 32767 bytes
en PLSQL.
Hasta 32767 bytes en
PLSQL.
Donde tamaño
es el número de
caracteres a
8
Tipo de dato /
Sintáxis
Oracle 8i Oracle 9i Descripción
Hasta 4000 bytes
en Oracle 8i.
Hasta 4000 bytes en
Oracle 9i.
almacenar. Son
cadenas de
ancho variable.
long Hasta 2 gigabytes. Hasta 2 gigabytes. Son cadenas de
ancho variable.
raw Hasta 32767 bytes
en PLSQL.
Hasta 2000 bytes
en Oracle 8i.
Hasta 32767 bytes en
PLSQL.
Hasta 2000 bytes en
Oracle 9i.
Son cadenas
binarias de
ancho variable.
long raw Hasta 2 gigabytes. Hasta 2 gigabytes. Son cadenas
binarias de
ancho variable.
date Una fecha entre el
1 de Enero de 4712
A.C. y el 31 de
Diciembre de 9999
D.C.
Una fecha entre el 1 de
Enero de 4712 A.C. y el
31 de Diciembre de
9999 D.C.
timestamp
(fractional
seconds
precision)
No soportado por
Oracle 8i.
fractional seconds
precision debe ser un
número entre 0 y 9. (El
valor por defecto es 6)
Incluye año,
mes día, hora,
minutos y
segundos.
Por ejemplo:
timestamp(6)
timestamp
(fractional
seconds
precision) with
time zone
No soportado por
Oracle 8i.
fractional seconds
precision debe ser un
número entre 0 y 9. (El
valor por defecto es 6)
Incluye año,
mes día, hora,
minutos y
segundos; con
un valor de
desplazamiento
de zona horaria.
Por ejemplo:
timestamp(5)
with time zone
9
Tipo de dato /
Sintáxis
Oracle 8i Oracle 9i Descripción
timestamp
(fractional
seconds
precision) with
local time
zone
No soportado por
Oracle 8i.
fractional seconds
precision debe ser un
número entre 0 y 9. (El
valor por defecto es 6)
Incluye año,
mes día, hora,
minutos y
segundos; con
una zona
horaria
expresada como
la zona horaria
actual.
Por ejemplo:
timestamp(4)
with local time
zone
interval year
(year
precision) to
month
No soportado por
Oracle 8i.
year precision debe
ser un número entre 0 y
9. (El valor por defecto
es 2)
Período de
tiempo
almacenado en
años y meses.
Por ejemplo:
interval year(4)
to month
interval day
(day precision)
to second
(fractional
seconds
precision)
No soportado por
Oracle 8i.
day precision debe ser
un número entre 0 y 9.
(El valor por defecto es
2)
fractional seconds
precision debe ser un
número entre 0 y 9. (El
valor por defecto es 6)
Incluye año,
mes día, hora,
minutos y
segundos.
Por ejemplo:
interval day(2)
to second(6)
10
Tipo de dato /
Sintáxis
Oracle 8i Oracle 9i Descripción
rowid El formato del
campo rowid es:
BBBBBBB.RRRR.F
FFFF donde
BBBBBBB es el
bloque en el fichero
de la base de datos;
RRRR es la fila del
bloque; FFFFF es
el fichero de la
base de datos.
El formato del campo
rowid es:
BBBBBBB.RRRR.FFFFF
donde BBBBBBB es el
bloque en el fichero de
la base de datos; RRRR
es la fila del bloque;
FFFFF es el fichero de
la base de datos.
Datos binarios
de ancho fijo.
Cada registro
de la base de
datos tiene una
dirección física
o rowid.
urowid
[tamaño]
Hasta 2000 bytes. Hasta 2000 bytes. Rowid
universal.
Donde tamaño
es opcional.
boolean Válido en PLSQL,
este tipo de datos
no existe en Oracle
8i.
Válido en PLSQL, este
tipo de datos no existe
en Oracle 9i.
nchar
(tamaño)
Hasta 32767 bytes
en PLSQL. Hasta
2000 bytes en
Oracle 8i.
Hasta 32767 bytes en
PLSQL. Hasta 2000
bytes en Oracle 9i.
Donde tamaño
es el número de
caracteres a
almacenar.
Cadena NLS de
ancho fijo.
nvarchar2
(tamaño)
Hasta 32767 bytes
en PLSQL. Hasta
Hasta 32767 bytes en
PLSQL. Hasta 4000
Donde tamaño
es el número de
11
Tipo de dato /
Sintáxis
Oracle 8i Oracle 9i Descripción
4000 bytes en
Oracle 8i.
bytes en Oracle 9i. caracteres a
almacenar.
Cadena NLS de
ancho variable.
bfile Hasta 4 gigabytes. Hasta 4 gigabytes. Localizadores
de archivo
apuntan a un
objeto binario
de sólo lectura
fuera de la base
de datos.
blob Hasta 4 gigabytes. Hasta 4 gigabytes. Localizadores
LOB apuntan a
un gran objeto
binario dentro
de la base de
datos.
clob Hasta 4 gigabytes. Hasta 4 gigabytes. Localizadores
LOB apuntan a
un gran objeto
de caracteres
dentro de la
base de datos.
nclob Hasta 4 gigabytes. Hasta 4 gigabytes. Localizadores
LOB apuntan a
un gran objeto
NLS de
caracteres
dentro de la
base de datos.
12
2.3. Operadores en PL/SQL.
La siguiente tabla ilustra los operadores de PL/SQL.
Tipo de operador Operadores
Operador de asignación := (dos puntos + igual)
Operadores aritméticos + (suma)
- (resta)
* (multiplicación)
/ (división)
** (exponente)
Operadores relacionales o de
comparación
= (igual a)
<> (distinto de)
< (menor que)
> (mayor que)
>= (mayor o igual a)
<= (menor o igual a)
Operadores lógicos AND (y lógico)
NOT (negación)
OR (o lógico)
Operador de concatenación ||
13
3. Estructuras de control en PL/SQL.
3.1. Estrucuturas de control de flujo.
En PL/SQL solo disponemos de la estructura condicional IF. Su sintaxis se
muestra a continuación:
IF (expresion) THEN
-- Instrucciones
ELSIF (expresion) THEN
-- Instrucciones
ELSE
-- Instrucciones
END IF;
Un aspecto a tener en cuenta es que la instrucción condicional anidada es ELSIF
y no "ELSEIF".
Sentencia GOTO
PL/SQL dispone de la sentencia GOTO. La sentencia GOTO desvía el flujo de
ejecución a una determinada etiqueta.
En PL/SQL las etiquetas se indican del siguiente modo: << etiqueta >>
El siguiente ejemplo ilustra el uso de GOTO.
DECLARE
flag NUMBER;
BEGIN
flag :=1 ;
IF (flag = 1) THEN
GOTO paso2;
END IF;
<<paso1>>
dbms_output.put_line('Ejecucion de paso 1');
<<paso2>>
dbms_output.put_line('Ejecucion de paso 2');
14
END;
3.2. Bucles ó ciclos.
En PL/SQL tenemos a nuestra disposición los siguientes iteradores o bucles:
• LOOP
• WHILE
• FOR
El bucle LOOP, se repite tantas veces como sea necesario hasta que se fuerza su
salida con la instrucción EXIT. Su sintaxis es la siguiente:
LOOP
-- Instrucciones
IF (expresion) THEN
-- Instrucciones
EXIT;
END IF;
END LOOP;
El bucle WHILE, se repite mientras que se cumpla la expresión.
WHILE (expresion) LOOP
-- Instrucciones
END LOOP;
El bucle FOR, se repite tanta veces como le indiquemos en los identificadores
inicio y final.
FOR contador IN [REVERSE] inicio..final LOOP
-- Instrucciones
END LOOP;
En el caso de especificar REVERSE el bucle se recorre en sentido inverso.
15
3.3. Bloques PL/SQL.
Un programa de PL/SQL está compuesto por bloques. Un programa está
compuesto como mínimo de un bloque.
Los bloques de PL/SQL pueden ser de los siguientes tipos:
• Bloques anónimos
• Subprogramas
3.3.1. Estructura de un Bloque.
Los bloques PL/SQL presentan una estructura específica compuesta de tres
partes bien diferenciadas:
• La sección declarativa en donde se declaran todas las constantes y
variables que se van a utilizar en la ejecución del bloque.
• La sección de ejecución que incluye las instrucciones a ejecutar en el
bloque PL/SQL.
• La sección de excepciones en donde se definen los manejadores de errores
que soportará el bloque PL/SQL.
Cada una de las partes anteriores se delimita por una palabra reservada, de
modo que un bloque PL/SQL se puede representar como sigue:
[ declare | is | as ]
/*Parte declarativa*/
begin
/*Parte de ejecucion*/
[ exception ]
/*Parte de excepciones*/
end;
16
De las anteriores partes, únicamente la sección de ejecución es obligatoria, que
quedaría delimitada entre las cláusulas BEGIN y END. Veamos un ejemplo de
bloque PL/SQL muy genérico. Se trata de un bloque anónimos, es decir no lo
identifica ningún nombre. Los bloques anónimos identifican su parte declarativa
con la palabra reservada DECLARE.
DECLARE
/*Parte declarativa*/
nombre_variable DATE;
BEGIN
/*Parte de ejecucion
* Este código asigna el valor de la columna "nombre_columna"
* a la variable identificada por "nombre_variable"
*/
SELECT SYSDATE
INTO nombre_variable
FROM DUAL;
EXCEPTION
/*Parte de excepciones*/
WHEN OTHERS THEN
dbms_output.put_line('Se ha producido un error');
END;
3.3.2. Sección de Declaración de Variables.
En esta parte se declaran las variables que va a necesitar nuestro programa. Una
variable se declara asignándole un nombre o "identificador" seguido del tipo de
valor que puede contener. También se declaran cursores, de gran utilidad para la
consulta de datos, y excepciones definidas por el usuario. También podemos
especificar si se trata de una constante, si puede contener valor nulo y asignar
un valor inicial.
La sintaxis genérica para la declaración de constantes y variables es:
17
nombre_variable [CONSTANT] <tipo_dato> [NOT NULL][:=valor_inicial]
donde:
• tipo_dato: es el tipo de dato que va a poder almacenar la variable, este
puede ser cualquiera de los tipos soportados por ORACLE, es decir
NUMBER, DATE, CHAR, VARCHAR, VARCHAR2, BOOLEAN ... Además
para algunos tipos de datos (NUMBER y VARCHAR) podemos especificar la
longitud.
• La cláusula CONSTANT indica la definición de una constante cuyo valor no
puede ser modificado. Se debe incluir la inicialización de la constante en su
declaración.
• La cláusula NOT NULL impide que a una variable se le asigne el valor nulo,
y por tanto debe inicializarse a un valor diferente de NULL.
• Las variables que no son inicializadas toman el valor inicial NULL.
• La inicialización puede incluir cualquier expresión legal de PL/SQL, que
lógicamente debe corresponder con el tipo del identificador definido.
• Los tipos escalares incluyen los definidos en SQL más los tipos VARCHAR y
BOOLEAN. Este último puede tomar los valores TRUE, FALSE y NULL, y se
suele utilizar para almacenar el resultado de alguna operación lógica.
VARCHAR es un sinónimo de CHAR.
• También es posible definir el tipo de una variable o constante, dependiendo
del tipo de otro identificador, mediante la utilización de las cláusulas
%TYPE y %ROWTYPE. Mediante la primera opción se define una variable
o constante escalar, y con la segunda se define una variable fila, donde
identificador puede ser otra variable fila o una tabla. Habitualmente se
utiliza %TYPE para definir la variable del mismo tipo que tenga definido un
campo en una tabla de la base de datos, mientras que %ROWTYPE se
utiliza para declarar variables utilizando cursores.
Ejemplos:
18
3.3.3. Estructura de un bloque anónimo.
DECLARE
/* Se declara la variable de tipo VARCHAR2(15) identificada por v_location
y se le asigna
el valor "Granada"*/
v_location VARCHAR2(15) := ’Granada’;
/*Se declara la constante de tipo NUMBER identificada por PI
y se le asigna
el valor 3.1416*/
PI CONSTANT NUMBER := 3.1416;
/*Se declara la variable del mismo tipo que tenga el campo
nombre de la tabla tabla_empleados
identificada por v_nombre y no se le asigna ningún valor */
v_nombre tabla_empleados.nombre%TYPE;
/*Se declara la variable del tipo registro correspondiente a
un supuesto cursor, llamado
micursor, identificada por reg_datos*/
reg_datos micursor%ROWTYPE;
BEGIN
/*Parte de ejecucion*/
EXCEPTION
/*Parte de excepciones*/
END;
19
3.3.4. Estructura de un subprograma:
CREATE PROCEDURE simple_procedure IS
/* Se declara la variable de tipo VARCHAR2(15) identificada por v_location
y se le asigna el valor "Granada"*/
v_location VARCHAR2(15) := ’Granada’;
/*Se declara la constante de tipo NUMBER identificada por PI
y se le asigna
el valor 3.1416*/
PI CONSTANT NUMBER := 3.1416;
/*Se declara la variable del mismo tipo que tenga el campo
nombre de la tabla tabla_empleados
identificada por v_nombre y no se le asigna ningún valor */
v_nombre tabla_empleados.nombre%TYPE;
/*Se declara la variable del tipo registro correspondiente a
un supuesto cursor, llamado
micursor, identificada por reg_datos*/
reg_datos micursor%ROWTYPE;
BEGIN
/*Parte de ejecucion*/
EXCEPTION
/*Parte de excepciones*/
END;
20

Más contenido relacionado

PDF
Programacion en PL/SQL teoria y ejemplos
PDF
Clase11-LenguajeSQL-I-1.pdfrftyrtyrtyrtyrty
PPTX
TIPO DE DATOS EN ORACLE
PPTX
Tipos de datos de oracle
PDF
Oracle Características y tipos de datos
DOC
unidad 3 de bases de datos (1) ya arre-
PPTX
Sql server 2014 básico
PDF
Sgbd ud3 lenguaje_sql_para_examen
Programacion en PL/SQL teoria y ejemplos
Clase11-LenguajeSQL-I-1.pdfrftyrtyrtyrtyrty
TIPO DE DATOS EN ORACLE
Tipos de datos de oracle
Oracle Características y tipos de datos
unidad 3 de bases de datos (1) ya arre-
Sql server 2014 básico
Sgbd ud3 lenguaje_sql_para_examen

Similar a Tutorial_PL_SQL.pdf . (20)

PPTX
EXPO PERL UTT
PDF
103305862 t-sql
PPTX
LENGUAJE TRANSACT - SQL
PPTX
Educación para el desarrollo humano apartar de
PPTX
Introducción a la programación en R (1).pptx
DOCX
Base de datos_-_material_didactico
PDF
Abf leccion 12
PPTX
PPTX
BASE DE DATOS, TIPOS Y CARACTERÍSTICAS
PPTX
Base de datos - Clase 1
PDF
bibliotecasolibreriasenc-170322144450-1.pdf
PDF
Base de datos de la unp es facil no te compliques
DOCX
Cap. iv bdd ii
PPTX
base de datos ppPPPPPPPPPPPPPPPPPPPPPPPPPPt.pptx
PPTX
informacion sobre blog datos y sql
PDF
clase 03 - Lenguaje SQL.pdf
PDF
Manual tutorial-sql
PDF
Downloads%2 ftutorial sql%2fmanual-tutorial-sql
PPTX
SQL-BASES FUNDAMENTOS EN PROGRAMACI.pptx
EXPO PERL UTT
103305862 t-sql
LENGUAJE TRANSACT - SQL
Educación para el desarrollo humano apartar de
Introducción a la programación en R (1).pptx
Base de datos_-_material_didactico
Abf leccion 12
BASE DE DATOS, TIPOS Y CARACTERÍSTICAS
Base de datos - Clase 1
bibliotecasolibreriasenc-170322144450-1.pdf
Base de datos de la unp es facil no te compliques
Cap. iv bdd ii
base de datos ppPPPPPPPPPPPPPPPPPPPPPPPPPPt.pptx
informacion sobre blog datos y sql
clase 03 - Lenguaje SQL.pdf
Manual tutorial-sql
Downloads%2 ftutorial sql%2fmanual-tutorial-sql
SQL-BASES FUNDAMENTOS EN PROGRAMACI.pptx
Publicidad

Más de RAMIROENRIQUERAMALLO (6)

PDF
Conceptos_basicos_de_programacion_con_PL.pdf
PPT
Oracle_PLSQL (1).ppt .
PPTX
PL_SQL_1.pptx fvbxcfbhxdfgh .
PPT
Oracle_PLSQL.ppt ..
PDF
Actividad 1 - Power Point.pdf ghbbbbbbbbsdhfsdf
PDF
Tutorial_PL_SQL (1).pdf .
Conceptos_basicos_de_programacion_con_PL.pdf
Oracle_PLSQL (1).ppt .
PL_SQL_1.pptx fvbxcfbhxdfgh .
Oracle_PLSQL.ppt ..
Actividad 1 - Power Point.pdf ghbbbbbbbbsdhfsdf
Tutorial_PL_SQL (1).pdf .
Publicidad

Último (20)

DOC
informacion acerca de la crianza tecnificada de cerdos
PPTX
Software para la educación instituciones superiores
PDF
Módulo-de Alcance-proyectos - Definición.pdf
PPTX
Presentacion_Palcoma_Alta energia solar eolica
PDF
Informe Estudio Final Apagon del 25 de febrero
PDF
Prevención de estrés laboral y Calidad de sueño - LA PROTECTORA.pdf
PDF
LIBRO UNIVERSITARIO SISTEMAS PRODUCTIVOS BN.pdf
PDF
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
PPTX
Presentación - Taller interpretación iso 9001-Solutions consulting learning.pptx
PPTX
Manual ISO9001_2015_IATF_16949_2016.pptx
PPTX
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
PPTX
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
PDF
Pensamiento Politico Siglo XXI Peru y Mundo.pdf
PDF
LIBRO UNIVERSITARIO INTELIGENCIA ALGORITMICA BN.pdf
PDF
Durabilidad del concreto en zonas costeras
PDF
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
PDF
GUÍA PARA LA IMPLEMENTACIÓN DEL PLAN PARA LA REDUCCIÓN DEL RIESGO DE DESASTRES
PDF
Copia de Presentación Propuesta de Marketing Corporativo Blanco y Negro.pdf
PPTX
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
PPT
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL
informacion acerca de la crianza tecnificada de cerdos
Software para la educación instituciones superiores
Módulo-de Alcance-proyectos - Definición.pdf
Presentacion_Palcoma_Alta energia solar eolica
Informe Estudio Final Apagon del 25 de febrero
Prevención de estrés laboral y Calidad de sueño - LA PROTECTORA.pdf
LIBRO UNIVERSITARIO SISTEMAS PRODUCTIVOS BN.pdf
Matriz_Seguimiento_Estu_Consult_2024_ACT.pdf
Presentación - Taller interpretación iso 9001-Solutions consulting learning.pptx
Manual ISO9001_2015_IATF_16949_2016.pptx
MODULO 2. METODOLOGIAS PARA ANALISIS DE RIESGOS 2da Parte.pptx
1 CONTAMINACION AMBIENTAL EN EL PLANETA.pptx
Pensamiento Politico Siglo XXI Peru y Mundo.pdf
LIBRO UNIVERSITARIO INTELIGENCIA ALGORITMICA BN.pdf
Durabilidad del concreto en zonas costeras
Sugerencias Didacticas 2023_Diseño de Estructuras Metalicas_digital.pdf
GUÍA PARA LA IMPLEMENTACIÓN DEL PLAN PARA LA REDUCCIÓN DEL RIESGO DE DESASTRES
Copia de Presentación Propuesta de Marketing Corporativo Blanco y Negro.pdf
MARITIMO Y LESGILACION DEL MACO TRANSPORTE
PRIMEROS AUXILIOS EN EL SECTOR EMPRESARIAL

Tutorial_PL_SQL.pdf .

  • 1. 1. Tutorial PL/SQL. 1.1. Introducción. SQL es un lenguaje de consulta para los sistemas de bases de datos relacionales, pero que no posee la potencia de los lenguajes de programación. No permite el uso de variables, estructuras de control de flujo, bucles, entre otros; además elementos característicos de la programación. No es de extrañar, SQL es un lenguaje de consulta, no un lenguaje de programación. Sin embargo, SQL es la herramienta ideal para trabajar con bases de datos. Cuando se desea realizar una aplicación completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programación tradicionales. PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones y elementos propios de los lenguajes de programación. Para abordar el presente tutorial con mínimo de garantías es necesario conocer previamente SQL. Cuando se desea realizar una aplicación completa para el manejo de una base de datos relacional, resulta necesario utilizar alguna herramienta que soporte la capacidad de consulta del SQL y la versatilidad de los lenguajes de programación tradicionales. PL/SQL es el lenguaje de programación que proporciona Oracle para extender el SQL estándar con otro tipo de instrucciones. ¿Que vamos a necesitar? Para poder seguir este tutorial correctamente necesitaremos tener los siguientes elementos: • Una instancia de ORACLE 8i o superior funcionando correctamente. • Herramientas cliente de ORACLE, en particular SQL*Plus para poder ejecutar los ejemplo. • Haber configurado correctamente una conexión a ORACLE. 1
  • 2. 1.2. Programación PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos ORACLE, están son: • Procedimientos almacenados • Funciones • Triggers • Scripts Pero además PL/SQL nos permite realizar programas sobre las siguientes herramientas de ORACLE: • Oracle Forms • Oracle Reports • Oracle Graphics • Oracle Aplication Server 2
  • 3. 2. Fundamentos de PL/SQL. 2.1. Primeros pasos con PL/SQL. Para programar en PL/SQL es necesario conocer sus fundamentos. Como introducción vamos a ver algunos elementos y conceptos básicos del lenguaje. • PL/SQL no es CASE-SENSITIVE, es decir, no diferencia mayúsculas de minúsculas como otros lenguajes de programación como C o Java. Sin embargo debemos recordar que ORACLE es CASE-SENSITIVE en la búsquedas de texto. • Una linea en PL/SQL contiene grupos de caracteres conocidos como UNIDADES LEXICAS, que pueden ser clasificadas como: • DELIMITADORES • IDENTIFICADORES • LITERALES • COMENTARIOS • EXPRESIONES • DELIMITADOR: Es un símbolo simple o compuesto que tiene una función especial en PL/SQL. Estos pueden ser: • Operadores Aritméticos • Operadores Lógicos • Operadores Relacionales • IDENTIFICADOR: Son empleados para nombrar objetos de programas en PL/SQL así como a unidades dentro del mismo, éstas unidades y objetos incluyen: • Constantes • Cursores • Variables • Subprogramas • Excepciones • Paquetes 3
  • 4. • LITERAL: Es un valor de tipo numérico, caracter, cadena o lógico no representado por un identificador (es un valor explícito). • COMENTARIO: Es una aclaración que el programador incluye en el código. Son soportados 2 estilos de comentarios, el de línea simple y de multilínea, para lo cual son empleados ciertos caracteres especiales como son: -- Linea simple /* Conjunto de Lineas */ 4
  • 5. 2.2. Tipos de datos en PL/SQL. Cada constante y variable tiene un tipo de dato en el cual se especifica el formato de almacenamiento, restricciones y rango de valores válidos. PL/SQL proporciona una variedad predefinida de tipos de datos . Casi todos los tipos de datos manejados por PL/SQL son similares a los soportados por SQL. A continuación se muestran los TIPOS de DATOS más comunes: • NUMBER (Numérico): Almacena números enteros o de punto flotante, virtualmente de cualquier longitud, aunque puede ser especificada la precisión (Número de dígitos) y la escala que es la que determina el número de decimales. saldo NUMBER(16,2); /* Indica que puede almacenar un valor numérico de 16 posiciones, 2 de ellas decimales. Es decir, 14 enteros y dos decimales */ •CHAR (Caracter): Almacena datos de tipo caracter con una longitud máxima de 32767 y cuyo valor de longitud por default es 1 -- CHAR [(longitud_maxima)] nombre CHAR(20); /* Indica que puede almacenar valores alfanuméricos de 20 posiciones */ •VARCHAR2 (Caracter de longitud variable): Almacena datos de tipo caracter empleando sólo la cantidad necesaria aún cuando la longitud máxima sea mayor. -- VARCHAR2 (longitud_maxima) nombre VARCHAR2(20); /* Indica que puede almacenar valores alfanuméricos de hasta 20 posicones */ /* Cuando la longitud de los datos sea menor de 20 no se rellena con blancos */ 5
  • 6. •BOOLEAN (lógico): Se emplea para almacenar valores TRUE o FALSE. hay_error BOOLEAN; •DATE (Fecha): Almacena datos de tipo fecha. Las fechas se almacenan internamente como datos numéricos, por lo que es posible realizar operaciones aritméticas con ellas. • Atributos de tipo. Un atributo de tipo PL/SQL es un modificador que puede ser usado para obtener información de un objeto de la base de datos. El atributo %TYPE permite conocer el tipo de una variable, constante o campo de la base de datos. El atributo %ROWTYPE permite obtener los tipos de todos los campos de una tabla de la base de datos, de una vista o de un cursor. • PL/SQL también permite la creación de tipos personalizados (registros) y colecciones(tablas de PL/SQL), que veremos en sus apartados correspondientes. Existen por supuesto más tipos de datos, la siguiente tabla los muestra: 6
  • 7. Tipo de dato / Sintáxis Oracle 8i Oracle 9i Descripción dec(p, e) La precisión máxima es de 38 dígitos. La precisión máxima es de 38 dígitos. Donde p es la precisión y e la escala. Por ejemplo: dec(3,1) es un número que tiene 2 dígitos antes del decimal y un dígito después del decimal. decimal(p, e) La precisión máxima es de 38 dígitos. La precisión máxima es de 38 dígitos. Donde p es la precisión y e la escala. Por ejemplo: decimal(3,1) es un número que tiene 2 dígitos antes del decimal y un dígito después del decimal. double precision float int integer 7
  • 8. Tipo de dato / Sintáxis Oracle 8i Oracle 9i Descripción numeric(p, e) La precisión máxima es de 38 dígitos. La precisión máxima es de 38 dígitos. Donde p es la precisión y e la escala. Por ejemplo: numeric(7,2) es un número que tiene 5 dígitos antes del decimal y 2 dígitos después del decimal. number(p, e) La precisión máxima es de 38 dígitos. La precisión máxima es de 38 dígitos. Donde p es la precisión y e la escala. Por ejemplo: number(7,2) es un número que tiene 5 dígitos antes del decimal y 2 dígitos después del decimal. real smallint char (tamaño) Hasta 32767 bytes en PLSQL. Hasta 2000 bytes en Oracle 8i. Hasta 32767 bytes en PLSQL. Hasta 2000 bytes en Oracle 9i. Donde tamaño es el número de caracteres a almacenar. Son cadenas de ancho fijo. Se rellena con espacios. varchar2 (tamaño) Hasta 32767 bytes en PLSQL. Hasta 32767 bytes en PLSQL. Donde tamaño es el número de caracteres a 8
  • 9. Tipo de dato / Sintáxis Oracle 8i Oracle 9i Descripción Hasta 4000 bytes en Oracle 8i. Hasta 4000 bytes en Oracle 9i. almacenar. Son cadenas de ancho variable. long Hasta 2 gigabytes. Hasta 2 gigabytes. Son cadenas de ancho variable. raw Hasta 32767 bytes en PLSQL. Hasta 2000 bytes en Oracle 8i. Hasta 32767 bytes en PLSQL. Hasta 2000 bytes en Oracle 9i. Son cadenas binarias de ancho variable. long raw Hasta 2 gigabytes. Hasta 2 gigabytes. Son cadenas binarias de ancho variable. date Una fecha entre el 1 de Enero de 4712 A.C. y el 31 de Diciembre de 9999 D.C. Una fecha entre el 1 de Enero de 4712 A.C. y el 31 de Diciembre de 9999 D.C. timestamp (fractional seconds precision) No soportado por Oracle 8i. fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6) Incluye año, mes día, hora, minutos y segundos. Por ejemplo: timestamp(6) timestamp (fractional seconds precision) with time zone No soportado por Oracle 8i. fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6) Incluye año, mes día, hora, minutos y segundos; con un valor de desplazamiento de zona horaria. Por ejemplo: timestamp(5) with time zone 9
  • 10. Tipo de dato / Sintáxis Oracle 8i Oracle 9i Descripción timestamp (fractional seconds precision) with local time zone No soportado por Oracle 8i. fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6) Incluye año, mes día, hora, minutos y segundos; con una zona horaria expresada como la zona horaria actual. Por ejemplo: timestamp(4) with local time zone interval year (year precision) to month No soportado por Oracle 8i. year precision debe ser un número entre 0 y 9. (El valor por defecto es 2) Período de tiempo almacenado en años y meses. Por ejemplo: interval year(4) to month interval day (day precision) to second (fractional seconds precision) No soportado por Oracle 8i. day precision debe ser un número entre 0 y 9. (El valor por defecto es 2) fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6) Incluye año, mes día, hora, minutos y segundos. Por ejemplo: interval day(2) to second(6) 10
  • 11. Tipo de dato / Sintáxis Oracle 8i Oracle 9i Descripción rowid El formato del campo rowid es: BBBBBBB.RRRR.F FFFF donde BBBBBBB es el bloque en el fichero de la base de datos; RRRR es la fila del bloque; FFFFF es el fichero de la base de datos. El formato del campo rowid es: BBBBBBB.RRRR.FFFFF donde BBBBBBB es el bloque en el fichero de la base de datos; RRRR es la fila del bloque; FFFFF es el fichero de la base de datos. Datos binarios de ancho fijo. Cada registro de la base de datos tiene una dirección física o rowid. urowid [tamaño] Hasta 2000 bytes. Hasta 2000 bytes. Rowid universal. Donde tamaño es opcional. boolean Válido en PLSQL, este tipo de datos no existe en Oracle 8i. Válido en PLSQL, este tipo de datos no existe en Oracle 9i. nchar (tamaño) Hasta 32767 bytes en PLSQL. Hasta 2000 bytes en Oracle 8i. Hasta 32767 bytes en PLSQL. Hasta 2000 bytes en Oracle 9i. Donde tamaño es el número de caracteres a almacenar. Cadena NLS de ancho fijo. nvarchar2 (tamaño) Hasta 32767 bytes en PLSQL. Hasta Hasta 32767 bytes en PLSQL. Hasta 4000 Donde tamaño es el número de 11
  • 12. Tipo de dato / Sintáxis Oracle 8i Oracle 9i Descripción 4000 bytes en Oracle 8i. bytes en Oracle 9i. caracteres a almacenar. Cadena NLS de ancho variable. bfile Hasta 4 gigabytes. Hasta 4 gigabytes. Localizadores de archivo apuntan a un objeto binario de sólo lectura fuera de la base de datos. blob Hasta 4 gigabytes. Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto binario dentro de la base de datos. clob Hasta 4 gigabytes. Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto de caracteres dentro de la base de datos. nclob Hasta 4 gigabytes. Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto NLS de caracteres dentro de la base de datos. 12
  • 13. 2.3. Operadores en PL/SQL. La siguiente tabla ilustra los operadores de PL/SQL. Tipo de operador Operadores Operador de asignación := (dos puntos + igual) Operadores aritméticos + (suma) - (resta) * (multiplicación) / (división) ** (exponente) Operadores relacionales o de comparación = (igual a) <> (distinto de) < (menor que) > (mayor que) >= (mayor o igual a) <= (menor o igual a) Operadores lógicos AND (y lógico) NOT (negación) OR (o lógico) Operador de concatenación || 13
  • 14. 3. Estructuras de control en PL/SQL. 3.1. Estrucuturas de control de flujo. En PL/SQL solo disponemos de la estructura condicional IF. Su sintaxis se muestra a continuación: IF (expresion) THEN -- Instrucciones ELSIF (expresion) THEN -- Instrucciones ELSE -- Instrucciones END IF; Un aspecto a tener en cuenta es que la instrucción condicional anidada es ELSIF y no "ELSEIF". Sentencia GOTO PL/SQL dispone de la sentencia GOTO. La sentencia GOTO desvía el flujo de ejecución a una determinada etiqueta. En PL/SQL las etiquetas se indican del siguiente modo: << etiqueta >> El siguiente ejemplo ilustra el uso de GOTO. DECLARE flag NUMBER; BEGIN flag :=1 ; IF (flag = 1) THEN GOTO paso2; END IF; <<paso1>> dbms_output.put_line('Ejecucion de paso 1'); <<paso2>> dbms_output.put_line('Ejecucion de paso 2'); 14
  • 15. END; 3.2. Bucles ó ciclos. En PL/SQL tenemos a nuestra disposición los siguientes iteradores o bucles: • LOOP • WHILE • FOR El bucle LOOP, se repite tantas veces como sea necesario hasta que se fuerza su salida con la instrucción EXIT. Su sintaxis es la siguiente: LOOP -- Instrucciones IF (expresion) THEN -- Instrucciones EXIT; END IF; END LOOP; El bucle WHILE, se repite mientras que se cumpla la expresión. WHILE (expresion) LOOP -- Instrucciones END LOOP; El bucle FOR, se repite tanta veces como le indiquemos en los identificadores inicio y final. FOR contador IN [REVERSE] inicio..final LOOP -- Instrucciones END LOOP; En el caso de especificar REVERSE el bucle se recorre en sentido inverso. 15
  • 16. 3.3. Bloques PL/SQL. Un programa de PL/SQL está compuesto por bloques. Un programa está compuesto como mínimo de un bloque. Los bloques de PL/SQL pueden ser de los siguientes tipos: • Bloques anónimos • Subprogramas 3.3.1. Estructura de un Bloque. Los bloques PL/SQL presentan una estructura específica compuesta de tres partes bien diferenciadas: • La sección declarativa en donde se declaran todas las constantes y variables que se van a utilizar en la ejecución del bloque. • La sección de ejecución que incluye las instrucciones a ejecutar en el bloque PL/SQL. • La sección de excepciones en donde se definen los manejadores de errores que soportará el bloque PL/SQL. Cada una de las partes anteriores se delimita por una palabra reservada, de modo que un bloque PL/SQL se puede representar como sigue: [ declare | is | as ] /*Parte declarativa*/ begin /*Parte de ejecucion*/ [ exception ] /*Parte de excepciones*/ end; 16
  • 17. De las anteriores partes, únicamente la sección de ejecución es obligatoria, que quedaría delimitada entre las cláusulas BEGIN y END. Veamos un ejemplo de bloque PL/SQL muy genérico. Se trata de un bloque anónimos, es decir no lo identifica ningún nombre. Los bloques anónimos identifican su parte declarativa con la palabra reservada DECLARE. DECLARE /*Parte declarativa*/ nombre_variable DATE; BEGIN /*Parte de ejecucion * Este código asigna el valor de la columna "nombre_columna" * a la variable identificada por "nombre_variable" */ SELECT SYSDATE INTO nombre_variable FROM DUAL; EXCEPTION /*Parte de excepciones*/ WHEN OTHERS THEN dbms_output.put_line('Se ha producido un error'); END; 3.3.2. Sección de Declaración de Variables. En esta parte se declaran las variables que va a necesitar nuestro programa. Una variable se declara asignándole un nombre o "identificador" seguido del tipo de valor que puede contener. También se declaran cursores, de gran utilidad para la consulta de datos, y excepciones definidas por el usuario. También podemos especificar si se trata de una constante, si puede contener valor nulo y asignar un valor inicial. La sintaxis genérica para la declaración de constantes y variables es: 17
  • 18. nombre_variable [CONSTANT] <tipo_dato> [NOT NULL][:=valor_inicial] donde: • tipo_dato: es el tipo de dato que va a poder almacenar la variable, este puede ser cualquiera de los tipos soportados por ORACLE, es decir NUMBER, DATE, CHAR, VARCHAR, VARCHAR2, BOOLEAN ... Además para algunos tipos de datos (NUMBER y VARCHAR) podemos especificar la longitud. • La cláusula CONSTANT indica la definición de una constante cuyo valor no puede ser modificado. Se debe incluir la inicialización de la constante en su declaración. • La cláusula NOT NULL impide que a una variable se le asigne el valor nulo, y por tanto debe inicializarse a un valor diferente de NULL. • Las variables que no son inicializadas toman el valor inicial NULL. • La inicialización puede incluir cualquier expresión legal de PL/SQL, que lógicamente debe corresponder con el tipo del identificador definido. • Los tipos escalares incluyen los definidos en SQL más los tipos VARCHAR y BOOLEAN. Este último puede tomar los valores TRUE, FALSE y NULL, y se suele utilizar para almacenar el resultado de alguna operación lógica. VARCHAR es un sinónimo de CHAR. • También es posible definir el tipo de una variable o constante, dependiendo del tipo de otro identificador, mediante la utilización de las cláusulas %TYPE y %ROWTYPE. Mediante la primera opción se define una variable o constante escalar, y con la segunda se define una variable fila, donde identificador puede ser otra variable fila o una tabla. Habitualmente se utiliza %TYPE para definir la variable del mismo tipo que tenga definido un campo en una tabla de la base de datos, mientras que %ROWTYPE se utiliza para declarar variables utilizando cursores. Ejemplos: 18
  • 19. 3.3.3. Estructura de un bloque anónimo. DECLARE /* Se declara la variable de tipo VARCHAR2(15) identificada por v_location y se le asigna el valor "Granada"*/ v_location VARCHAR2(15) := ’Granada’; /*Se declara la constante de tipo NUMBER identificada por PI y se le asigna el valor 3.1416*/ PI CONSTANT NUMBER := 3.1416; /*Se declara la variable del mismo tipo que tenga el campo nombre de la tabla tabla_empleados identificada por v_nombre y no se le asigna ningún valor */ v_nombre tabla_empleados.nombre%TYPE; /*Se declara la variable del tipo registro correspondiente a un supuesto cursor, llamado micursor, identificada por reg_datos*/ reg_datos micursor%ROWTYPE; BEGIN /*Parte de ejecucion*/ EXCEPTION /*Parte de excepciones*/ END; 19
  • 20. 3.3.4. Estructura de un subprograma: CREATE PROCEDURE simple_procedure IS /* Se declara la variable de tipo VARCHAR2(15) identificada por v_location y se le asigna el valor "Granada"*/ v_location VARCHAR2(15) := ’Granada’; /*Se declara la constante de tipo NUMBER identificada por PI y se le asigna el valor 3.1416*/ PI CONSTANT NUMBER := 3.1416; /*Se declara la variable del mismo tipo que tenga el campo nombre de la tabla tabla_empleados identificada por v_nombre y no se le asigna ningún valor */ v_nombre tabla_empleados.nombre%TYPE; /*Se declara la variable del tipo registro correspondiente a un supuesto cursor, llamado micursor, identificada por reg_datos*/ reg_datos micursor%ROWTYPE; BEGIN /*Parte de ejecucion*/ EXCEPTION /*Parte de excepciones*/ END; 20