CREATE OR REPLACE FUNCTION f_fact(n IN NUMBER) RETURN NUMBER IS facto NUMBER := 1; -- Initialisation de la variable pour stocker la factorielle est_negative EXCEPTION; -- Exception personnalisée pour les nombres négatifs BEGIN -- Vérifier si le nombre est négatif IF n < 0 THEN RAISE est_negative; -- Lever l'exception si le nombre est négatif END IF; -- Calcul de la factorielle avec une boucle FOR FOR i IN 1..n LOOP facto := facto * i; END LOOP; -- Retourner la valeur calculée RETURN facto; EXCEPTION WHEN est_negative THEN -- Gestion de l'exception pour les nombres négatifs DBMS_OUTPUT.PUT_LINE('Attention ! Vous avez entré un nombre négatif.'); RETURN NULL; -- Retourner NULL en cas d'erreur WHEN OTHERS THEN -- Gestion des autres exceptions DBMS_OUTPUT.PUT_LINE('Erreur inattendue : ' || SQLERRM); RETURN NULL; -- Retourner NULL en cas d'erreur END f_fact; / -- Tester la fonction BEGIN DBMS_OUTPUT.PUT_LINE('Factorielle de 5 : ' || f_fact(5)); -- Exemple avec un nombre positif DBMS_OUTPUT.PUT_LINE('Factorielle de -3 : ' || f_fact(-3)); -- Exemple avec un nombre négatif END; / DECLARE MOY NUMBER; -- Pour stocker la moyenne des salaires s NUMBER := 0; -- Variable pour accumuler la somme des salaires v_sal employees.salary%TYPE; -- Variable pour stocker un salaire emp_curs SYS_REFCURSOR; -- Curseur pour sélectionner les salaires BEGIN -- Ouvrir le curseur OPEN emp_curs FOR SELECT salary FROM employees WHERE dept_employees = 20 OR dept_employees = 90; -- Boucle pour parcourir les salaires LOOP -- Récupérer chaque salaire dans v_sal FETCH emp_curs INTO v_sal; -- Sortir de la boucle si le curseur n'a plus de lignes EXIT WHEN emp_curs%NOTFOUND; -- Accumuler la somme des salaires s := s + v_sal.salary; END LOOP; -- Calculer la moyenne si des salaires ont été trouvés IF emp_curs%ROWCOUNT > 0 THEN MOY := s / emp_curs%ROWCOUNT; DBMS_OUTPUT.PUT_LINE('La moyenne des salaires est : ' || MOY); ELSE DBMS_OUTPUT.PUT_LINE('Aucun salaire trouvé pour les départements spécifiés.'); END IF; -- Fermer le curseur CLOSE emp_curs; END; /
Write, Run & Share PL/SQL code online using OneCompiler's Oracle PL/SQL online editor and compiler for free. It's one of the robust, feature-rich online editor and compiler for Oracle PL/SQL running on latest version 23c (23.3.0.0). Getting started with the OneCompiler's Oracle PL/SQL editor is really simple and pretty fast. The editor shows sample boilerplate code when you choose language as 'PL/SQL' and start writing code to learn and test online without worrying about tedious process of installation.
PL/SQL is procedural extension for SQL created by Oracle. It is by default embedded into the Oracle Database. PL/SQL program units are compiled and stored inside the Oracle Database which results in optimal execution times as the PL/SQL and SQL run within the same server process.
Following is the syntax structure for the PL/SQL code blocks
DECLARE
<declarations section>
BEGIN
<executable command(s)>
EXCEPTION
<exception handling>
END;
DECLARE
message varchar2(100):= 'Hello, World!';
BEGIN
dbms_output.put_line(message);
END;
/
CREATE OR REPLACE FUNCTION
hello_user
(user_name IN VARCHAR2)
RETURN VARCHAR2
IS
BEGIN
RETURN 'Hello ' || user_name;
END hello_user;
/
BEGIN
dbms_output.put_line(hello_user('Peter'));
END;
/
BEGIN
DBMS_OUTPUT.put_line (1/0);
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line ('error is: ' || SQLERRM);
END;