oracle 中字段由大改小的方法

系统 2088 0

需求:修改字段类型时,字段长度由大改小,字段类型由大改小,数据库不让修改,提示必须先清除数据,但数据有系统非常重要时可以采用如下方案。
扩展使用:1.可用于备份重要表的数据(只需要执行1,2步骤即可)
          2.可用于对物理隔离的两个生产数据库进行同步(在A数据库执行1,2步骤,在B数据库执行3,6,7步骤即可)
         
1.抽出表中数据
select 'insert into YJ_QYMB (ID,SSFDJT) values ('''||ID||''','''||SSFDJT||''');' from YJ_QYMB;
2.保存整理数据(数据被保存在c:\temp\6-data.sql中)
  验证数据是否导全,没有某个表的导出数据时需要验证该表在库中是否真的没有数据,
  将数据文件记为6-data.sql,以备第6步使用。
  注意:对于大对象的类型可能用该方法不能导出,需要用imp语句导出整张表,如果在同一台操作可以用复制表的方法(create table table1 select ...)

3.保存及删除外键关系
alter table YJ_QSHYDFL drop constraint FK_QSHYDFLZBID;
alter table YJ_QSHYDLKB drop constraint FK_SSID;

4.删除数据
delete from YJ_QYMB;
commit;
5.修改表结构
alter table YJ_QYMB modify ID varchar2(100);
表中列的增删该操作
--增加列
alter table YJ_JSSYDFLQKB add column cdate date;
--删除列
alter table YJ_JSSYDFLQKB drop column cdate;
--修改列的类型及长度
alter table YJ_QYMB modify id NVARCHAR2(36);
--修改列名
alter table rightcert rename column certno to rightcertno;
--修改列名时遇到特殊的列名(如DATE),需要转化为字符串(如"DATE"),在字符串需要区分大小写
alter table YJ_JSSFSQSHYDQKB rename column "DATE" to "CDATE";

6.导入数据 (用2种的导出文件导入)
insert into YJ_QYMB (ID,SSFDJT) values ('BD1C309866B74125863628A7F64D317E','大唐集团');
insert into YJ_QYMB (ID,SSFDJT) values ('C97610A843144629AD228004D7EF4DA4','大唐国际');
insert into YJ_QYMB (ID,SSFDJT) values ('760B69F7468D4A2CABA96BA63BA1640D','国电集团');
insert into YJ_QYMB (ID,SSFDJT) values ('F3332D1068B74591AC20F351F3A6C9BF','华电集团');
insert into YJ_QYMB (ID,SSFDJT) values ('0B0423789DC542C280DFF7C964E6D957','华润集团');
insert into YJ_QYMB (ID,SSFDJT) values ('48C6F34FAFD4437DB3C57F6848095253','华能集团');
insert into YJ_QYMB (ID,SSFDJT) values ('64AB69D0BC174CD9A6AFAF05CE66BCF8','中电投集团');
insert into YJ_QYMB (ID,SSFDJT) values ('EB38DBF347BE45A5B6AFF63BDF2758C6','国信集团');
insert into YJ_QYMB (ID,SSFDJT) values ('4A3F4CC759F147EF968FA2E118471478','国华集团');
insert into YJ_QYMB (ID,SSFDJT) values ('2038E47E9BC74639A82758492F1E8992','协鑫集团');
insert into YJ_QYMB (ID,SSFDJT) values ('6709E2B2C8B94FFABA09BDBDBE2D50B9','北京三吉利股份有限公司');
insert into YJ_QYMB (ID,SSFDJT) values ('32C614C06CE249C6852A75E66E5A4DEF','其他');
commit;
7.修复外键关系
alter table YJ_QSHYDFL add constraint FK_QSHYDFLZBID foreign key (ZBID) references YJ_QSHYDFLZBB (ID);
alter table YJ_QSHYDLKB add constraint FK_SSID foreign key (SSID) references YJ_SMCB (ID);


问题:
1.nvarchar2与varchar2的区别:
    VARCHAR2存放的英文字符只占一个字节,而nvarchar2依据所选的字符集,大多为两个字节。
具体到NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,
例如数据库是中文字符集时以长度10为例,则
 1、NVARCHAR2(10)是可以存进去10个汉字的,如果用来存英文也只能存10个字符。
 2、而VARCHAR2(10)的话,则只能存进5个汉字,英文则可以存10个。Oracle可以保证VARCHAR2在任何版本中该数据类型都可以向上和向下兼容。
 
2.大对象clob的保存:
3.生成数据文件中无效信息的问题。

oracle 中字段由大改小的方法


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论