Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
--Realizar una SELECT para visualizar el siguiente resultado. El impuesto es el 20% del salario.
--Crear la consulta para visualizar los siguientes datos, usando el operador de concatenación ||
SELECT ' EL EMPLEADO '|| UPPER (FIRST_NAME)|| ' DEL DEPARTAMENTO '|| DEPARTMENT_ID
|| ' GANA UN SALARIO DE' ||SALARY
FROM EMPLOYEES;
--Averiguar el nombre y salario de los empleados que NO tengan como jefe al MANAGER 114
--(columna MANAGER_ID)
--Visualizar los empleados que empezaron a trabajar a partir del año 2006
--Indicar los datos de los empleados que tengan como apellidos “Smith” (LAST_NAME)
--Indica los apellidos de los empleados que empiezan desde ‘D’ hasta ‘G’
--Averiguar los empleados de los departamentos 30,60 y 90. Hay que usar la cláusula IN
--Indica las ciudades que están en Inglaterra (UK) y Japón (JP).. Tabla LOCATION
--Indicar los datos de los empleados cuyo FIRST_NAME empieza por ‘J’
--Indicar los países que tienen una “r” en la segunda letra (Tabla COUNTRIES
--Obtener el nombre y la fecha de la entrada y el tipo de trabajo de los empleados que sean
IT_PROG
CASE JOB_ID
END
FROM EMPLOYEES
WHERE first_name like 'S%' AND department_id IN (50,80) AND salary > 3000;
SELECT MAX(SALARY),MIN(SALARY)DIFFERENCE
FROM EMPLOYEES;
SELECT SALARI
--Mostrar el promedio de salario de los empleados por departamentos que tengan comisión.
GROUP BY TO_CHAR(HIRE_DATE,'YYYY')
GROUP BY TO_CHAR(DEPARTMENT_ID);
--Mostrar los departamentos_id de los departamentos que tienen managers que tienen a cargo
mas de 5 empleados.
/*ejercicios
1- Crear una SELECT (no un cursor explícito) que devuelva el nombre de un empleado
SET SERVEROUTPUT ON
DECLARE
nombre employees.first_name%TYPE;
BEGIN
SELECT first_name INTO nombre
FROM
employees
WHERE
employee_id = 1000;
dbms_output.put_line(nombre);
EXCEPTION
dbms_output.put_line('Empleado inexistente.');
dbms_output.put_line('ERROR INDIFIDO');
END;
SET SERVEROUTPUT ON
DECLARE
nombre_empleado employees.first_name%TYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE(nombre_empleado);
EXCEPTION
END;
por ejemplo, vamos a devolver el salario en vez del nombre y lo dividimos por 0.
En este caso, en vez de controlar la excepción directamente,
creamos una sección WHEN OTHERS y pintamos el error con SQLCODE y SQLERR
SET SERVEROUTPUT ON
DECLARE
nombre_empleado employees.first_name%TYPE;
salary number;
div_cero number;
BEGIN
div_cero:=salario/0;
DBMS_OUTPUT.PUT_LINE('div_cero');
EXCEPTION
END;
pintar “Clave duplicada, intente otra”. o Insertamos una fila en la tabla REGIONS
SET SERVEROUT ON
BEGIN
EXCEPTION
/*ejerccio
poner una clave superior a 200. Por ejemplo, usando una variable con ese valor.
*En ese caso debe generar un texto indicando algo así como “Codigo no permitido.
con el RAISE.
*/
RESPUESTA
SET SERVEROUT ON
DECLARE
reg_max EXCEPTION;
regn NUMBER;
regt VARCHAR2(200);
BEGIN
regn := 37;
regt := 'OFFISHE';
RAISE reg_max;
ELSE
COMMIT;
END IF;
EXCEPTION
WHEN reg_max THEN
dbms_output.put_line('ERROR INDEFINIDO');
END;
--practica
DECLARE
tipo VARCHAR2(20);
BEGIN
tipo := 'ELECTRONICA';
tipo := 'INFORMATICA';
tipo := 'ROPA';
ELSE
END IF;
dbms_output.put_line('VALOR=' || valor||',tipo='||tipo||'.');
END;
--practica: --Practica
/*
Vamos a poner dentro el nombre del usuario que somos, usando la función USER de ORacle
que devuelve el nombre del usuario con el que estamos conectados (Recuerda que en Oracle
usuario:=user
Luego hacermos un CASE para que nos pinte un mensaje del estilo:
*/
DECLARE
USUARIO VARCHAR2(40);
BEGIN
USUARIO := USER;
CASE USUARIO
END CASE;
END;
EJERCICIOS :
/*Práctica 1
Vamos a crear la tabla de multiplicar del 1 al 10, con los tres tipos de bucles:
RESPUESTA
numero number:=0;
resultado number;
begin
resultado:=1*numero;
dbms_output.put_line('1*'||to_char(numero)||'='||to_char(resultado));
numero:=numero+1;
end loop;
end;
--Práctica 2-
Poner alguna frase Mediante un bucle, escribir la frase al revés, Usamos el bucle WHILE
--Práctica 3
Usando la práctica anterior, si en el texto aparece el carácter "x" debe salir del bucle.
--Práctica 4
Debemos pintar tantos asteriscos como letras tenga el nombre. Usamos un bucle FOR
--Práctica 5
Creamos dos variables numéricas, "inicio y fin" Las inicializamos con algún valor:
*/
/*ejercicios
1- Crear una SELECT (no un cursor explícito) que devuelva el nombre de un empleado
por ejemplo, vamos a devolver el salario en vez del nombre y lo dividimos por 0.
creamos una sección WHEN OTHERS y pintamos el error con SQLCODE y SQLERR
*/
DECLARE
duplicado EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('INSERTADO CORRECTAMENTE');
EXCEPTION
END;
/*ejerccio
*Debe dispararse cuando al insertar o modificar una región queramos poner una clave superior
a 200. Por ejemplo, usando una variable con ese valor.
*En ese caso debe generar un texto indicando algo así como “Código no permitido. Debe ser
inferior a 200”
*Recordemos que las excepciones personalizadas deben dispararse de forma manual con el
RAISE.
*/
RESPUESTA
SET SERVEROUT ON
DECLARE
reg_max EXCEPTION;
regn NUMBER;
regt VARCHAR2(200);
BEGIN
regn := 37;
regt := 'OFFISHE';
RAISE reg_max;
ELSE
COMMIT;
END IF;
EXCEPTION
dbms_output.put_line('ERROR INDEFINIDO');
END;
Creamos un TYPE TABLE basado en el RECORD anterior
Mediante un bucle cargamos en la colección los empleados. El campo NAME debe contener
FIRST_NAME y LAST_NAME concatenado.
Para cargar las filas y siguiendo un ejemplo parecido que hemos
visto en el vídeo usamos el EMPLOYEE_ID que va de 100 a 206
A partir de este momento y ya con la colección cargada, hacemos las siguientes operaciones,
usando métodos de la colección.
Visualizamos toda la colección
Visualizamos el primer empleado
Visualizamos el último empleado
Visualizamos el número de empleados
Borramos los empleados que ganan menos de 7000 y visualizamos de nuevo la colección
Volvemos a visualizar el número de empleados para ver cuantos se han borrado
*/
RESPUESTA
DECLARE
employees%ROWTYPE
INDEX BY PLS_INTEGER;
emp EMPLE;
BEGIN
END LOOP;
END;
Sintaxis
La sintaxis de las excepciones en procedimientos y funciones.
Sintaxis de procedimientos
La sintaxis para la excepción en un procedimiento es:
BEGIN
--Declaración de Sentencia
EXCEPTION
END NOMBRE_PROCEDIMIENTO
Sintaxis para funciones
La sintaxis de la excepción en una función es:
CREATE [OR REPLACE] FUNCTION NOMBRE_FUNCION [(param1 |IN|OUT|IN OUT|
TIPO_DATO,
param2 |IN|OUT|IN OUT| TIPO_DATO ), … ]
RETURN TIPO_DATO IS | AS
BEGIN
--Declaración de Sentencia
RETURN DATO;
EXCEPTION
WHEN NOMBRE_EXCEPTION1 THEN
[Declaración de Sentencia]
END NOMBRE_FUNCION
Ejemplo
A continuación, se muestra un ejemplo de un procedimiento que utiliza una excepción
CREATE OR REPLACE PROCEDURE P_INS_CLIENTES(P_CODIGOCLIENTE IN
CLIENTE.CODIGOCLIENTE%TYPE,
P_NOMBRECLIENTE IN
CLIENTE.NOMBRECLIENTE%TYPE) IS
BEGIN
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
RAISE_APPLICATION_ERROR(-20001,
'Ha intentado insertar un duplicado codigocliente.');
END;
En conclusión
Si existe un bloque de excepción apropiado para el tipo de excepción que esta ejecuta dicho
bloque. Si no existe un bloque de control de excepciones adecuado al tipo de excepción se
ejecutará el bloque de excepción WHEN OTHERS THEN (si existe!). WHEN OTHERS debe
ser el último manejador de excepciones.