- Une procédure est un sous-programme respectant la syntaxe suivante :
CREATE [OR REPLACE] PROCEDURE nomProc (param1, paramn) IS
-- zone de déclaration des variables locales
BEGIN
...
EXCEPTION
...
END;
- Une variable paramètre suit la syntaxe suivante :
nom_param [IN|OUT|IN OUT] type_param
- Exemple :
CREATE OR REPLACE PROCEDURE associeLivreAuteur(numLivre NUMBER, idAuteur NUMBER) IS
CURSOR cursLivre IS SELECT LIV_NUM FROM LIVRE WHERE LIV_NUM=numLivre;
CURSOR cursAuteur IS SELECT AUT_ID FROM AUTEUR WHERE AUT_ID=idAuteur;
valeur NUMBER;
alerteLivre EXCEPTION;
alerteAuteur EXCEPTION;
BEGIN
OPEN cursLivre;
FETCH cursLivre INTO valeur;
IF cursLivre%NOTFOUND THEN
RAISE alerteLivre;
END IF;
OPEN cursAuteur;
FETCH cursAuteur INTO valeur;
IF cursAuteur%NOTFOUND THEN
RAISE alerteAuteur;
END IF;
INSERT INTO ECRIT(liv_num, aut_id) VALUES (numLivre,idAuteur);
EXCEPTION
WHEN alerteLivre THEN
DBMS_OUTPUT.PUT_LINE('LIV_NUM NON VALIDE');
WHEN alerteAuteur THEN
DBMS_OUTPUT.PUT_LINE('AUT_ID NON VALIDE');
END;
- Exécution :
sql> CALL associeLivreAuteur(150,100)
[2018-12-07 11:41:49] completed in 5 ms
[2018-12-07 11:41:49] LIV_NUM NON VALIDE
sql> CALL associeLivreAuteur(1,100)
[2018-12-07 11:41:53] completed in 5 ms
[2018-12-07 11:41:53] AUT_ID NON VALIDE
sql> CALL associeLivreAuteur(1,1)
[2018-12-07 11:41:57] [23000][1] ORA-00001: unique constraint (FOURNIED.SYS_C007721) violated
[2018-12-07 11:41:57] ORA-06512: at "FOURNIED.ASSOCIELIVREAUTEUR", line 18