ORA-06512 är en del av felstacken. Det ger oss radnumret där undantaget inträffade, men inte orsaken till undantaget. Det indikeras vanligtvis i resten av stacken (som du fortfarande inte har postat).
I en kommentar sa du
Tja, din kod gör detta:
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
Det vill säga, det ger upphov till ett undantag när pNum inte är mellan 12 och 14. Så inkluderar resten av felstacken den här raden?
Om så är fallet behöver du bara lägga till ett undantagsblock för att hantera felet. Kanske:
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 täcker djupgående hantering av PL/SQL-undantag.
- Läs mer .