ORA-01858 Oracle SQL表中的错误

时间:2018-04-14 05:52:18

标签: sql oracle sql-insert sqldatatypes

我已经和这个问题争了好几天了。

我在Oracle的SQL Developer中创建了下一个表:

CREATE TABLE EMPLEADOSMM (
ID_EMPLEADO VARCHAR2 (10) PRIMARY KEY,
NOMBREEM VARCHAR2 (15) NOT NULL,
AP_PATEM VARCHAR2 (20) NOT NULL,
AP_MATEM VARCHAR2 (20) NOT NULL,
FECHA_NAC DATE NOT NULL,
FECHA_ING DATE NOT NULL,
ID_CARGO VARCHAR2 (10));

然后,我继续向表中添加一些值,事情是它添加了这样的一些:

INSERT INTO EMPLEADOSMM VALUES ('100006','OSCAR','MARIN','PEREZ','12-jul-85','15-nov-17','C0002');

但是其他人发给我'ORA-01858:找到了一个非数字字符,其中数字是预期的'错误。

INSERT INTO EMPLEADOSMM VALUES ('100004','FABIAN','RODRIGUEZ','VELEZ','31-aug-87','13-jul-17','C0003');
INSERT INTO EMPLEADOSMM VALUES ('100005','LUZ MARIA','TORINO','YAÑEZ','11-dec-90','13-jul-17','C0003');

我尝试用“yyyy”改变年份格式,重写所有零,但是看起来没有用。一些想法?

1 个答案:

答案 0 :(得分:2)

首先,我想强调代码 的工作原理。 Here是一个演示工作代码的SQL小提琴。

其次,这意味着您系统的某些内容会导致其中断。 Barbaras Ozhan似乎有正确的解释 - 国际化设置认为某些月份缩写与英语相同,但不是全部。

您应该将插入内容写为:

INSERT INTO EMPLEADOSMM (ID_EMPLEADO, NOMBREEM, AP_PATEM, AP_MATEM, FECHA_NAC, FECHA_ING, ID_CARGO)
    VALUES ('100006', 'OSCAR', 'MARIN', 'PEREZ', DATE '1985-07-12', DATE '2017-11-15', 'C0002');

INSERT INTO EMPLEADOSMM (ID_EMPLEADO, NOMBREEM, AP_PATEM, AP_MATEM, FECHA_NAC, FECHA_ING, ID_CARGO)
    VALUES ('100004', 'FABIAN', 'RODRIGUEZ', 'VELEZ', DATE '1987-08-31', DATE '2017-07-13', 'C0003');

INSERT INTO EMPLEADOSMM (ID_EMPLEADO, NOMBREEM, AP_PATEM, AP_MATEM, FECHA_NAC, FECHA_ING, ID_CARGO)
    VALUES ('100005', 'LUZ MARIA', 'TORINO', 'YAÑEZ', DATE '1990-12-11', DATE '2017-07-13', 'C0003');

Oracle支持ANSI标准关键字DATE,用于引入ISO / ANSI标准格式YYYY-MM-DD的日期常量。我强烈建议您在所有代码中使用此格式。如果有时间组件,请使用TIMESTAMP

包括列名是最佳做法。

我会质疑为什么员工ID是一个字符串,如果你只想在其中包含数字。