需求:修改字段類型時(shí),字段長(zhǎng)度由大改小,字段類型由大改小,數(shù)據(jù)庫(kù)不讓修改,提示必須先清除數(shù)據(jù),但數(shù)據(jù)有系統(tǒng)非常重要時(shí)可以采用如下方案。
擴(kuò)展使用:1.可用于備份重要表的數(shù)據(jù)(只需要執(zhí)行1,2步驟即可)
????????? 2.可用于對(duì)物理隔離的兩個(gè)生產(chǎn)數(shù)據(jù)庫(kù)進(jìn)行同步(在A數(shù)據(jù)庫(kù)執(zhí)行1,2步驟,在B數(shù)據(jù)庫(kù)執(zhí)行3,6,7步驟即可)
?????????
1.抽出表中數(shù)據(jù)
select 'insert into YJ_QYMB (ID,SSFDJT) values ('''||ID||''','''||SSFDJT||''');' from YJ_QYMB;
2.保存整理數(shù)據(jù)(數(shù)據(jù)被保存在c:\temp\6-data.sql中)
? 驗(yàn)證數(shù)據(jù)是否導(dǎo)全,沒(méi)有某個(gè)表的導(dǎo)出數(shù)據(jù)時(shí)需要驗(yàn)證該表在庫(kù)中是否真的沒(méi)有數(shù)據(jù),
? 將數(shù)據(jù)文件記為6-data.sql,以備第6步使用。
? 注意:對(duì)于大對(duì)象的類型可能用該方法不能導(dǎo)出,需要用imp語(yǔ)句導(dǎo)出整張表,如果在同一臺(tái)操作可以用復(fù)制表的方法(create table table1 select ...)
3.保存及刪除外鍵關(guān)系
alter table YJ_QSHYDFL drop constraint FK_QSHYDFLZBID;
alter table YJ_QSHYDLKB drop constraint FK_SSID;
4.刪除數(shù)據(jù)
delete from YJ_QYMB;
commit;
5.修改表結(jié)構(gòu)
alter table YJ_QYMB modify ID varchar2(100);
表中列的增刪該操作
--增加列
alter table YJ_JSSYDFLQKB add column cdate date;
--刪除列
alter table YJ_JSSYDFLQKB drop column cdate;
--修改列的類型及長(zhǎng)度
alter table YJ_QYMB modify id NVARCHAR2(36);
--修改列名
alter table rightcert rename column certno to rightcertno;
--修改列名時(shí)遇到特殊的列名(如DATE),需要轉(zhuǎn)化為字符串(如"DATE"),在字符串需要區(qū)分大小寫
alter table YJ_JSSFSQSHYDQKB rename column "DATE" to "CDATE";
6.導(dǎo)入數(shù)據(jù) (用2種的導(dǎo)出文件導(dǎo)入)
insert into YJ_QYMB (ID,SSFDJT) values ('BD1C309866B74125863628A7F64D317E','大唐集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('C97610A843144629AD228004D7EF4DA4','大唐國(guó)際');
insert into YJ_QYMB (ID,SSFDJT) values ('760B69F7468D4A2CABA96BA63BA1640D','國(guó)電集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('F3332D1068B74591AC20F351F3A6C9BF','華電集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('0B0423789DC542C280DFF7C964E6D957','華潤(rùn)集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('48C6F34FAFD4437DB3C57F6848095253','華能集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('64AB69D0BC174CD9A6AFAF05CE66BCF8','中電投集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('EB38DBF347BE45A5B6AFF63BDF2758C6','國(guó)信集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('4A3F4CC759F147EF968FA2E118471478','國(guó)華集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('2038E47E9BC74639A82758492F1E8992','協(xié)鑫集團(tuán)');
insert into YJ_QYMB (ID,SSFDJT) values ('6709E2B2C8B94FFABA09BDBDBE2D50B9','北京三吉利股份有限公司');
insert into YJ_QYMB (ID,SSFDJT) values ('32C614C06CE249C6852A75E66E5A4DEF','其他');
commit;
7.修復(fù)外鍵關(guān)系
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);
問(wèn)題:
1.nvarchar2與varchar2的區(qū)別:
??? VARCHAR2存放的英文字符只占一個(gè)字節(jié),而nvarchar2依據(jù)所選的字符集,大多為兩個(gè)字節(jié)。
具體到NVARCHAR2和VARCHAR2的區(qū)別,從使用角度來(lái)看區(qū)別在于:NVARCHAR2在計(jì)算長(zhǎng)度時(shí)和字符集相關(guān)的,
例如數(shù)據(jù)庫(kù)是中文字符集時(shí)以長(zhǎng)度10為例,則
?1、NVARCHAR2(10)是可以存進(jìn)去10個(gè)漢字的,如果用來(lái)存英文也只能存10個(gè)字符。
?2、而VARCHAR2(10)的話,則只能存進(jìn)5個(gè)漢字,英文則可以存10個(gè)。Oracle可以保證VARCHAR2在任何版本中該數(shù)據(jù)類型都可以向上和向下兼容。
?
2.大對(duì)象clob的保存:
3.生成數(shù)據(jù)文件中無(wú)效信息的問(wèn)題。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
