ORA-06512 является частью стека ошибок. Он дает нам номер строки, где произошло исключение, но не является причиной исключения. Это обычно указывается в остальной части стека (который вы еще не опубликовали).
В комментарии вы сказали
"Тем не менее, ошибка возникает, когда pNum не между 12 и 14; когда pNum
между 12 и 14 не перестает "
Ну, ваш код делает это:
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
То есть возникает исключение, когда pNum не находится в диапазоне от 12 до 14. Итак, остальная часть стека ошибок включает эту строку?
ORA-06510: PL/SQL: unhandled user-defined exception
Если это так, все, что вам нужно сделать, это добавить блок исключения для обработки ошибки. Может быть:
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. Узнать больше .