Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF3: Llenguatges SQL / Solucions PL-SQL T6»

De wikiserver
Dreceres ràpides: navegació, cerca
(T6- Creació d'estructures de control)
(T6- Creació d'estructures de control)
Línia 1: Línia 1:
==T6- Creació d'estructures de control ==
+
==T6- Solución 6: Trabajar con Tipos de Dato Compuestos ==
 
 
 
 
*'''Exercici 1'''
 
 
 
Crear una nova taula anomenada MESSAGES per emmagatzemar en una columna anomenada RESULTS cadenes de caràcters de longitud màxima 60 caràcters.
 
 
 
<pre>
 
CREATE TABLE messages(results VARCHAR2 (60));
 
</pre>
 
a) crea un bloc per insertar els números del 1 al 10 excepte el 6 i el 8.
 
 
 
b) fes un COMMIT al final del bloc.
 
 
 
c) comprova que la taula messages s'actualitzat correctament.
 
 
 
::BEGIN
 
 
 
:::FOR i IN 1..10 LOOP
 
 
 
::::IF i = 6 or i = 8 THEN
 
 
 
:::::null;
 
 
 
::::ELSE
 
 
 
:::::INSERT INTO messages(results)
 
 
 
:::::VALUES (TO_CHAR(i));
 
 
 
::::END IF;
 
 
 
::::COMMIT;
 
 
 
:::END LOOP;
 
 
 
::END;
 
 
 
::/
 
 
 
 
 
::SELECT *
 
 
 
::FROM messages;
 
 
 
 
 
*'''Exercici 2'''
 
 
 
Crear un nou bloc plsql per a calcular l'import de la comissió d'un empleat, aquesta comissió dependrà del sou de l'empleat.
 
 
 
a) Inserta un nou empleat en la taula EMP que tingui un sou NULL.
 
 
 
b) Crea una variable per tal d'emmagatzemar el número de l'empleat introduït per teclat.
 
 
 
c) si el sou d'aquest empleat és inferior a 1000$ l'import de la comissió serà un 10% d'aquest sou.
 
 
 
d) si el sou d'aquest empleat està entre 1000$ i 1500$ l'import de la comissió serà un 15% d'aquest sou.
 
 
 
e) si el sou d'aquest empleat és superior a 1500$ l'import de la comissió serà un 20% d'aquest sou.
 
 
 
f) si el sou d'aquest empleat és NULL la comissió serà un 0.
 
 
 
g) comprova el funcionament d'aquest bloc per cadadascun dels casos anteriors.
 
 
 
::ACCEPT p_empno PROMPT 'Introdueix el codi del empleat: '
 
 
 
::DECLARE
 
 
 
:::v_empno emp.empno%TYPE := &p_empno;
 
 
 
:::v_sal emp.sal%TYPE;
 
 
 
:::v_comm emp.comm%TYPE;
 
 
 
::BEGIN
 
 
 
:::SELECT sal INTO v_sal
 
 
 
:::FROM emp
 
 
 
:::WHERE empno = v_empno;
 
 
 
:::IF v_sal < 1000 THEN
 
 
 
::::v_comm := 0.10;
 
 
 
:::ELSIF v_sal BETWEEN 1000 and 1500 THEN
 
 
 
::::v_comm := 0.15;
 
 
 
:::ELSIF v_sal > 1500 THEN
 
 
 
::::v_comm := 0.20;
 
 
 
:::ELSE
 
 
 
::::v_comm := 0;
 
 
 
:::END IF;
 
 
 
:::UPDATE emp
 
 
 
:::SET comm = sal * v_comm
 
 
 
:::WHERE empno = v_empno;
 
 
 
:::COMMIT;
 
 
 
::END;
 
 
 
::/
 
 
 
*'''Exercici 3'''
 
 
 
Modifica l'exercici 1 per afegir al costat del número parell o imparell en funció de si aquest és parell o imparell.
 
 
 
::DECLARE
 
 
 
:::v_num VARCHAR2(10);
 
 
 
::BEGIN
 
 
 
:::FOR i IN 1..10 LOOP
 
 
 
::::IF i = 6 or i = 8 THEN
 
 
 
:::::null;
 
 
 
::::ELSE
 
 
 
:::::IF mod(i,2) = 0 THEN
 
 
 
::::::v_num := TO_CHAR(i) || ' parell';
 
 
 
:::::ELSE
 
 
 
::::::v_num := TO_CHAR(i) || ' imparell';
 
 
 
:::::END IF;
 
 
 
:::::INSERT INTO messages(results)
 
 
 
:::::VALUES (v_num);
 
 
 
::::END IF;
 
 
 
::::COMMIT;
 
 
 
:::END LOOP;
 
 
 
::END;
 
 
 
::/
 
 
 
*'''Exercici 4'''
 
 
 
Afegiu una nova columna a la taula EMP per afegirs asteriscs “*”
 
 
 
<pre>
 
ALTER TABLE emp
 
ADD stars VARCHAR2 (100);
 
</pre>
 
 
 
*'''Exercici 5'''
 
 
 
Crea un bloc PL/SQL que introdueixi en la columna creada anteriorment un asterisc per cada 100$ d'un empleat seleccionat per teclat al introduir el seu número d'empleat. Arrodoniu el sou fins el número enter més proper.
 
 
 
::SET VERIFY OFF
 
 
 
::ACCEPT p_empno PROMPT 'Introdueix el codi del empleat: '
 
 
 
::DECLARE
 
 
 
:::v_empno emp.empno%TYPE := &p_empno;
 
 
 
:::v_asterisk emp.stars%TYPE := NULL;
 
 
 
:::v_sal emp.sal%TYPE;
 
 
 
::BEGIN
 
 
 
:::SELECT NVL(ROUND(sal/100), 0) INTO v_sal
 
 
 
:::FROM emp
 
 
 
:::WHERE empno = v_empno;
 
 
 
:::FOR i IN 1..v_sal LOOP
 
 
 
::::v_asterisk := v_asterisk || '*';
 
 
 
:::END LOOP;
 
 
 
:::UPDATE emp
 
 
 
:::SET stars = v_asterisk
 
 
 
:::WHERE empno = v_empno;
 
 
 
:::COMMIT;
 
 
 
::END;
 
 
 
::/
 
 
 
::SET VERIFY ON
 
 
 
 
 
::SELECT empno, sal, stars
 
 
 
::FROM emp;
 

Revisió del 19:56, 30 maig 2016

T6- Solución 6: Trabajar con Tipos de Dato Compuestos