Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL-2 T8»
De wikiserver
(Es crea la pàgina amb «En esta práctica, creará disparadores de sentencia y de fila. También creará procedimientos que se llamarán desde los disparadores. 1) Las filas de la tabla JOBS al…».) |
|||
Línia 11: | Línia 11: | ||
de trabajo del empleado y el otro para el salario. | de trabajo del empleado y el otro para el salario. | ||
− | ::ii) El procedimiento utiliza el identificador de trabajo para determinar el salario | + | ::ii) El procedimiento utiliza el identificador de trabajo para determinar el salario mínimo y máximo para el trabajo especificado. |
− | mínimo y máximo para el trabajo especificado. | ||
− | + | ::iii) Si el parámetro del salario, mínimo y máximo incluidos, no está dentro del rango de salarios, aparecerá una excepción de aplicación con el mensaje “Invalid salary <sal>. Salaries for job <jobid> must be between <min> and <max>”. Sustituya los distintos elementos del mensaje por los valores que proporcionan los parámetros y las variables rellenados con consultas. Guarde el archivo. | |
− | rango de salarios, aparecerá una excepción de aplicación con el mensaje “Invalid salary <sal>. Salaries for job <jobid> must be between <min> and <max>”. Sustituya los distintos elementos del mensaje por los valores que proporcionan los parámetros y las variables rellenados con consultas. Guarde el archivo. | ||
'''Abra el script /home/oracle/labs/plpu/solns/sol_08_01_a.sql. Haga clic en el icono Run Script (F5) de la barra de herramientas de SQL Worksheet para ejecutar el script. El código y el resultado se muestran a continuación.''' | '''Abra el script /home/oracle/labs/plpu/solns/sol_08_01_a.sql. Haga clic en el icono Run Script (F5) de la barra de herramientas de SQL Worksheet para ejecutar el script. El código y el resultado se muestran a continuación.''' | ||
+ | <pre> | ||
+ | CREATE OR REPLACE PROCEDURE check_salary (p_the_job VARCHAR2, | ||
+ | p_the_salary NUMBER) IS | ||
+ | v_minsal jobs.min_salary%type; | ||
+ | v_maxsal jobs.max_salary%type; | ||
+ | BEGIN | ||
+ | SELECT min_salary, max_salary INTO v_minsal, v_maxsal | ||
+ | FROM jobs | ||
+ | WHERE job_id = UPPER(p_the_job); | ||
+ | IF p_the_salary NOT BETWEEN v_minsal AND v_maxsal THEN | ||
+ | RAISE_APPLICATION_ERROR(-20100, | ||
+ | 'Invalid salary $' ||p_the_salary ||'. '|| | ||
+ | 'Salaries for job '|| p_the_job || | ||
+ | ' must be between $'|| v_minsal ||' and $' || v_maxsal); | ||
+ | END IF; | ||
+ | END; | ||
+ | / | ||
+ | SHOW ERRORS | ||
+ | </pre> |
Revisió del 16:23, 22 abr 2016
En esta práctica, creará disparadores de sentencia y de fila. También creará procedimientos que se llamarán desde los disparadores.
1) Las filas de la tabla JOBS almacenan los salarios mínimos y máximos permitidos para los distintos valores de JOB_ID. Le piden que escriba un código para garantizar que el salario de los empleados esté dentro del rango permitido por su tipo de trabajo, para operaciones de inserción y actualización.
- a) Cree un procedimiento denominado CHECK_SALARY, de la siguiente forma:
- i) El procedimiento acepta dos parámetros, uno para la cadena del identificador
de trabajo del empleado y el otro para el salario.
- ii) El procedimiento utiliza el identificador de trabajo para determinar el salario mínimo y máximo para el trabajo especificado.
- iii) Si el parámetro del salario, mínimo y máximo incluidos, no está dentro del rango de salarios, aparecerá una excepción de aplicación con el mensaje “Invalid salary <sal>. Salaries for job <jobid> must be between <min> and <max>”. Sustituya los distintos elementos del mensaje por los valores que proporcionan los parámetros y las variables rellenados con consultas. Guarde el archivo.
Abra el script /home/oracle/labs/plpu/solns/sol_08_01_a.sql. Haga clic en el icono Run Script (F5) de la barra de herramientas de SQL Worksheet para ejecutar el script. El código y el resultado se muestran a continuación.
CREATE OR REPLACE PROCEDURE check_salary (p_the_job VARCHAR2, p_the_salary NUMBER) IS v_minsal jobs.min_salary%type; v_maxsal jobs.max_salary%type; BEGIN SELECT min_salary, max_salary INTO v_minsal, v_maxsal FROM jobs WHERE job_id = UPPER(p_the_job); IF p_the_salary NOT BETWEEN v_minsal AND v_maxsal THEN RAISE_APPLICATION_ERROR(-20100, 'Invalid salary $' ||p_the_salary ||'. '|| 'Salaries for job '|| p_the_job || ' must be between $'|| v_minsal ||' and $' || v_maxsal); END IF; END; / SHOW ERRORS