需求:修改字段類型時,字段長度由大改小,字段類型由大改小,數(shù)據(jù)庫不讓修改,提示必須先清除數(shù)據(jù),但數(shù)據(jù)有系統(tǒng)非常重要時可以采用如下方案。
擴展使用:1.可用于備份重要表的數(shù)據(jù)(只需要執(zhí)行1,2步驟即可)
????????? 2.可用于對物理隔離的兩個生產(chǎn)數(shù)據(jù)庫進行同步(在A數(shù)據(jù)庫執(zhí)行1,2步驟,在B數(shù)據(jù)庫執(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中)
? 驗證數(shù)據(jù)是否導(dǎo)全,沒有某個表的導(dǎo)出數(shù)據(jù)時需要驗證該表在庫中是否真的沒有數(shù)據(jù),
? 將數(shù)據(jù)文件記為6-data.sql,以備第6步使用。
? 注意:對于大對象的類型可能用該方法不能導(dǎo)出,需要用imp語句導(dǎo)出整張表,如果在同一臺操作可以用復(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;
--修改列的類型及長度
alter table YJ_QYMB modify id NVARCHAR2(36);
--修改列名
alter table rightcert rename column certno to rightcertno;
--修改列名時遇到特殊的列名(如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','大唐集團');
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','協(xié)鑫集團');
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);
問題:
1.nvarchar2與varchar2的區(qū)別:
??? VARCHAR2存放的英文字符只占一個字節(jié),而nvarchar2依據(jù)所選的字符集,大多為兩個字節(jié)。
具體到NVARCHAR2和VARCHAR2的區(qū)別,從使用角度來看區(qū)別在于:NVARCHAR2在計算長度時和字符集相關(guān)的,
例如數(shù)據(jù)庫是中文字符集時以長度10為例,則
?1、NVARCHAR2(10)是可以存進去10個漢字的,如果用來存英文也只能存10個字符。
?2、而VARCHAR2(10)的話,則只能存進5個漢字,英文則可以存10個。Oracle可以保證VARCHAR2在任何版本中該數(shù)據(jù)類型都可以向上和向下兼容。
?
2.大對象clob的保存:
3.生成數(shù)據(jù)文件中無效信息的問題。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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