ORA-06512 fait partie de la pile d'erreurs. Il nous donne le numéro de ligne où l'exception s'est produite, mais pas la cause de l'exception. Cela est généralement indiqué dans le reste de la pile (que vous n'avez toujours pas posté).
Dans un commentaire, vous avez dit
Eh bien, votre code fait ceci :
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
C'est-à-dire qu'il lève une exception lorsque pNum n'est pas compris entre 12 et 14. Le reste de la pile d'erreurs inclut-il donc cette ligne ?
Si tel est le cas, il vous suffit 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;
La documentation couvre en profondeur la gestion des exceptions PL/SQL.