You are on page 1of 50

Ingeniería de Sistemas

Administración de Bases de Datos

LENGUAJE SQL Y
PL/SQL
Bogotá, 2018

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
OBJETIVOS

• Que es SQL?
• Qué es PL-SQL ?
•Manejo de las sentencias cíclicas Usan
While, for, loop
• Construcción de variables de naturaleza:
Type, Record, Table

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –2–
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.
Alexis Rojas Cordero
Politécnico Grancolombiano, Bogotá 2018
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.
Alexis Rojas Cordero
Politécnico Grancolombiano, Bogotá 2018
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;
Alexis Rojas Cordero
Politécnico Grancolombiano, Bogotá 2018
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
 SET VERIFY OFF

 DBMS_OUT.PUT_LINE(“mensaje”);

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
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;
Alexis Rojas Cordero
Politécnico Grancolombiano, Bogotá 2018
CONCEPTOS BÁSICOS DE SQL y PL-SQL
Podemos crear diferentes tipos de bloques:

Subprogramas: Procedimientos, paquetes y funciones,


almacenados en la base de datos y que se ejecutan en
múltiples ocasiones. Los subprogramas se ejecutarán
mediante una llamada. Se conocen como procedimientosUsan
almacenados

Disparadores (“Triggers”): Bloques nominados que se


almacenan en la base de datos y que se ejecutan ante algún
suceso.

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –8–
CONCEPTOS BÁSICOS DEL SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –9–
CONCEPTOS BÁSICOS DEL SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –10–
SQL convertido a PL/SQL;

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –11–
CONCEPTOS BÁSICOS DEL SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –12–
CONCEPTOS BÁSICOS DEL SQL
SQL para ejecutar un
plsql.
Set serveroutput on.
Para que los mensajes
del DBMS_OUTPUT.PUT_LINE
aparecan en la consola
Usan

Set verify off. Para


obligar al sistema que
nos muestre el valor de
las variables sobre el
DBMS_OUTPUT y no
sobre un archivo txt

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –13–
EJERCICIO

Modificar el plsql que se llama miPrimerPL.sql quitándole los


comandos set y colocarle una variable de error.
Crear un sql con base en el slide 10, que se llame
eje_miPrimerPL.sql, para ejecutar el plsql.
Vemos que es otra manera de ejecutar un PLSQL. Usan

El execute se usa para pruebas de modo interactivo.


La ejecución usando un SQL es para facilitar la ejecución
desde un menú o desde un comando del sistema operativo.

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –14–
CONCEPTOS BÁSICOS DEL PL-SQL

Segmento de
programa que
muestra el manejo de
las excepciones pero
que evía los errores a
una rutina estándar
Usan
de errores, los
muestra y retorna el
control al programa
para que salga por el
return.

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –15–
CONCEPTOS BÁSICOS DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –16–
CONCEPTOS BÁSICOS DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –17–
CONCEPTOS BÁSICOS DEL SQL y PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –18–
COMENTARIOS PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –19–
VARIABLES PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –20–
VARIABLES PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –21–
VARIABLES PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –22–
VARIABLES PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –23–
VARIABLES PL-SQL - Ejemplos
Defino la variable
Creo la tabla 2

Cargo los valores


Usan
3

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –24–
DEFINICION DE REGISTROS

Records

TYPE registro IS RECORD


(
Usan
Nombres Estudiantes.nombre%TYPE,
Apellidos Estudiantes.apellido%TYPE,
Carrera Estudiantes.carrera%TYPE
);
V_REGISTRO registro;

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –25–
CONCEPTOS BÁSICOS DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –26–
VARIABLES REGISTROS DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –27–
VARIABLES TABLA DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –28–
VARIABLES TABLA DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –29–
PL-SQL – Ejemplos de tablas
Creo el vector de tipo tabla
1

Se inicia en algún lugar del Usan


programa
2
3

Alexis Rojas Cordero


