ORA-06512 е част от стека за грешки. Той ни дава номера на реда, където е възникнало изключението, но не и причината за изключението. Това обикновено се посочва в останалата част от стека (който все още не сте публикували).
В коментар казахте
Е, вашият код прави това:
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
Това означава, че предизвиква изключение, когато pNum не е между 12 и 14. Така че останалата част от стека за грешки включва ли този ред?
Ако е така, всичко, което трябва да направите, е да добавите блок за изключение, за да се справите с грешката. Може би:
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;
Документацията обхваща обработката на PL/SQL изключения в дълбочина.