Question

Tout ne peut pas comprendre pourquoi il me donne ORA-06512 erreur

PROCEDURE PX(pNum INT,pIdM INT,pCv VARCHAR2,pSup FLOAT)
AS
    vSOME_EX EXCEPTION;

BEGIN 
    IF ((pNum < 12) OR (pNum > 14)) THEN     
        RAISE vSOME_EX;
    ELSE  
        EXECUTE IMMEDIATE  'INSERT INTO M'||pNum||'GR (CV, SUP, IDM'||pNum||') VALUES('||pCv||', '||pSup||', '||pIdM||')';
    END IF;
END PX;

La base de la structure de la table où l'insert est réalisé:

CREATE TABLE "DB"."M12GR" (
    "IDM12GR" NUMBER(10,0) NOT NULL ENABLE, 
    "CV" VARCHAR(5) NOT NULL ENABLE, 
    "SUP" FLOAT(126) NOT NULL ENABLE, 
    "IDM12" NUMBER(10,0) NOT NULL ENABLE, 

    CONSTRAINT "PRIMARY_30" PRIMARY KEY ("IDM12GR"),
    CONSTRAINT "M12SUELORM12" FOREIGN KEY ("IDM12") REFERENCES "DB"."M12" ("IDM12") ENABLE
)
Était-ce utile?

La solution

ORA-06512 fait partie de la pile d'erreurs. Il nous donne le numéro de ligne où l'exception est survenue, mais pas la cause de l'exception. Cela est généralement indiqué dans le reste de la pile (que vous avez pas encore posté).

Dans un commentaire que vous avez dit

"encore, l'erreur vient quand PNUM est pas entre 12 et 14, quand PNUM est compris entre 12 et 14, il ne manque pas "

Eh bien, votre code fait ceci:

IF ((pNum < 12) OR (pNum > 14)) THEN     
    RAISE vSOME_EX;

C'est, elle soulève une exception lorsque PNUM n'est pas entre 12 et 14. Ainsi fait le reste de la pile d'erreur comprennent cette ligne?

ORA-06510: PL/SQL: unhandled user-defined exception

Si oui, tout ce que vous devez faire est d'ajouter un bloc d'exception pour gérer l'erreur. Peut-être:

PROCEDURE PX(pNum INT,pIdM INT,pCv VARCHAR2,pSup FLOAT)
AS
    vSOME_EX EXCEPTION;

BEGIN 
    IF ((pNum < 12) OR (pNum > 14)) THEN     
        RAISE vSOME_EX;
    ELSE  
        EXECUTE IMMEDIATE  'INSERT INTO M'||pNum||'GR (CV, SUP, IDM'||pNum||') VALUES('||pCv||', '||pSup||', '||pIdM||')';
    END IF;
exception
    when vsome_ex then
         raise_application_error(-20000
                                 , 'This is not a valid table:  M'||pNum||'GR');

END PX;

Les couvertures de documentation gestion des exceptions PL / SQL en profondeur.

Autres conseils

La RGC variable est de type VARCHAR2 donc quand vous concat l'insert vous ne mettez pas à l'intérieur des guillemets simples:

 EXECUTE IMMEDIATE  'INSERT INTO M'||pNum||'GR (CV, SUP, IDM'||pNum||') VALUES('''||pCv||''', '||pSup||', '||pIdM||')';

En outre l'erreur de relance ORA-06512 lorsque vous essayez d'insérer une valeur trop importante dans une colonne. Vérifiez la definiton de la table M_pNum_GR et les paramètres que vous envoyez. Juste pour préciser si vous essayez d'insérer la valeur 100 sur un champ NUMERIC (2) l'erreur soulèvera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top