Documentos de Académico
Documentos de Profesional
Documentos de Cultura
e.t.s. ingeniera
informtica
DBD Anexo B
PL/SQL
Indice
1
INTRODUCCIN..................................................................................................................................................................... 3
1.1
2.1
EJERCICIO 1. ...................................................................................................................................................................................... 7
EJERCICIO 2....................................................................................................................................................................................... 7
EJERCICIO 3....................................................................................................................................................................................... 8
EJERCICIO 4....................................................................................................................................................................................... 8
EJERCICIO 5....................................................................................................................................................................................... 8
EJERCICIO 6....................................................................................................................................................................................... 8
Pg. 2 de 8
DBD Anexo B
PL/SQL
1 Introduccin.
PL/SQL es un lenguaje procedural propietario de Oracle.
Combina:
la potencia de definicin y manipulacin de datos de SQL
la potencia de procesamiento de los lenguajes procedurales.
Tiene estructuras de bloques; las unidades bsicas de un programa PL/SQL son bloques lgicos.
[DECLARE /* comienza parte de declaraciones */
.....Declaraciones de objetos]
BEGIN /* comienza parte ejecutable */
.....Comandos y Sentencias SQL y PL/SQL
[EXCEPTION /* comienza parte de tratamiento excepciones */
.....Tratamiento de excepciones]
END;
Un bloque PL/SQL puede ser un bloque annimo, un procedimiento o una funcin.
La estrategia de diseo PL/SQL es la modularidad; reducir la complejidad del problema dividiendo el
problema en problemas ms simples y fciles de implementar (definicin de procedimientos y funciones
almacenados)
1.1
Diseo y rendimiento.
Diseando las aplicaciones en base a una librera de subprogramas almacenados, podemos eliminar el
Cdigo Redundante e incrementar la Productividad. As mismo, se reduce la probabilidad de que existan
errores en el cdigo aumentando la Integridad y Consistencia de las aplicaciones.
Al crear un procedimiento, funcin package, Oracle automticamente lo compila y el cdigo objeto lo
carga en una rea de memoria compartida de la SGA. As mismo, cuando se dispara un trigger y el cdigo
objeto no est en la SGA, Oracle lo compila y carga el cdigo objeto en la SGA. Si varios usuarios invocan
un procedimiento funcin que est cargado en la SGA disparan un trigger, no son necesarios accesos a
disco ni hay que cargar el cdigo objeto en un rea de la SGA distinta para cada usuario.
Por tanto, mejora en Funcionamiento y Concurrencia de las aplicaciones y los Requerimientos de Memoria
son menores.
Pg. 3 de 8
DBD Anexo B
PL/SQL
PL/SQL incorpora las sentencias DML (INSERT, UPDATE, DELETE) y las sentencias SELECT de
SQL.
PL/SQL permite obtener variables y constantes basadas en el tipo de dato actual de columnas de la base de
datos, o referenciar estructuras completas de filas de una tabla.
El valor viene del proceso de llamada (es un dato de entrada y su valor no se cambia).
Es el valor por defecto.
OUT
En una salida de programa sin error, el valor del argumento es devuelto al proceso de llamada.
IN OUT Es una variable de entrada/salida.
2.1.1 Declaracin de variables.
La sintaxis para la declaracin de variables es:
Nombre_variable
[CONSTANT] tipo_de_dato
CONSTANT Declara la variable como constante. Su valor no puede cambiar. Debe ser inicializada.
DECLARE
Departamento
Valor
Fecha_nac
Fecha_contrato
VARCHAR2(10)
CONSTANT
DATE;
DATE
Tipo compuesto.
Los tipos compuestos son las tablas y registros PL/SQL definidos por el usuario, tablas anidadas y varrays.
Variables HOST.
Son variables que se declaran por ej. en SQL*Plus y se utilizan en bloques PL/SQL.
Para utilizarlas en PL/SQL tienen que llevar como prefijo dos puntos (:).
Pg. 4 de 8
DBD Anexo B
PL/SQL
propietario.tabla.columna%TYPE>;
variable_PL/SQL%TYPE> ;
Ejemplos:
w_departamento
dept.dept_no%TYPE ;
total
NUMBER(6) := 1000 ;
total_mensual
total%TYPE ;
Reduce el mantenimiento de programas.
DECLARE
EMP_REC
EMP%ROWTYPE ;
..
BEGIN
SELECT * INTO EMP_REC FROM EMP ..
END ;
Pg. 5 de 8
DBD Anexo B
PL/SQL
Control Condicional:
IF THEN ; IF THEN ELSE;
IF THEN ELSIF
IF tipo_transaccin = A
THEN
UPDATE cuentas SET .. ;
ELSE
UPDATE .. SET .. ;
ENDIF;
2.2.2 Control Iterativo:
Repite un nmero de veces un conjunto de sentencias
Estructura repetitiva bsica.
LOOP
<sentencias>
EXIT WHEN
<condicin de salida>
<sentencias>
END LOOP
BEGIN
LOOP
INSERT INTO EMP (nombre, salario)
VALUES (nombre_emp(i), salario_emp(i));
i := i+1;
EXIT WHEN i > 3;
END LOOP;
END;
Esquema WHILE
Bucle WHILE
BEGIN
WHILE i < 4 LOOP
INSERT INTO EMP (nombre, salario)
VALUES (nombre_emp(i), salario_emp(i));
i := i+1;
END LOOP;
END;
LOOP
<sentencias>
END LOOP;
BEGIN
FOR i IN 1..3 LOOP
INSERT INTO EMP (nombre, salario)
VALUES (nombre_emp(i), salario_emp(i);
i := i+1;
END LOOP;
END;
Pg. 6 de 8
DBD Anexo B
PL/SQL
Ejercicio 1.
Crear un bloque PL/SQL que muestre el mximo nmero de departamento.
VARIABLE g_dep_max
NUMBER
DECLARE
dep_max NUMBER;
BEGIN
SELECT max(deptno)
INTO dep_max
FROM dept;
:g_dep_max := dep_max;
END;
/
PRINT g_dep_max
Solucin b)
SET SERVEROUTPUT ON
DECLARE
dep_max NUMBER;
BEGIN
SELECT max(deptno)
INTO dep_max
dbms_output.put_line(TO_CHAR (dep_max));
END;
/
FROM dept;
Ejercicio 2.
Crear un bloque PL/SQL que borre los empleados del departamento 10.
Mostrar el nmero total de registros borrados.
SET VERIFY OFF
VARIABLE g_resulta VARCHAR2(40)
DECLARE
resulta VARCHAR2(40);
BEGIN
DELETE
FROM emp WHERE deptno = 10;
resulta := SQL%ROWCOUNT;
:g_resulta := (TO_CHAR(resulta) || 'filas borradas.');
COMMIT;
END;
/
SET VERIFY ON
PRINT g_resulta
Solucin b)
SET VERIFY OFF
SET SERVEROUTPUT ON
DECLARE
resulta VARCHAR2(40);
BEGIN
DELETE
FROM emp WHERE deptno = 10;
resulta := SQL%ROWCOUNT;
dbms_output.put_line(TO_CHAR(resulta)||'f. borradas');
COMMIT;
END;
/
Pg. 7 de 8
DBD Anexo B
PL/SQL
Ejercicio 3.
Aadir un campo llamado estrellas VARCHAR2(100) a la tabla de empleados.
ALTER TABLE emp ADD estrellas VARCHAR2(100)
Para el empleado nmero 1 (empno = 1) aadir al campo estrellas un asterisco por cada 100 $ de su salario.
SET VERIFY OFF
DECLARE
v_empno
emp1.empno%TYPE;
v_asteri
emp1.estrellas%TYPE := NULL;
v_sal
emp1.sal%TYPE;
BEGIN
SELECT NVL(ROUND(sal/100), 0)
INTO v_sal FROM emp1 WHERE empno = 1;
FOR i IN 1..v_sal
LOOP
v_asteri := v_asteri || '*';
END LOOP;
UPDATE emp1
SET estrellas = v_asteri
WHERE empno = 1;
COMMIT;
END;
/
SET VERIFY ON
Ejercicio 4.
Crear una tabla (tabla1) con una sola columna (valor).
Insertar registros en la tabla mediante un contador que se va incrementando y toma valores desde 1 hasta 10.
DECLARE
V_contador INTEGER :=1;
BEGIN
LOOP
INSERT INTO tabla1 (Valor) VALUES (V_contador);
V_contador :=V_contador +1;
EXIT WHEN V_contador =10;
END LOOP;
END;
Ejercicio 5.
Modificar el ejercicio anterior utilizando un BUCLE WHILE.
Ejercicio 6.
Modificar el ejercicio anterior utilizando un BUCLE FOR.
Pg. 8 de 8