ORA-06512 jest częścią stosu błędów. Podaje nam numer wiersza, w którym wystąpił wyjątek, ale nie przyczynę wyjątku. Jest to zwykle wskazane w pozostałej części stosu (której jeszcze nie zaksięgowałeś).
W komentarzu, który powiedziałeś
Cóż, twój kod robi to:
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
Oznacza to, że zgłasza wyjątek, gdy pNum nie jest między 12 a 14. Czy reszta stosu błędów zawiera tę linię?
Jeśli tak, wszystko, co musisz zrobić, to dodać blok wyjątku, aby obsłużyć błąd. Być może:
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;
Dokumentacja szczegółowo opisuje obsługę wyjątków PL/SQL.