[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
) ;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/267265/viewspace-2126949/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/267265/viewspace-2126949/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值