Bonsoir,

Je dois rendre un TP en PL/SQL et c'est la première fois que je m'essaie au langage d'Oracle.

Avec le code de ma fonction suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
create or replace FUNCTION generer_prets (pnumsortie sortie.no_sortie%TYPE)
    RETURN NUMBER
    IS
        v_nopaq paquetage.no_paquetage%TYPE;
        v_caution paquetage.caution%TYPE; 
BEGIN
    FOR enr IN (
        SELECT a.no_adherent, credits
        FROM adherent a
        INNER JOIN participe pa on a.no_adherent = pa.no_adherent
        WHERE pa.no_sortie = pnumsortie AND UPPER(payee) = 'V'
        FOR UPDATE OF credits)
        LOOP
            SELECT no_paquetage INTO v_nopaq
            FROM utilise u
            WHERE no_sortie = pnumsortie AND no_paquetage NOT IN(
                SELECT no_paquetage
                FROM pret
                WHERE date_retour IS NULL)
            AND ROWNUM = 1;
            SELECT caution INTO v_caution
            FROM paquetage
            WHERE v_nopaq = no_paquetage;
                IF v_caution < enr.credits THEN
                    INSERT INTO pret VALUES (SYSDATE, v_nopaq, enr.no_adherent, NULL);
                    UPDATE adherent SET credits = credits - v_caution WHERE no_adherent = enr.no_adherent;
                ELSE
                dbms_output.put_line('Problème de caution pour la paquetage ' + v_nopaq + ' et l''adhérent ' + enr.no_adherent);
                END IF;
        END LOOP;
        COMMIT;
    RETURN (0);
EXCEPTION
    WHEN NO_DATA_FOUND THEN dbms_output.put_line('Attention : plus de paquetage disponible');
    RETURN (-2);
 
    WHEN OTHERS THEN
        dbms_output.put_line('Erreur : ' || SQLERRM);
        RETURN (-1);
END;
J'obtiens le message suivant :
Erreur : ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur: erreur de conversion des caractères en chiffres
Est-ce que quelqu'un pourrait m'aiguiller svp ??

Merci beaucoup d'avance !