当尝试添加新行时,我得到“在预期数字的位置找到非数字字符”,我应该更改其中一种数据类型吗? “表格”中的数据类型
CREATE TABLE TITLES
(
TITLE_ID VARCHAR2(6) NOT NULL,
TITLE VARCHAR2(80) NOT NULL,
CATEGORY CHAR(12) NOT NULL,
PUB_ID NUMBER(4) NULL,
PRICE INTEGER NULL,
ADVANCE INTEGER NULL,
TOTAL_SALES INTEGER NULL,
NOTES VARCHAR2(200) NULL,
PUBDATE DATE NOT NULL,
CONTRACT INTEGER NOT NULL,
PRIMARY KEY (TITLE_ID),
FOREIGN KEY (PUB_ID) REFERENCES PUBLISHERS(PUB_ID)
);
查询:
INSERT INTO TITLES (TITLE_ID,TITLE,CATEGORY,PUB_ID,PRICE,ADVANCE,TOTAL_SALES,NOTES,PUBDATE,CONTRACT) VALUES ('PC8888','Secrets of Silicon Valley','popular_comp',1389,20,8000,4095,'Muckraking reporting by two courageous women on the worlds largest computer hardware and software manufacturers.','12-JUN-87',1);
错误报告 - SQL错误:ORA-01858:找到了数字所在的非数字字符 01858. 00000 - “找到了数字所在的非数字字符” *原因:使用日期格式模型转换的输入数据是 不正确。输入数据不包含数字所在的数字 格式模型要求。 *操作:修复输入数据或日期格式模型以确保 元素在数量和类型上匹配。然后重试该操作。
答案 0 :(得分:3)
'12-JUN-87'
不是字符串文字的日期。
如果要生成要插入表格的日期,则需要:
DATE '1987-06-12'
TO_DATE( '12-JUN-87', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = American' )
如果您尝试使用字符串文字作为日期,则Oracle will try to implicitly convert it to a date使用NLS_DATE_FORMAT
会话参数作为格式掩码。如果此格式掩码与字符串的格式不匹配,则将生成异常。
注意:会话参数可以由用户更改,并且每个用户可以有所不同,因此您不应该依赖此默认值。
答案 1 :(得分:2)
要在Oracle表中插入日期/时间值,您需要使用Service
函数。 TO_DATE
功能允许您定义日期/时间值的格式。
例如,我们可以按如下方式插入TO_DATE
值:
'3-may-03 21:02:44'
在您的情况下,使用正确的日期模式将其应用于insert into table_name
(date_field)
values
(TO_DATE('2003/05/03 21:02:44', 'yyyy/mm/dd hh24:mi:ss'));
。您可以找到有关日期格式here的更多信息。
答案 2 :(得分:0)
我正在使用Fedora 25和oracle。我收到了上述错误。我意识到我的数据没有问题。我将系统日期设置从丹麦改为美国,事情进展顺利。也许这可以帮助有需要的兄弟:-D