[20161023]为什么以前可以这样的表.txt

[20161023]为什么以前可以这样的表.txt

--上午看https://oracleblog.org/working-case/ora-01401-impdp-same-character/

CREATE TABLE ASS_ACCHSHT_GREEN_MEMORY
(    "GREEN_ID" VARCHAR2(16) NOT NULL ENABLE,
     "ACCOUNT_ID" VARCHAR2(16) NOT NULL ENABLE,
     "ADDED_BY" VARCHAR2(100),
     "ADDED_DATE" VARCHAR2(16) DEFAULT sysdate 
) ;

报这个错误ORA-01401: inserted value too large for column.我关心的是为什么以前ok。

当我看到执行执行如下一下明白过来。

SCOTT@book> select length(sysdate),lengthb(sysdate) from dual;

LENGTH(SYSDATE) LENGTHB(SYSDATE)
--------------- ----------------
             19               19

--我的测试环境如果
$ echo $NLS_DATE_FORMAT
YYYY-MM-DD HH24:MI:SS

--如果我定义:
$ export NLS_DATE_FORMAT='YYYYMMDDHH24:MI:SS'

SCOTT@book> select length(sysdate),lengthb(sysdate) from dual;
LENGTH(SYSDATE) LENGTHB(SYSDATE)
--------------- ----------------
             16               16

SCOTT@book> CREATE TABLE ASS_ACCHSHT_GREEN_MEMORY
(    "GREEN_ID" VARCHAR2(16) NOT NULL ENABLE,
     "ACCOUNT_ID" VARCHAR2(16) NOT NULL ENABLE,
     "ADDED_BY" VARCHAR2(100),
     "ADDED_DATE" VARCHAR2(16) DEFAULT sysdate
) ;
Table created.

--可以发现这样就ok了。

SCOTT@book> @ &r/ddl scott.ASS_ACCHSHT_GREEN_MEMORY
C100
----------------------------------------------------------------------------------------------------
  CREATE TABLE "SCOTT"."ASS_ACCHSHT_GREEN_MEMORY"
   (    "GREEN_ID" VARCHAR2(16) NOT NULL ENABLE,
        "ACCOUNT_ID" VARCHAR2(16) NOT NULL ENABLE,
        "ADDED_BY" VARCHAR2(100),
        "ADDED_DATE" VARCHAR2(16) DEFAULT sysdate
   ) SEGMENT CREATION DEFERRED
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
  TABLESPACE "USERS" ;

--虽然开发建表很不规范,实际上思路很混乱,数据类型都搞错。
--正确的写法如下:

SCOTT@book> drop table ASS_ACCHSHT_GREEN_MEMORY purge ;
Table dropped.

--退出shell,重新登录:

$ echo $NLS_DATE_FORMAT

YYYY-MM-DD HH24:MI:SS

SCOTT@book> select length(sysdate),lengthb(sysdate) from dual;
LENGTH(SYSDATE) LENGTHB(SYSDATE)
--------------- ----------------
             19               19

SCOTT@book> CREATE TABLE ASS_ACCHSHT_GREEN_MEMORY
(    "GREEN_ID" VARCHAR2(16) NOT NULL ENABLE,
     "ACCOUNT_ID" VARCHAR2(16) NOT NULL ENABLE,
     "ADDED_BY" VARCHAR2(100),
     "ADDED_DATE" VARCHAR2(16) DEFAULT to_char(sysdate,'YYYYMMDDHH24MISS')
) ;
Table created.

SCOTT@book> insert into ASS_ACCHSHT_GREEN_MEMORY(green_id ,account_id,added_by) values ('1','2','3');
1 row created.

SCOTT@book> commit ;
Commit complete.

SCOTT@book> select * from ASS_ACCHSHT_GREEN_MEMORY;
GREEN_ID         ACCOUNT_ID       ADDED_BY   ADDED_DATE
---------------- ---------------- ---------- ----------------
1                2                3          20161023100908

