Ошибка Oracle ORA-06512

Вопрос:Просто не могу понять, почему это дает мне ошибку ORA-06512 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; END PX; Структурная база для таблицы, в которую вставлена ​​вставка:

Вопрос:

Просто не могу понять, почему это дает мне ошибку ORA-06512

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; END PX;

Структурная база для таблицы, в которую вставлена ​​вставка:

CREATE TABLE «DB».»M12GR» ( «IDM12GR» NUMBER(10,0) NOT NULL ENABLE, «CV» VARCHAR(5) NOT NULL ENABLE, «SUP» FLOAT(126) NOT NULL ENABLE, «IDM12» NUMBER(10,0) NOT NULL ENABLE, CONSTRAINT «PRIMARY_30» PRIMARY KEY («IDM12GR»), CONSTRAINT «M12SUELORM12» FOREIGN KEY («IDM12») REFERENCES «DB».»M12″ («IDM12») ENABLE ) Лучший ответ:

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.

Ответ №1

Переменная pCv имеет тип VARCHAR2, поэтому, когда вы вставляете вставку, вы не помещаете ее в одинарные кавычки:

EXECUTE IMMEDIATE ‘INSERT INTO M’||pNum||’GR (CV, SUP, IDM’||pNum||’) VALUES(»’||pCv||»’, ‘||pSup||’, ‘||pIdM||’)’;

Кроме того, ошибка ORA-06512 возникает, когда вы пытаетесь вставить слишком большое значение в столбец. Проверьте окончание таблицы M_pNum_GR и параметры, которые вы отправляете. Просто для выяснения, попытаетесь ли вы вставить значение 100 в поле NUMERIC (2), ошибка будет повышаться.

Оцените статью
Добавить комментарий