[20180613]缩短字段长度.txt

简介: [20180613]缩短字段长度.txt --//最近遇到的一个问题,就是修改字段长度.理论讲增加字段长度没有什么问题,而缩短我记忆里好像不行的, --//即使当前记录满足缩短字段长度需求.

[20180613]缩短字段长度.txt

--//最近遇到的一个问题,就是修改字段长度.理论讲增加字段长度没有什么问题,而缩短我记忆里好像不行的,
--//即使当前记录满足缩短字段长度需求.
--//通过例子说明:

1.环境:
SCOTT@book> @ ver1
PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

create table tx( id number,vc varchar2(100));
insert into tx select rownum,dbms_random.string('U',20) from dual connect by level<=10;
commit;

2.测试:
SCOTT@book> alter table tx modify vc varchar2(19);
alter table tx modify vc varchar2(19)
                      *
ERROR at line 1:
ORA-01441: cannot decrease column length because some value is too big
--//太短不行.

SCOTT@book> alter table tx modify vc varchar2(20);
Table altered.

SCOTT@book> @ &r/desc tx
           Name                            Null?    Type
           ------------------------------- -------- ----------------------------
    1      ID                                       NUMBER
    2      VC                                       VARCHAR2(20)

--//OK没有任何问题,看来我以前的记忆存在问题.还是以前遇到的版本有这个问题.
--//但是实际上这样很慢的,它必须加TM锁,进入数据块检查,才能完成修改操作.

3.做一个跟踪看看:
SCOTT@book> @ &r/10046on 12
Session altered.

SCOTT@book> alter table tx modify vc varchar2(120);
Table altered.

SCOTT@book> alter table tx modify vc varchar2(20);
Table altered.

SCOTT@book> @ &r/10046off
Session altered.

--//执行tkprof后检查:
SQL ID: 9raphb4ba5mc7 Plan Hash: 0

LOCK TABLE "TX" IN EXCLUSIVE MODE  NOWAIT


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.00       0.00          0          1          0           0
Execute      2      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.00       0.00          0          1          0           0

--//上锁2次.

SQL ID: 0nuddc4bgbuvs Plan Hash: 0
alter table tx modify vc
call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.00       0.00          0          2          0           0
Execute      2      0.01       0.01          0         80          4           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.01       0.01          0         82          4           0

--//sql语句后面的看不到.

SQL ID: fkjk2s4bvknkk Plan Hash: 40191160
select /*+ first_rows */ 1
from
"SCOTT"."TX" where LENGTHB("VC") > 20

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          1          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.00          0          7          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.00       0.00          0          8          0           0

--//很明显在执行alter table tx modify vc varchar2(20);时要扫描表TX一次.
--//而alter table tx modify vc varchar2(120);没有类似的操作.

目录
相关文章
|
6月前
|
安全
如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理
该工具用于文本格式处理,能调整每行字数、进行内容断行、提取特定格式内容等。在示例中,展示了如何将一段“交通安全教育”文字按30字每行分隔,并整理出带序号的格式。工具支持序号断行和多级序号设置,适用于笔记整理、文档格式化和内容布局优化,能提升工作效率。下载工具可从百度网盘(提取码:qwu2)或蓝奏云(提取码:2r1z)获取。
|
6月前
【错题集-编程题】包含不超过两种字符的最长字串(滑动窗口)
【错题集-编程题】包含不超过两种字符的最长字串(滑动窗口)
|
Dart
编码用这16个命名规则能让你少写一半以上的注释!
我们经常为写注释而烦恼,觉得写注释有点浪费时间。实际上,如果用好了代码命名,可以节省很多写注释的时间。
244 0
编码用这16个命名规则能让你少写一半以上的注释!
L1-4 字符串压缩 (10 分)
编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩: (1) 如果该字符是空格,则保留该字符; (2) 如果该字符是第一次出现或第三次出现或第六次出现,则保留该字符; (3) 否则,删除该字符。 例如,若用户输入“occurrence”,经过压缩后,字符c的第二次出现被删除,第一和第三次出现仍保留;字符r和e的第二次出现均被删除,因此最后的结果为:“ocurenc”。
103 0
|
关系型数据库 MySQL PHP
mysql获取字段长度,mysql查询字段长度
mysql获取字段长度,mysql查询字段长度
2140 0
|
存储 数据处理
位,字节与字
位、字节、字(bits, Bytes, words)是计算机数据存储的单位。位是最小的存储单位,每一个位存储一个1位的二进制码(0 or 1),一个字节由8位(8个二进制0 or 1 串)组成。而字通常为16、32或64个位组成。
808 0
|
存储 关系型数据库 Oracle
设计表的时候,对变长字段长度选择的一点思考
原文:设计表的时候,对变长字段长度选择的一点思考 不管是在MSSQL还是MySQL或者Oracle,变长字段的长度衡量都是要经常面对的。对于一个变长的字段,在满足业务的情况下(其实所谓的满足业务是一个比较模糊的东西),到底是选择varchar(50)还是varchar(200)亦或是varchar(500)?对于保守型选择,往往是选择一个较大的长度,比如varchar(500)要比varchar(50)更具有兼容性,因为是变长字段的原因,存储空间也一样。
1397 0
最近,很烦躁,写字静不下心来。 图片发自简书App
658 0