Академический Документы
Профессиональный Документы
Культура Документы
LABORATORIO 9
PL SQL
Contenido
1. Lenguaje de programación para sql
2. Estructura basica de pl/sql
3. Declaración de variables
4. Impresión en PL SQL
5. Almacenamiento de datos en variables
6. Manipulación de datos con SQL empotrado
7. Bifurcaciones condicionales (if)
8. Estructura case
9. Bucles incondicionales
10. Bubles condicionales
11. Buble for
12. Etiquetas
13. Registros
14. Tablas
15. Cursores
16. Excepciones
Declaración de Variables
Las variables deben declararse dentro de la sección DECLARE
Los tipos de datos son todos aquellos válidos para SQL añadiendo algunos propios de PL/SQL.
Variables ancladas
VARIABLE1 number;
Variable2 VARIABLE1%TYPE ;
Asignaciones de valor
var_num1 := 100 ;
var_num2 := var_num1 ;
var_sum := var_num1 + var_num2 ;
Variables de host
VARIABLE g_mitad number
declare
v_monto number;
begin
v_monto:=&v_monto;
:g_mitad:=v_monto/2;
end;
/
SQL>PRINT g_mitad
2
Impresión en PL SQL
SET SERVEROUTPUT ON
declare
numero,doble number ;
begin
numero := &num ;
doble := numero * 2 ;
DBMS_OUTPUT.PUT_LINE(‘el doble de ‘||numero||’ es ‘||doble);
end;
declare
meta constant number := 4 ;
total number ;
begin
select count(inv_number) into total
from invoice where inv_date='&inv_date';
IF total >= meta then
dbms_output.put_line('ventas por encima de la esperada');
ELSIF total >0 and total<meta then
dbms_output.put_line('ventas menores al esperada');
ELSE
dbms_output.put_line('no se realizaron ventas en el día');
END IF;
end;
3
Estructura CASE
Declare
v_categoria char := ‘&v_categoria’ ;
begin
CASE v_categoria
WHEN ‘a’ THEN
dbms_output.put_line(‘pension 1000’);
WHEN ‘b’ THEN
dbms_output.put_line(‘pension 750’);
WHEN ‘c’ THEN
dbms_output.put_line(‘pension 500’);
ELSE
dbms_output.put_line(‘pension 300’);
END CASE;
End;
Bucles Incondicionales
Las sentencias de dentro del bucle se ejecutarán durante un número indefinido de vueltas, hasta que
se cumple la condición del EXIT.
Declare
factorial number:=1;
numero number:=№
Begin
LOOP
factorial:=factorial*numero;
numero:=numero-1;
EXIT WHEN numero=0;
END LOOP;
dbms_output.put_line(‘el factorial es’||factorial);
end;
Bubles Condicionales
declare
li number:=0;
ls number:=50;
n number:=0;
begin
WHILE li < 300 LOOP
select count(p_code) into n from product where p_price between li and ls;
dbms_output.put_line('hay'||n||'productos que cuestan entre'||li||'y'||ls);
li:= ls+1;
ls:= ls+50;
END LOOP;
end;
Buble FOR
Contador sera una variable de tipo entero capaz de contener los valores comprendidos entre
limite_inferior y limite_superior.
4
declare
contador number;
cantidad number;
suma number:=0;
begin
select count(*) into cantidad from invoice;
FOR contador in 1..cantidad LOOP
suma:=suma+contador;
END LOOP;
dbms_output.put_line (‘ventas promedio’||suma/cantidad);
end;
Etiquetas
Define un punto de salto de la ejecucion del programa hacia el lugar en donde esta ubicada la
etiqueta
Registros y Tablas
Existen dos tipos de datos especiales: los registros (o estructuras) y las tablas (o arrays o vectores).
Los dos tipos deben ser definidos como un nuevo tipo antes de declarar variables de ese nuevo tipo.
Una vez definido en nuevo tipo, ya se pueden definir variables de ese nuevo tipo
Registros
Los registros son agrupaciones de tipos de variables a los que se acceden con el mismo nombre
alumno.apellido_1
5
Tablas
Una tabla es una colección de elementos identificados cada uno de ellos por un índice.
El ejemplo define un tipo de arrayde enteros y después declara una variable de ese tipo,
inicializándola a 4 elementos (todos con 0).
Cursores
Recuperan fila a fila los resultados de una consulta select, para almacenarlos en variables para su
posterior tratamiento.
1. Declarar el cursor
Se define el nombre que tendrá el cursor y qué consulta SELECT ejecutará.
4. Cerrar el cursor
6
Declare
cursor c_ventas is select inv_number,inv_date from invoice;
v_factura invoice.inv_number%type;
v_fecha invoice.inv_date%type;
v_cantidad number:=0;
begin
open c_ventas;
fetch c_ventas into v_factura,v_fecha;
while c_ventas%found loop
v_cantidad:=v_cantidad+1;
dbms_output.put_line('factura'||v_factura||'fecha'||v_fecha);
fetch c_ventas into v_factura,v_fecha;
end loop;
dbms_output.put_line('ventas totales'||v_cantidad);
end;
Excepciones
Las excepciones deben ser declaradas dentro de la sección DECLARE, como una variable de tipo
exception
En el cuerpo del bloque de codigo se debe definir cuando debe ser lanzada, a través de la
instrucción RAISE.
Una vez que la excepción ha sido lanzada, la ejecución continua en la sección EXCEPTION,
concretamente en el manejador apropiado para la excepcion ocurrida (o el manejador WHEN
OTHERS cuando no exista el específico).
7
Ejemplo:
declare
codigo number:=&codigo;
nombre varchar(15);
contador number;
ex1 EXCEPTION;
begin
select count(*) into contador from customer where cus_code=codigo;
if(contador=0) then
RAISE ex1;
end if;
select cus_lname into nombre from customer where cus_code=codigo;
dbms_output.put_line(nombre);
EXCEPTION
WHEN ex1 THEN
dbms_output.put_line('codigo no existe, registrelo');
end;
Referencias
http://www-db.stanford.edu/~ullman/fcdb.html