--补充正常数据类型应该选择date:
CREATE TABLE ASS_ACCHSHT_GREEN_MEMORY
(    "GREEN_ID" VARCHAR2(16) NOT NULL ENABLE,
     "ACCOUNT_ID" VARCHAR2(16) NOT NULL ENABLE,
     "ADDED_BY" VARCHAR2(100),
     "ADDED_DATE" date DEFAULT sysdate
) ;

时间: 2024-07-30 10:55:43

[20161023]为什么以前可以这样的表.txt的相关文章

[20151231]主外键与空表.txt

[20151231]主外键与空表.txt --主外键的测试例子很多,今天做一个特别的,外部键表为空,也会出现阻塞吗?测试看看. 1.建立环境: SCOTT@book> @ &r/ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -------------------------------------------------------

[20170315]11.2.0.4 exp可以导出空表.txt

[20170315]11.2.0.4 exp可以导出空表.txt --链接http://www.itpub.net/thread-2084282-1-1.html,11.2.0.4可以使用exp导出空表,没有问题,测试看看.   SCOTT@book> @ &r/ver BANNER -------------------------------------------------------------------------------- Oracle Database 11g Ente

[20150918]禁止用户truncate以及drop表.txt

[20150918]禁止用户truncate以及drop表.txt --一个需求要求禁止用户truncate以及drop表,实际上很简单仅仅建立一个触发器就ok了. CREATE OR REPLACE TRIGGER SYS.tri_prevent_drop_truncate    BEFORE TRUNCATE OR DROP ON DATABASE BEGIN    IF ora_dict_obj_type = 'TABLE' AND ora_dict_obj_owner = 'SCOTT'

[20161002]impdp导入空表.txt

[20161002]impdp导入空表.txt --业务需求要求建立新的测试库,由于磁盘空间有限,要求几个大表导入空表,11g支持段延迟提交,即使表init很大也不会出现空间问题. --全表的数据已经通过expdp导出.自己测试一下如何实现: 1.环境: SCOTT@test01p> @ ver1 PORT_STRING          VERSION    BANNER                                                              

[20150115]insert多个表.txt

[20150115]insert多个表.txt --别人给我提出一个问题,要把表拆开2个表,能否快速完成这个工作.还是通过例子来说明: SCOTT@test> @ver1 PORT_STRING                    VERSION        BANNER ------------------------------ -------------- -----------------------------------------------------------------

[20130121]应用程序访问那些表.txt

[20130121]应用程序访问那些表.txt 前一阵子要优化一个项目,表结构使用的汉语拼音的首字母作为表名,又没有注解说明,要了解应用的细节,解决应用的问题太麻烦了.我想先确定程序主要使用那些表,想到了以前遇到的v$access视图. http://space.itpub.net/267265/viewspace-717912 通过它应该可以确定应用经常使用的那些表以及视图,主要了解靠前的表就可以解决问题. WITH a AS      (SELECT  /*+ materialize */ 

[20141203]分析语句导致阻塞分析表.txt

[20141203]分析语句导致阻塞分析表,分析表导致阻塞sql语句执行分析.txt --我们知道如果语句连接的表很多,会消耗大量的CPU资源. http://blog.itpub.net/267265/viewspace-1298186/ --分析sql语句还会导致什么问题呢?昨天看了一篇bloghttp://www.bobbydurrettdba.com/2014/11/24/parsing-blocks-stats-blocks-parsing/, --重复测试看看. SCOTT@test

[20120910]建立包含long类型的表.txt

需要往一个表里面append一些数据,而表内有long 字段.处理还真麻烦,记录一下. SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Rele

[20120206]Cursor Invalidation与分析表.txt

在分析表的是否有一个参数no_invalidate:缺省值是DBMS_STATS.AUTO_INVALIDATE.AUTO_INVALIDATE.     10g中默认是AUTO_INVALIDATE,就是说分析表后,游标不会马上invalidate,已经存在的SQL的执行计划不会受新的统计信息影响.可以手工DDL invalidate游标.又或者等待隐藏参数_optimizer_invalidation_period(time window for invalidation of cursor