首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql查询ORA-01843

sql查询ORA-01843
EN

Stack Overflow用户
提问于 2018-04-22 01:28:19
回答 2查看 99关注 0票数 0

我有以下DDLDML语句:

代码语言:javascript
复制
create table emp_details (
ID number(2) constraint t_pk primary key,
F_Name varchar(10) not null,
L_Name varchar(10) not null,
DOB date,
Mob_no number(10),
City varchar(10),
PIN number(5),
Gender char(1),
Designation varchar(15),
Join_Date date,    
);

insert into emp_details values (01,'John','Wick','1990-07-05',9856482358,'Goa',403001,'M','SDE II', '2015-01-08');

然后,我得到了ORA-01843的错误。那么,问题可能是什么呢?

EN

回答 2

Stack Overflow用户

发布于 2018-04-22 03:11:40

这里最简单的做法是使用ANSI日期文字而不是字符串作为日期(使用字符串将取决于NLS_DATE_FORMAT的值,如果没有必要,您不想玩弄它):

代码语言:javascript
复制
INSERT INTO emp_details
VALUES
  ( 01, 'John', 'Wick', DATE'1990-07-05', 9856482358
  , 'Goa', 403001, 'M', 'SDE II', DATE'2015-01-08');

我必须补充的是,显式列出要插入值的列是一个很好的习惯。否则,如果您或其他人从表中添加列,您的INSERT查询将中断:

代码语言:javascript
复制
INSERT INTO emp_details
  ( id, f_name, l_name, dob, mob_no, city, pin, gender, designation, join_date )
VALUES
  ( 01, 'John', 'Wick', DATE'1990-07-05', 9856482358
  , 'Goa', 403001, 'M', 'SDE II', DATE'2015-01-08');

最后,在使用Oracle时,另一个好的实践是使用VARCHAR2而不是VARCHAR。目前,它们的工作方式相同,但Oracle“保留权利”更改VARCHAR以满足ANSI值和空字符串不同的ANSI值标准(对于VARCHAR2,它们将始终相同)。也就是说,Oracle中的VARCHAR值的行为可以改变。

票数 2
EN

Stack Overflow用户

发布于 2018-04-22 02:13:44

似乎当您使用

代码语言:javascript
复制
select * from nls_session_parameters p where p.parameter = 'NLS_DATE_FORMAT';

您不会从error ORA-01843的结果中获得YYYY-MM-DDYYYY-DD-MM

此问题是由于为日期列DOBJoin_date__插入格式错误的值造成的。

有两种方法可以防止此错误:

  • 假设您从上面的查询中获得了DD/MM/YYYY,然后对DOB使用05-07-1990,对Join_Date列使用08/01/2015,对于Join_Date

,将值respectively.

  • Format为to_date('1990-07-05','YYYY-MM-DD') (对于DOB )和<DOB>d17
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49958387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档