ORA-06512 er en del af fejlstakken. Det giver os linjenummeret, hvor undtagelsen fandt sted, men ikke årsagen til undtagelsen. Det er normalt angivet i resten af stakken (som du stadig ikke har postet).
I en kommentar sagde du
Nå, din kode gør dette:
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
Det vil sige, det rejser en undtagelse, når pNum ikke er mellem 12 og 14. Så inkluderer resten af fejlstakken denne linje?
Hvis det er tilfældet, er alt hvad du skal gøre at tilføje en undtagelsesblok for at håndtere fejlen. Måske:
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;
Dokumentationen dækker dybdegående håndtering af PL/SQL-undtagelser.