Se carga con datos
Politécnico Grancolombiano, Bogotá 2018
Página –30–
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
 IF – THEN – ELSIF.

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
ESTRUCTURAS DE CONTROL DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –32–
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;
Alexis Rojas Cordero
Politécnico Grancolombiano, Bogotá 2018
ESTRUCTRUCTURAS DE CONTROL DE SQL Y PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –34–
ESTRUCTRUCTURAS DE CONTROL DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –35–
ESTRUCTRUCTURAS DE CONTROL DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –36–
ESTRUCTRUCTURAS DE CONTROL DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –37–
ESTRUCTRUCTURAS DE CONTROL DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –38–
ESTRUCTRUCTURAS DE CONTROL DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –39–
ESTRUCTRUCTURAS DE CONTROL DEL PL-SQL

Usan

• Antes de entrar al bucle evalúa, si la condición es falsa o nula


entonces el bucle termina.
• Note que si la condición es falsa de entrada, el bucle no se
ejecutará.
• Para salir del lazo, use EXIT o EXIT WHEN
Alexis Rojas Cordero
Politécnico Grancolombiano, Bogotá 2018
Página –40–
ESTRUCTRUCTURAS DE CONTROL DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –41–
ESTRUCTRUCTURAS DE CONTROL DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –42–
FUNCION ACCEPT DEL SQL Y PL-SQL
La función ACCEPT facilita la toma de contenidos desde la consola y es
muy útil para los procesos de depuración de errores en los programas.

ACCEPT sueldo_anual PROMT 'Por favor ingrese el sUeldo anual: '


DECLARE
v_sueldo number(19,4) := &sueldo_anual;
v_sueldo_mensual number(19,4);
Usan
BEGIN
v_sueldo_mensual := v_sueldo / 12;
DBMS_OUTPUT.PUT_LINE('________________________________');
DBMS_OUTPUT.PUT_LINE('El sueldo mensual: '||v_sueldo_mensual);
DBMS_OUTPUT.PUT_LINE('________________________________');
END;
/
Alexis Rojas Cordero
Politécnico Grancolombiano, Bogotá 2018
Página –43–
BLOQUES ANIDADOS DEL PL-SQL

Usan

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –44–
EJERCICIOS parte 1.
1. Cree un segmento de programa de bloque DECLARE-BEGIN-END que
acepte de la consola el código del empleado y le calcule la comisión
para un empleado dado, basándose en el sueldo. Si el sueldo es menor
que 1OOO la omisión es del 10%. Si está entre 1000 y 1500, la
comisión es del 15% y superior al 1500 es del 20%. Los empleados
201 al 205 no tienen comisión, por lo tanto debe actualizar el campo
del porcentaje de comisión e imprimir con DBMS el código y la
comisión calculada
2. Cree la tabla ítems con los campos código _ orden, codigo_intem
number(4) ambos. capra1902
3. Cree un bloque capra1903.sql de programa que declare una variable
orden del tipo código _ orden iniciada en 601, luego use la estructura
for… loop para insertar los primeros 10 items para la orden 601.
4. Para el bloque capra1903.sql codifíquelo para que la estructura
for..loop. inserte otros 10 registros para el código _ orden 700.
Salgase del loop cuando el contador del for sea > 10.

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –45–
EJERCICIOS parte 2.
1. Evalúe cada una de las siguientes declaraciones. Determine cuales de
ellas son legales y explique porqué.
 DECLARE
 v_cod number(4);
 v_x, v_y, v_z varchar2(20);
 v_fech_nac DATE NOT NULL;
 v_stock boolean := 1;

2. En cada una de las siguientes asignanciones, determine el tipo de data


para almacenar el resultado de la expresión.
 v_dias := SYSDATE – v_fec_nac;
 v_destino := USER || ‘ : ‘ TO_CHAR(v_cod_dpto);
 v_suma := $100,000 + $250,000;
 v_flag := TRUE;
 v_n1 := v_n2 > (2 * v_n10);

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –46–
EJERCICIOS parte 3.
1. Cree un bloque anónimo (declare/begin/end) para imprimir la
frase “ MI PRIMER BLOQUE DE TRABAJO PL/SQL”. Imprímalo
sobe la pantalla. Use la función DBMS_OUTPUT… para imprimir

