1、将数据库中所有char类型改成varchar2类型
select 'alter table '||table_name || ' modify '||column_name|| ' varchar2'||'('||data_length ||');' from user_tab_columns a where data_type='CHAR'and exists (select * from user_objects where object_name=a.TABLE_NAME and object_type='TABLE')
最后得到的结果为:alter table 表名 modify 字段名 varchar2(原长度);
其中exists (select * from user_objects where object_name=a.TABLE_NAME and object_type='TABLE')的条件是过滤掉视图,只找出数据库中的表。
在更改中产生如下错误:
alter table LCINSURED modify INSUREDNO varchar2(24);
ORA-30556: 在要修改的列上已定义函数索引alter table LDPERSON modify CUSTOMERNO varchar2(24);
原因为解决办法:
在原来的系统中考虑到用trim()和没有Trim(),所以当你把char类型改成Varchar2类型时用Trim()就会报错,只需要把带trim()的索引去掉或者更改带Trim()的索引,如下:
drop IDX_INSUREDNO
Drop IDX_LDPERSON_TRIM
即可。
2、将数据库中所有calcode的的值改为10
select 'alter table '||table_name || ' modify '||column_name||' varchar2(10);' from user_tab_columns a where column_name = 'CALCODE' and data_length = '6'
and exists (select * from user_objects where object_name=a.TABLE_NAME and object_type='TABLE')
其语句总体和1类似,只需更改查出的字段和查询的条件即可。
3、删除表LJSPay两个字段OFFSITECOM、OFFSITEFLAG
alter table LJSPAY drop column OFFSITECOM;
alter table LJSPAY drop column OFFSITEFLAG;
4、建立一个表的主键
alter table <table> add constraint pk_table primary key (<column>);