需求:修改字段类型时,字段长度由大改小,字段类型由大改小,数据库不让修改,提示必须先清除数据,但数据有系统非常重要时可以采用如下方案。 扩展使用: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.生成数据文件中无效信息的问题。
|