ORA-06512 maakt deel uit van de foutenstack. Het geeft ons het regelnummer waar de uitzondering is opgetreden, maar niet de oorzaak van de uitzondering. Dat wordt meestal aangegeven in de rest van de stapel (die je nog steeds niet hebt gepost).
In een opmerking zei je
Welnu, uw code doet dit:
IF ((pNum < 12) OR (pNum > 14)) THEN
RAISE vSOME_EX;
Dat wil zeggen, er wordt een uitzondering gegenereerd wanneer pNum niet tussen 12 en 14 ligt. Dus bevat de rest van de foutenstapel deze regel?
Als dat het geval is, hoeft u alleen maar een uitzonderingsblok toe te voegen om de fout af te handelen. Misschien:
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;
De documentatie behandelt diepgaande behandeling van PL/SQL-uitzonderingen.