Sie sind auf Seite 1von 5

BLOQUES ANONIMOS - PARTE II

OBJETIVOS:

 Construir bloques anónimos en los cuales se utilizan variables con el atributo %TYPE y
variables RECORD.
 Codificar bloques anónimos en los cuales se utilizan sentencias SQL como SELECT,
INSERT.

Variables y atributo %TYPE

En la clase anterior habíamos trabajado sobre los tipos de datos de las variables y hablamos del
tipo de dato escalar donde se dice que ellos almacenan un valor único

dep_num NUMBER(2) NOT NULL := 10;

Pero también se dice en muchas situaciones las variables PL/SQL manipulan datos almacenados en
una tabla de la base de datos, y se requiere que la variable tenga el mismo tipo que la columna de la
tabla, sin importar los diferentes cambios de tipo que tenga la columna: se usa entonces un atributo
%TYPE.

Cuando el atributo %TYPE se añade a una referencia a una columna de tabla o a cualquier otra
variable, devuelve el tipo de la misma, no obstante no involucra la restricción de obligatoriedad de la
columna (NOT NULL).

Uso del atributo %TYPE en variables


DECLARE
Codigo_alumnos de alumnos.cod_alumn _identificacion%TYPE;

Recordar:

Al utilizar %TYPE la variable código_alumnos tendrá el tipo de la columna Código_alumnos de la


tabla alumnos, cualquiera que sea el tipo. El tipo de la variable cod_alumn se determina cada vez
que se ejecuta el bloque anónimo (o se compila el objeto almacenado).

ORDENES SQL EN PL/SQL

Podemos utilizar instrucciones SQL dentro de los bloques PL/SQL para recuperar datos de la base
de datos o para actualizar los datos que contiene.

Sentencias SQL en PL/SQL


 SELECT recupera exactamente UNA fila.

 INSERT añade una fila.

 UPDATE modifica una o más filas existentes.

 DELETE suprime una o más filas existentes.


Sentencia SELECT
Sintaxis:
SELECT <lista>
INTO {<variable>[, <variable>, ...] | <registro>}
FROM <tabla>
WHERE <condición>;

Tenga en cuenta que:

Es obligatorio incluir la cláusula INTO.


El SELECT debe prepararse para que sólo devuelva una fila.
El SELECT almacenará los valores que obtenga en las variables indicadas tras INTO y en el
mismo orden.

Ejemplo1:
DECLARE
nombre_variable DATE;

BEGIN
SELECT SYSDATE INTO nombre_variable FROM DUAL;

DBMS_OUTPUT.PUT_LINE ('la fecha es ‘||nombre_variable);


END;
/

Ejemplo 2: Recupere la suma de los sueldos de todos los empleados de un cargo específico
donde dicho cargo lo debe dar el usuario

Ejemplo 3: Escribir un bloque anónimo donde se traiga el nombre y la dirección del cliente
que el usuario desee consultar.

2
Ejercicio 4:

Realice un programa que actualiza la comisión. El programa debe recibir el nombre del empleado y
asignar como comisión el 5% de toda las ventas que ha realizado.

DECLARE
v_nombre empleado.nombre%TYPE ;

v_total number(10,2) ;

BEGIN
v_nombre:='&nombreempleado';

SELECT sum(valor)
INTO v_total
FROM ventas, empleado
WHERE empleado.cod_empleado=ventas.codigo_empleado
and nombre=v_nombre;

UPDATE empleado
SET comision = v_total * 0.05 + comision
WHERE nombre=v_nombre;

DBMS_OUTPUT.PUT_LINE('El nombre del empleado es'||v_nombre ||' es '|| v_total );

END;
/

Ejercicio 5

Eliminamos la venta 109 y mostrar cuántas tuplas fueron eliminadas.

DECLARE
v_id_ventas ventas.codigo_ventas%TYPE:= 109;

BEGIN
DELETE FROM ventas
WHERE codigo_ventas = v_id_ventas;
END;

Ejercicio 6

Insertar un nuevo empleado en la tabla.

BEGIN
INSERT INTO empleado (cod_empleado
, nombre, cargo , sueldo)
VALUES (60 , 'Feuerstein', 'vendcat3' , 200000);

END;
/

3
EJEMPLO CON LA ESTRUCTURA IF Y LA SENTENCIA SELECT

Recuerde: Sintaxis
IF (OPERACIÓN LOGICA) THEN
ELSIF THEN
ELSE
END IF;

En el ejercicio anterior donde se tenía la suma del valor total de las ventas por empleado
consultado lo podemos modificar sabiendo que si el total de ventas es menor a 3000 no
asigno comisión, sin son entre 3000 y 5000 comisionas el 3%, si vendes más de 5000 es el 5%.

EJEMPLO DE SELECT CON VARIAS TABLAS

Escribir un bloque anónimo que permite simular una interfaz de usuario a través de la cual se ingresa
el número de identificación del cliente y se muestra en pantalla su nombre completo y la descripción
de su compra según una fecha dada. Este ejercicio está orientado a mostrar una consulta con varias
tablas.

DECLARE
v_num_ide ventas.codigo_ventas%TYPE,
v_nombres clientes.nombre%TYPE,
v_describe ventas.articulo%TYPE ,

BEGIN

v_num_ide := &codigo_venta;

SELECT nombre, articulo INTO v_nombres, v_describe


FROM clientes, ventas
WHERE clientes.codigo = cod_clientes AND codigo_ventas= v_num_ide;

DBMS_OUTPUT.PUT_LINE('El codigo del cliente’||v_num_ide||' y su nombre '||


v_nombres|| 'compro el articulo '|| v_describe);

EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘El codigo ‘||v_num_ide ||’no existe’);
END;
/

4
EXCEPTION

Se conoce como el control y tratamiento de errores. Es el punto al que se transfiere el control del
programa siempre que exista un problema.

SINTAXIS DE UN EXCEPTION

1) EXCEPTION : inicio de la sección de excepciones.


2) WHEN : indica que a continuación se definirá una excepción
NO_DATA: nombre de la excepción. En este caso es una excepción predefinida

EJERCICIO INDEPENDIENTE:

1. CONSULTAR SOBRE LAS EXCEPCIONES Y ENVIAR UN TRABAJO ESCRITO DONDE


EXPLIQUE SOBRE ELLAS Y EJECUTE LOS EJERCICIOS DADOS EN LA SIGUIENTE
PAGINA WEB

http://elbauldelprogramador.com/plsql-excepciones/

2. REALICE UNA LISTA DE LAS EXCEPCIONES MÀS UTILIZADAS EN UN PL/SQL,


explicando para que sirven

Das könnte Ihnen auch gefallen