|
|
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;
| |