数据字典(表名,字段名)大小写:
oracle内部数据字典(可以理解为表名或者字段)是区分大小写的,即如果数据字典中发现小写字母以及非字母开头的表名和字段,访问的时候必须加上双引号。
建立表或者字段的时候如果没有双引号,oracle会全部转换成大写字母然后写入数据字典,访问数据字典的时候没有双引号oracle会将其转换成大写然后再去数据字典中查找,这就造成了oracle大小写不敏感的假象。
时间格式:解决ora-01861文字与格式字符串不匹配
1.oracle内部时间 (DATE)都是统一用一个7个字节来表示。但是数据的(查询)展现方式oracle定义了很多种,供用户选择。存贮的时间包括年月日时分秒,最小精度为秒,不存贮秒以下的时间单位。
oracle 时间的展现格式与会话的设置相关。
通过以下语句可以查询当前会话的时间格式
SQL> select sysdate from dual;
所有对时间字段的操作都必须依照此格式,当然oracle提供了时间转换函数to_date 等。
oracle:转换函数自定义时间数据的格式。有两个与时间相关的转换函数:to_char 和 to_date .to_char(时间值,时间格式)函数将时间值转换为字符串形式,通常在查询中使用;to_date(字符串,时间格式)则把格式字符串转换时间值, 通常在insert 语句中使用。
当然也可以更改当前时间表示形式通过以下语句:
SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
将当前会话的时间格式修改为这种格式: 2003-01-28 15:23:38,即四位年-两位月-两位日,空格,24小时的制的小时:分钟:秒。
按照这种方式只会对当前会话有效果,如果会话结束,时间格式设置就会失效
如何修改会话中的日期格式 修改当前会话中的日期格式据说有三种办法
(1) 在sql*plus中修改当前会话的日期格式 这种修改方法,只对当前会话有效。注意,是对当前会话,而不是当前的sql*plus窗口。即如果你这样修改之后,又使用connect命令以其他用户连接到数据库或者是连接到其他的数据库,则这个日期格式就失效了,又恢复到缺省的日期格式。
(2) 修改注册表(只对windows系统) 在注册表hkey_local_machinesoftwareoraclehome0主键中增加一个字串(8i版本,9i也可以),字串名为 nls_date_format,字串的值为你希望定义的时间格式,如: yyyy-mm-dd hh24:mi:ss ,然后重新启动sql*plus.这种修改方法,对sql*plus窗口有效,即不论你打开多少个sql*plus窗口,缺省的都是这种时间格式。修改服务器端的注册表无效,只有修改客户端的注册表才有效。 unix系统下有没有这类似的方法,我不知道,我不会用unix或者是linux系统。
(3) 修改$oracle_homesqlplusadmin目录中glogin.sql文件这种方法我没有试过,不敢乱说,以免误导大家。请了解这种方法的高手来指教。
日期格式的优先级 如果在一个具体的环境中,既修改了注册表,又使用alter session命令修改了当前会话,那么哪一种修改方法有效呢?alter session命令有效,它的优先级是最高的。即不管当前的客户端环境是什么样的,注册表修改成什么样子了,只要你使用了alter session命令来修改了时间格式,那么就以你修改后的时间格式为准。 因此,如果直接使用sql*plus交互式查询或插入时间格式的数据,两种方法都可以用。如果使用sql文件来进行批量的插入或者是定时执行,最好在使用时间数据前使用alter session命令来修改会话,以保证这个sql语句的正常运行与环境无关。同样的,如果是前台的客户端程序中需要使用到时间格式的数据,最好也在使用之前修改会话,或者使用to_char或to_date函数进行转换(强烈推荐使用转换函数),以保证程序运行与环境无关。