Bien le bonjour à toutes et à tous.

Je me pose quelques questions relatives à EXECUTE IMMEDIATE; Mon code est le 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
DECLARE
    vRequete            VARCHAR2(300);
    vErrMajMaTable    EXCEPTION;
BEGIN
    IF(premiere condition) THEN
        vRequete := 'INSERT INTO MaTable
            (
                MonChamp1
                , MonChamp2
            )
            VALUES
            (
                '||MaVariable1||'
                , '||MaVariable2||'
            )';
    ELSE
        vRequete := 'UPDATE MaTable
            SET 
                MonChamp1 = '||MaVariable1||'
                , MonChamp2 = '||MaVariable2||'
            WHERE gnagnagna ';
    END IF;

    EXECUTE IMMEDIATE vRequete;

    IF(SQL%NOTFOUND) THEN
        RAISE vErrMajMaTable;
    END IF;

EXCEPTION
    WHEN vErrMajMaTable THEN
        FonctionQuiTraceErreur(prend en argument la requete);
    blablabla;
END;
J'ai l'erreur suivante qui pointe sur la ligne en rouge
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ORA-06502 : erreur numerique ou erreur sur une valeur.
Je ne sais pas trop où est le problème puisque j'ai bien déclaré ma variable vRequete, la longueur est bonne qui plus est.

Bon sinon, j'ai d'autres questions concernant EXECUTE IMMEDIATE.
- Est-ce que la requete passée en paramètre doit se terminer par un ";"
- De quel type doit être cette variable ?

merci d'avance

Bahan