Cours PL/SQL déclaration, initialisation des variables, tutoriel & guide de travaux pratiques en pdf.
Déclaration, initialisation des variables
• Identificateurs Oracle :
30 caractères au plus
commence par une lettre
peut contenir lettres, chiffres, _, $ et #
pas sensible à la casse
• Portée habituelle des langages à blocs
• Doivent être déclarées avant d’être utilisées
• Déclaration et initialisation Nom_variable type_variable := valeur;
• Initialisation Nom_variable := valeur;
• Déclaration multiple interdite
• Exemples :
age integer;
nom varchar(30);
dateNaissance date;
ok boolean := true;
Initialisation de variables
Plusieurs façons de donner une valeur à une variable
• Opérateur d’affectation n :=
• Directive INTO de la requête SELECT
• Exemples :
dateNaissance := to_date(’10/10/2004’,’DD/MM/YYYY’);
SELECT nom INTO v_nom
FROM emp Pour éviter les conflits de WHERE matr = 509; nommage, préfixer les variables PL/SQL par v_ SELECT … INTO …
• SELECT expr1,expr2,… INTO var1, var2,…
• Met des valeurs de la BD dans une ou plusieurs variables var1, var22, …
• Le select ne doit retourner qu’une seule ligne
• Avec Oracle il n’est pas possible d’inclure un select sans
« into » dans une procédure
• Pour retourner plusieurs lignes, voir la suite du cours sur les curseurs.
Le type de variables
• VARCHAR2
Longueur maximale : 32767 octets
Syntaxe: Nom_variable VARCHAR2(30);
Exemple: name VARCHAR2(30); name VARCHAR2(30) := ’toto’;
• NUMBER(long,dec)
Long : longueur maximale
Dec : longueur de la partie décimale
Exemple: num_tel number(10); toto number(5,2)=142.12;
• DATE
Par défaut DD-MON-YY (18-DEC-02)
Fonction TO_DATE
Exemple:
start_date := to_date(’29-SEP-2003’,’DD-MON-YYYY’);
start_date := to_date(’29-SEP-2003:13:01’,’DD-MON-YYYY:HH24:MI’);
• BOOLEAN
TRUE
FALSE
NULL
Déclaration %TYPE et %ROWTYPE
• On peut déclarer qu’une variable est du même type qu’une colonne d’une table ou (ou qu’une autre variable)
• Exemple :
v_nom emp.nom.%TYPE;
• Une variable peut contenir toutes les colonnes d’une ligne d’une table
• Exemple :
v_employe emp%ROWTYPE;
déclare que la variable v_employe contiendra une ligne de la table emp
Exemple d’utilisation
DECLARE
v_employe emp%ROWTYPE;
v_nom emp.nom.%TYPE;
BEGIN
SELECT * INTO v_employe FROM emp
WHERE matr = 900;
v_nom := v_employe.nom; v_employe.dept := 20; …
INSERT into emp VALUES v_employe;
END;
Commentaires
— Pour une fin de ligne
/* Pour plusieurs
lignes */
Les principales commandes
Test conditionnel
• IF-THEN
IF v_date > ’11-APR-03’ THEN v_salaire := v_salaire * 1.15;
END IF;
• IF-THEN-ELSE
IF v_date > ’11-APR-03’ THEN v_salaire := v_salaire * 1.15;
ELSE
v_salaire := v_salaire * 1.05; END IF;
Test conditionnel
• IF-THEN-ELSIF
IF v_nom = ’PAKER’ THEN
v_salaire := v_salaire * 1.15;
ELSIF v_nom = ‘ASTROFF’ THEN
v_salaire := v_salaire * 1.05;
END IF;
• CASE
CASE sélecteur WHEN expression1 WHEN expression2
ELSE résultat3 END;
Le CASE renvoie une valeur qui vaut
résultat1 ou résultat2 ou ….
Ce n’est pas une instruction.
THEN résultat1
THEN résultat2
• Exemple
val := CASE city
WHEN ’TORONTO’ THEN ’RAPTORS’
WHEN ’LOS ANGELES’ THEN ‘LAKERS’
ELSE ’NO TEAM’
END;
Les boucles
• LOOP instructions exécutables; EXIT [WHEN condition]; instructions exécutables;
END LOOP;
• Obligation d’utiliser la commande EXIT pour éviter une boucle infinie, facultativement quand une condition est vraie.
• WHILE condition LOOP instructions exécutables;
END LOOP;
• — tant que la condition est vraie
• FOR variable IN debut..fin
LOOP instructions;
END LOOP;
• La variable de boucle prend successivement les valeurs de début, debut+1, debut+2, …, jusqu’à la valeur fin.
• On pourra également utiliser un curseur dans la clause IN (voir plus loin)
Affichage
• Activer le retour écran sous sqlplus
set serveroutput on size 10000
• Affichage
dbms_output.put_line(chaîne);
Utilise || pour faire une concaténation