概述
先从数据库查出所有NCLOB表和字段名称,然后进行SQL拼接
SELECT
*
FROM
User_Tab_Columns
WHERE
DATA_TYPE='NCLOB'
ORDER BY
TABLE_NAME;
SELECT
*
FROM
AD_APP_PARAM_copy1
WHERE
rownum <=10
--新增一个字段,类型为VARCHAR2 长度4000
ALTER TABLE
AD_PROGRAM ADD FILEDNAME_TMP NVARCHAR2(2000)
--将要改的字段类型Clob的列数据更新到新增的列
UPDATE
AD_PROGRAM
SET
FILEDNAME_TMP=SHORTCUTMENU;
--删除原Clob列
ALTER TABLE
AD_PROGRAM DROP column SHORTCUTMENU;
--将新增列名更改为原来的列名
ALTER TABLE
AD_PROGRAM RENAME column FILEDNAME_TMP TO SHORTCUTMENU;
SELECT
'alter table '|| TABLE_NAME|| ' add FILEDNAME_TMP NVARCHAR2(2000);update '|| TABLE_NAME ||
' set FILEDNAME_TMP='||COLUMN_NAME|| ';alter table '|| TABLE_NAME ||' drop column '||
COLUMN_NAME||';alter table '|| TABLE_NAME ||' rename column FILEDNAME_TMP to '|| COLUMN_NAME||
';'
FROM
User_Tab_Columns
WHERE
DATA_TYPE='NCLOB'
OR
DATA_TYPE='CLOB'
ORDER BY
TABLE_NAME ;
拼接好的sql
ALTER TABLE
MD_DEPT ADD FILEDNAME_TMP NVARCHAR2(2000);
UPDATE
MD_DEPT
SET
FILEDNAME_TMP=REMARKS;
ALTER TABLE
MD_DEPT DROP column REMARKS;
ALTER TABLE
MD_DEPT RENAME column FILEDNAME_TMP TO REMARKS;
最后执行全部即可
例如NCHAR改为NVARCHAR2,例如NCHAR(2)改为NVARCHAR2(2)
select * from User_Tab_Columns where DATA_TYPE = 'NCHAR' and DATA_LENGTH !=2 order by TABLE_NAME ;
select
'alter table '||TABLE_NAME|| ' modify ('||COLUMN_NAME||' NVARCHAR2('||DATA_LENGTH/2||'));'
from User_Tab_Columns where DATA_TYPE = 'NCHAR' order by TABLE_NAME ;
最后
以上就是自然小鸽子为你收集整理的Oracle数据库批量修改字段类型:NCLOB -> NVARCHAR(2000)的全部内容,希望文章能够帮你解决Oracle数据库批量修改字段类型:NCLOB -> NVARCHAR(2000)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复