TP1 PLSQL
Exercice1
1) Pour réaliser l'exercice suivant, vous devez disposer d'une table temporaire où seront
stockés les résultats. Créez une table nommée TEMP, qui comporte les trois colonnes
suivantes :
Nom de colonne NUM_STORE CHAR_STORE DATE_STORE
Type de clé
Valeurs
NULL/uniques
Table FK
Colonne FK
Type de données NUMBER VARCHAR2 DATE
Longueur 7,2 35
2) Ecrivez un bloc PL/SQL qui contienne deux variables, MESSAGE et DATE_WRITTEN.
Déclarez MESSAGE en tant que type de données VARCHAR2 d'une longueur de 35 caractères
et DATE_WRITTEN en tant que type de données DATE. Affectez les valeurs suivantes aux
variables :
Variable Contenu
MESSAGE 'This is my first PL/SQL program'
DATE_WRITTEN Date en cours
Stockez les valeurs dans les colonnes appropriées de la table TEMP. Vérifiez les résultats
en interrogeant la table TEMP.
Exercice2
Ecrivez un bloc PL/SQL pour afficher le nombre de personnes travaillant dans un service
(paramètre du bloc).
Indice : Activez DBMS_OUTPUT dans iSQL*Plus en utilisant SET SERVEROUTPUT ON.
Exercice3
Ecrivez un bloc PL/SQL qui déclare une variable nommée v_salary contenant le salaire d'un
employé. Dans la section exécutable du programme, effectuez les opérations suivantes :
a. Stockez le nom de l'employé dans une variable de substitution iSQL*Plus
b. Stockez son salaire dans la variable v_salary
c. Si le salaire est inférieur à 3 000, augmentez l'employé de 500 et affichez le message
"<Employee Name>'s salary updated" dans la fenêtre.
d. Si le salaire de l'employé est supérieur à 3 000, affichez-le au format suivant
"<Employee Name> earns ..................".
e. Testez le bloc PL/SQL avec les noms de famille.
Correction TP1 PLSQL
1)
CREATE TABLE temp
(num_store NUMBER(7,2),
char_store VARCHAR2(35),
date_store DATE);
DECLARE
MESSAGE VARCHAR2(35);
DATE_WRITTEN DATE;
BEGIN
MESSAGE := 'This is my first PLSQL Program';
DATE_WRITTEN := SYSDATE;
INSERT INTO temp(CHAR_STORE,DATE_STORE)
VALUES (MESSAGE,DATE_WRITTEN);
END;
/
SELECT * FROM TEMP;
2)
SET SERVEROUTPUT ON
DECLARE
V_COUNT NUMBER(3);
V_DEPTNO DEPARTMENTS.department_id%TYPE := &P_DEPTNO;
BEGIN
SELECT COUNT(*) INTO V_COUNT FROM employees
WHERE department_id = V_DEPTNO;
DBMS_OUTPUT.PUT_LINE (V_COUNT || ' employee(s) work for
department number ' ||V_DEPTNO);
END;
/
3)
SET SERVEROUTPUT ON
DECLARE
V_SALARY NUMBER(7,2);
V_LASTNAME EMPLOYEES.LAST_NAME%TYPE;
BEGIN
SELECT salary INTO V_SALARY
FROM employees
WHERE last_name = INITCAP('&&P_LASTNAME') FOR UPDATE of
salary;
V_LASTNAME := INITCAP('&P_LASTNAME');
IF V_SALARY < 3000 THEN
UPDATE employees SET salary = salary + 500
WHERE last_name = INITCAP('&P_LASTNAME') ;
DBMS_OUTPUT.PUT_LINE (V_LASTNAME || '''s salary updated');
ELSE
DBMS_OUTPUT.PUT_LINE (V_LASTNAME || ' earns ' ||
TO_CHAR(V_SALARY));
END IF;
END;
/