2. Cree un bloque nominado (es decir, un programa de bloques


con un nombre por ejemplo capra1204.sql) para que extraiga
en una variable del tipo del sueldo del empleado y lo imprima
luego en la consola cuando el nombre del empleado sea ‘Luis’

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –47–
EJERCICIOS parte 3a.
1. Cree una tabla con el siguiente script:

CREATE TABLE emp


AS SELECT cod_empleado, nombre_empleado, sueldo
FROM empleados
WHERE cod_empleado IN (185,188,192,199,202)

Con los datos de la tabla emp creada, actualice los datos de cada empleado
incrementándoles el sueldo en el 15%, pero para tal proceso use vectores alias
llamados ws_emp, ws_sue y los nombres de trabajo sean vec_emp y vec_sue
respectivamente, cuyos campos sean del tipo de la tabla emp.

Al final de la actualización se debe imprimir un mensaje por consola como el del


ejemplo: Para el empleado Pat su nuevo sueldo es: 9125

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –48–
EJERCICIOS parte 4.
ACCEPT sueldo_mensual PROMT 'Por favor ingrese el seldo anual: '
ACCEPT comision PROMT 'Por favor ingrese la comision: '
DECLARE
v_sueldo
v_comision
number(19,4) := &sueldo_anual;
number(19,4) := &comision / 100; En este ejecicio, ejecutarlo y
verificar porque no se ejecuta.
v_salario_tot number(19,4);
--
--

Corregirlo para que funcione


BEGIN
v_salario_tot := (v_sueldo / 12) * v_comision;

correctamente
--
DECLARE
v_comision2 number(10,2) := 0.10;
v_salario2 number(10,2);
BEGIN
v_salario2 := v_sueldo / 12 * v_comision2;
/*
Salida del bloque interno
*/
DBMS_OUTPUT.PUT_LINE('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
DBMS_OUTPUT.PUT_LINE('El sueldo de Juan es: '||v_salario_tot);
DBMS_OUTPUT.PUT_LINE('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
END;
--
-- salida global
--
DBMS_OUTPUT.PUT_LINE('_____________________________________');
DBMS_OUTPUT.PUT_LINE('El sueldo Maria: '||v_salario2);
DBMS_OUTPUT.PUT_LINE('_____________________________________');
END;
/

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –49–
EJERCICIOS parte 5.
DECLARE
v_peso number(4) := 600;
v_mensaje varchar2(255) := 'Producto 10012'; Evalúe el bloque y determine el tipo y valor
--
--
de cada una de las siguientes variables de
BEGIN
/* SUB_BLOQUE */
acuerdo a las reglas de los bloques anidados:
--
DECLARE a.- el valor de v_peso en el sub-bloque es:
v_peso number(4) := 1;
v_mensaje varchar2(255) := 'Producto 11001';
v_sitio varchar2(500) := 'Europa'; b.- el valor de v_sitio en el sub-blq es:
BEGIN
v_peso := v_peso + 1;
v_sitio := 'Sur de '||v_sitio; c.- el valor de v_peso en el blq ppal es:
DBMS_OUTPUT.PUT_LINE('%%%%%%%%%%%%');
DBMS_OUTPUT.PUT_LINE('El en nuevo sitio es: '||v_sitio);
DBMS_OUTPUT.PUT_LINE('%%%%%%%%%%%%');
END;
--
v_peso := v_peso + 1;
d.- el valor de v_mensaje en el blq ppal es:
v_mensaje := v_mensaje || 'Está en stock';
v_sitio := 'Sur de '||v_sitio; e.- el valor de v_sitio en el blq ppal es:
--
DBMS_OUTPUT.PUT_LINE('____________________________________________');
DBMS_OUTPUT.PUT_LINE('El articulo '||v_peso||' '||v_mensaje||' en el '||v_sitio);
DBMS_OUTPUT.PUT_LINE('____________________________________________');
END;
/

Alexis Rojas Cordero


Politécnico Grancolombiano, Bogotá 2018
Página –50–

You might also like