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 25: Línia 25:
 
::::ELSE
 
::::ELSE
  
:::::INSERT INTO messages(results)
+
:::::INSERT INTO messages(TO_CHAR(results))
  
 
:::::VALUES (i);
 
:::::VALUES (i);

Revisió del 18:26, 15 abr 2015

T6- Creació d'estructures de control

  • 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.

CREATE TABLE messages(results VARCHAR2 (60));

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(TO_CHAR(results))
VALUES (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 := .10;
ELSIF v_sal BETWEEN 1000 and 1500 THEN
v_comm := .15;
ELSIF v_sal > 1500 THEN
v_comm := .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 := i || ' parell';
ELSE
v_num := 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 “*”

ALTER TABLE emp
ADD stars VARCHAR2 (100);
  • 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;