ORA-06512 faz parte da pilha de erros. Ele nos dá o número da linha onde ocorreu a exceção, mas não a causa da exceção. Isso geralmente é indicado no resto da pilha (que você ainda não postou).
Em um comentário você disse
Bem, seu código faz isso:
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
Ou seja, ele gera uma exceção quando pNum não está entre 12 e 14. Então, o restante da pilha de erros inclui essa linha?
Nesse caso, tudo o que você precisa fazer é adicionar um bloco de exceção para lidar com o erro. Talvez:
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;
A documentação abrange o tratamento de exceções PL/SQL em profundidade.