插入数据时遇ORA-01438错误:值超出列指定精度范围
ORA-01438与ORA-06512错误排查方案
错误核心原因
ORA-01438的本质是插入值的精度超出对应列的定义限制,结合你的INSERT语句和表结构,问题集中在以下字段:
1. COMMISSION_PCT字段
表结构中该字段定义为NUMERIC(2,2),代表总位数为2,其中小数位占2位,仅能存储0到0.99之间的数值(比如0.05、0.8)。你插入的10是整数,完全超出该字段的精度范围,这是触发ORA-01438的直接原因。
2. 其他需修正的潜在问题
- JOB_ID字段:表结构为
VARCHAR2(10)(字符串类型),你插入的是数字93,Oracle会自动隐式转换,但规范写法应使用单引号包裹成字符串:'93'。 - PHONE_NUMBER字段:该字段是
VARCHAR2(20),你插入的0878457391是数字类型,开头的0会被自动忽略。若需保留开头的0,需用单引号包裹为字符串:'0878457391'。
修正后的INSERT语句
INSERT INTO HR_EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, COMMISSION_PCT, MANAGER_ID, DEPARTMENT_ID) VALUES (203010, 'SUSAN', 'LYNCH', 'SLYNCH@GMAIL.COM', '0878457391', TO_DATE('2017/07/08', 'yyyy/mm/dd'), '93', 36000, 0.10, 1900, 60);
(注:示例中将COMMISSION_PCT改为0.10以符合精度要求,你可根据实际业务需求调整为0-0.99之间的数值)
内容的提问来源于stack exchange,提问作者Luca M
相关产品推荐
相关产品推荐

