[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);没有类似的操作.

目录
相关文章
|
8月前
|
安全
如何快速断行、分割行、切割行、换行、限制每行字数、平均分割每行字数、序号自动换行、关键字断行等等内容格式整理
该工具用于文本格式处理,能调整每行字数、进行内容断行、提取特定格式内容等。在示例中,展示了如何将一段“交通安全教育”文字按30字每行分隔,并整理出带序号的格式。工具支持序号断行和多级序号设置,适用于笔记整理、文档格式化和内容布局优化,能提升工作效率。下载工具可从百度网盘(提取码:qwu2)或蓝奏云(提取码:2r1z)获取。
|
Dart
编码用这16个命名规则能让你少写一半以上的注释!
我们经常为写注释而烦恼,觉得写注释有点浪费时间。实际上,如果用好了代码命名,可以节省很多写注释的时间。
260 0
编码用这16个命名规则能让你少写一半以上的注释!
|
存储 关系型数据库 Oracle
设计表的时候,对变长字段长度选择的一点思考
原文:设计表的时候,对变长字段长度选择的一点思考 不管是在MSSQL还是MySQL或者Oracle,变长字段的长度衡量都是要经常面对的。对于一个变长的字段,在满足业务的情况下(其实所谓的满足业务是一个比较模糊的东西),到底是选择varchar(50)还是varchar(200)亦或是varchar(500)?对于保守型选择,往往是选择一个较大的长度,比如varchar(500)要比varchar(50)更具有兼容性,因为是变长字段的原因,存储空间也一样。
1405 0
|
移动开发
seek()对中文偏移测试
当前目录下创建“中文测试.txt”文件,写入: 我是大好人aaa我是大坏人bbb f = open('中文测试.txt', 'r+', encoding='utf-8') # f.write('我是大好人aaa\n') # f.
987 0
最近,很烦躁,写字静不下心来。 图片发自简书App
670 0
|
SQL 数据库
怎样获取数据库中某一个字段长度最长的那条记录
LEN() 函数 LEN() 函数返回文本字段中值的长度。 SQL LEN() 语法 SELECT LEN(column_name) FROM table_name; MySQL 中函数为 LENGTH(): SELECT LENGTH(column_name) FROM table_name;   演示数据库 在本教程中,我们将使用 RUNOOB 样本数据库。
1906 0

热门文章

最新文章