LENGUAJE PL/SQL
El lenguaje de programación
PL/SQL



PL/SQL aplica las estructuras típicas de un
lenguaje de programación a las sentencias
SQL.
PL/SQL, utiliza sentencias SQL para manipular
datos en Oracle y estructuras de Control para
organizar esta manipulación de datos.
Permite declarar constantes y variables, definir
procedimientos y funciones y atrapar errores en
tiempo de ejecución.
Estructura básica en PL/SQL
El Bloque de Código:
Cuando se escribe código en PL/SQL, este debe
estar agrupado en unidades denominadas bloques
de código. El cual puede contener otros sub.
bloques.
 Un bloque de código queda delimitado por las
palabras reservadas BEGIN y END;
 Un bloque de código se guarda en un fichero
.SQL para su posterior uso, o guardarlo en la BD
para que pueda ser ejecutado por cualquier
aplicación.

Un bloque PL/SQL tiene tres partes:
• La única sección obligatoria es la contenida
entre BEGIN y END;
[DECLARE
Sección de declaraciones
BEGIN
Sentencias …
sentencias …
[EXCEPTION
Manejo de excepciones
END;
Ejecución de un bloque de
programación PL/SQL
Escriba el script del bloque y grábelo
con la extensión .sql
 Compile y ejecute @nom_bloque.sql
 Active la consola para ver mensajes
retornados: SET SERVEROUTPUT ON

Declaración de Variables y Constantes

Las variables y constantes deben declararse
dentro de la sección DECLARE y deben
seguir la siguiente sintaxis:
Nombre_variable TIPO [:=Inicialización];
Nombre_variable CONSTANT
TIPO[:=Inicialización];
Ejemplos:
Interes NUMBER(5,3);
Descricpion VARCHAR2(30):=“inicial”;
Fecha_max Date;
PI CONSTANT REAL:=3.14159;
Tipos de Datos

Tipo escalar no tiene componentes internos.
Compuesto contiene componentes internos.
Referencia almacena punteros. Un tipo lob
permite guardar archivos en la BD.
Estructuras básicas de Control
EL PL/SQL cuenta con estructuras:
 Control condicional: Sentencia IF.
La sentencia IF permite ejecutar una
secuencia de acciones condicionalmente, es
decir si cumple la condición a evaluar.
Existen tres modos para esta instrucción:
IF - THEN, IF – THEN – ELSE y
IF – THEN – ELSIF.
Ejemplos de sentencias IF:
IF condición THEN
Secuencia_de_sentencias
END IF;
IF condición THEN
Secuencia_de_sentencias_1
ELSE
Secuencia_de_sentencias_2
END IF;
IF condición THEN
Secuencia_de_sentencias_1
ELSIF
Secuencia_de_sentencias_2
ELSE
Secuencia_de_sentencias_3
END IF;
Controles de Iteración: LOOP y
EXIT
La sentencia LOOP permite ejecutar una
secuencia de acciones múltiples veces.
 Existen tres modalidades para esta instrucción:
LOOP, WHILE – LOOP y FOR – LOOP.
 LOOP
El modo básico de LOOP encierra una serie de
acciones entre las palabras:
LOOP

Secuencias_ de_ instrucciones
END LOOP;
EXIT

La cláusula EXIT obliga a loop a concluir incondicionalmente.
LOOP
IF rankin_credito <3 THEN
…
EXIT; --Si no cumple condición finaliza el bloque.
END IF;
END LOOP;
EXIT – WHEN

Esta sentencia permite terminar el loop de manera condicional.
LOOP
FETCH c1 INTO …
EXIT WHEN condición
--Termina el Loop si la condición es verdadera
…
EXIT;.
END IF;
END LOOP;
Etiquetas
Los ciclos pueden ser rotulados. Estos
identificadores son encerrados entre << y
>> y se encuentran al inicio de un LOOP.
WHILE – LOOP
Esta sentencia se asocia a una condición
con una secuencia de sentencias entre las
palabras clave LOOP y END LOOP,
ejemplo:
<<rótulo>>
WHILE condición LOOP
Secuencia_de_sentencias
END LOOP;
FOR - LOOP
FOR contador IN [REVERSE]
limite_inferior..limite_superior LOOP
Secuencia de Sentencias
END LOOP;
Si la variable contador no esta definida, PL/SQL define
una de tipo entero y la libera al finalizar el ciclo. La que
debe contener los valores comprendidos entre límite
inferior y superior.
Los límites de una iteración pueden ser literales,
variables, expresiones o funciones pero deben
evaluarse como números enteros.
Ejemplos de bloques PL/SQL
--programa p2.sql
DECLARE
a number(3) :=3;
b number(3) :=4;
c number(3);
BEGIN
c:=a+b;
dbms_output.put_line('hola el resultado es =>'||c);
END;
/
Ejemplos de bloques PL/SQL
--programa p3.sql
DECLARE
a number(3);
b number(3);
c number(3);
BEGIN
c:=&a+&b;
dbms_output.put_line('hola el resultado es =>'||c);
END;
/
Ejemplos de bloques PL/SQL
--p4.sql
DECLARE
esperada constant NUMBER(5) := 300;
xtotal
NUMBER;
xcant
NUMBER;
xprom
NUMBER;
BEGIN
SELECT SUM(promingresos),COUNT(*) INTO xtotal,xcant
FROM cliente
WHERE fechanac<sysdate;
xprom:=xtotal*xcant;
dbms_output.put_line('xprom es '||xprom||' el valor esperaba '||esperada);
IF xprom >= esperada THEN
xtotal:=1;
INSERT INTO cliente VALUES
('0801583261','DIEGO','MARADONA','7689765',to_date('14/01/2005','dd/mm/yyyy'),890,'N',
'CUENCA');
dbms_output.put_line('Insercción satisfactoria');
ELSE
dbms_output.put_line(' El valor de xprom es mayor o igual a esperada=> no
inserta');
END IF;
END;
/
Ejemplos de bloques PL/SQL
--Ejemplo de Loop con el uso de EXIT
DECLARE
v_Counter BINARY_INTEGER := 1;
BEGIN
LOOP
-- inserta una fila en la tabla
temp_table con un nuevo valor -de codigo en v_counter
INSERT INTO temp_table VALUES
(v_Counter, 'Loop index');
v_Counter := v_Counter + 1;
-- Termina la condicion cuando el
codigo sea mayor a 50
IF v_Counter > 50 THEN
EXIT;
END IF;
END LOOP;
END;
/
--Ejemplo de uso de EXIT - WHEN
DECLARE
v_Counter BINARY_INTEGER := 1;
BEGIN
LOOP
INSERT INTO temp_table
VALUES (v_Counter, 'Loop index');
v_Counter := v_Counter + 1;
EXIT WHEN v_Counter > 50;
END LOOP;
END;
/
Ejemplos de bloques PL/SQL
DECLARE
v_Counter BINARY_INTEGER;
BEGIN
WHILE v_Counter <= 50 LOOP
INSERT INTO temp_table VALUES (v_Counter, 'Loop index');
v_Counter := v_Counter + 1;
END LOOP;
END;
/
Ejemplo de For
DECLARE
v_Counter NUMBER := 7;
BEGIN
-- inserta el codig 7 en temp_table.
INSERT INTO temp_table (num_col)
VALUES (v_Counter);
FOR v_Counter IN 20..30 LOOP
INSERT INTO temp_table (num_col) VALUES (v_Counter);
END LOOP;
INSERT INTO temp_table (num_col) VALUES (v_Counter);
END;
/
Ejemplos de Bloque de Código
DECLARE
v_NumberSeats rooms.number_seats%TYPE;
v_Comment VARCHAR2(35);
BEGIN
/* Retrieve the number of seats in the room identified by ID
99999.
Store the result in v_NumberSeats. */
SELECT number_seats
INTO v_NumberSeats
FROM rooms
WHERE room_id = 99999;
IF v_NumberSeats < 50 THEN
v_Comment := 'Fairly small';
ELSIF v_NumberSeats < 100 THEN
v_Comment := 'A little bigger';
ELSE
v_Comment := 'Lots of room';
END IF;
END;
Descargar

LENGUAJE PL/SQL - MisTareasUnita