*********************************情景分析**************************************
SQL> insert into scott.emp values(7968,'sheng','CLERK',7902,'2011-09-09','800','
300',20);
insert into scott.emp values(7968,'sheng','CLERK',7902,'2011-09-09','800','300',
20)
*
第 1 行出现错误:
ORA-01861: 文字与格式字符串不匹配
根据desc emp表你就会发现hiredate是date类型
date类型由会话环境决定,或者由用户定义,与数据库无关
所以对于上类情况,应该做
SQL> select sysdate from dual;(这个操作可以看到你的oracle环境的系统时间是什么格式的)
SYSDATE
--------------
28-11月-11
由于我设置的是zhs16gbk字符集,所以显示的时间是中文的显示方式。
这个时候可以用两种方法来解决这个问题。
一,用todate转换函数,来对时间做处理,进行插入
SQL> insert into scott.emp values(7968,'sheng','CLERK',7902,to_date('2011-09-09'
,'YYYY-mm-dd'),'800','300',20);
已创建 1 行。(此操作没问题)
二,修改当前会话时间格式,再进行插入
SQL> alter session set nls_date_format='YYYY-MM-DD';
会话已更改。
SQL> insert into scott.emp values(7970,'dong','CLERK',7902,'2011-09-09','800','3
00',20);
已创建 1 行。 (此操作也没问题)
但是alter session操作,只是修改当前会话的操作,如果换个用户,后者在打开一个窗口,session
的效果都会失效。