【发布时间】:2020-11-17 17:38:09
【问题描述】:
当我运行程序时,它会抛出以下错误(第一个是正确的):
BEGIN SP_REGI_OFIC('AD_PRO','Profesor',2000,'Hola'); END;
Error report -
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
'OTHERS'你不应该发现这个错误吗?
CREATE OR REPLACE PROCEDURE SP_REGI_OFIC
(codigo_jobs IN jobs.job_id%TYPE,
titulo_jobs IN jobs.job_title%TYPE,
min_salario IN jobs.min_salary%TYPE,
max_salario IN jobs.max_salary%TYPE)
AS
BEGIN
INSERT INTO JOBS(job_id, job_title, min_salary, max_salary)
VALUES (codigo_jobs,titulo_jobs,min_salario,max_salario);
COMMIT;
Dbms_output.put_line('Empleado creado con éxito');
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
dbms_output.put_line('Ya existe un oficio con el código ingresado');
WHEN OTHERS THEN
dbms_output.put_line('Error:'||TO_CHAR(SQLCODE));
dbms_output.put_line('Ha ocurrido un error:' ||SUBSTR(SQLERRM, 1,110));
END SP_REGI_OFIC;
EXECUTE SP_REGI_OFIC('AD_PRES','President',20080,40000);
EXECUTE SP_REGI_OFIC('AD_PRO','Profesor',2000,'Hello');
【问题讨论】:
-
错误是在绑定/分配实际值到参数期间。
max_salario IN jobs.max_salary%TYPE= 'Hola' 此时存储过程甚至还没有开始它的开始块 -
这个错误可控吗?
-
您可能希望将参数声明为 VARCHAR2,然后在将它们转换为用于插入的数字之前在内部对其进行验证。