E9流程表单修改字段

1.说明(必读)

1.1 识别字段id

  • 方式一:使用谷歌浏览器登录,编辑字段页面,鼠标放到字段上,左下角显示的数字即为字段的id
    image-20201230143753785
  • 方式二:在模板上查看(若明细表的字段查看不到,使用上面的方法即可)
    image-20201230143841357

1.2 备份数据

备份整个所需要修改的表(物理表+逻辑表)
注:0125后缀为日期,建议备份表的时候加上日期后缀

-- Oracle、MySQL数据库
create table formtable_main_1480_back_0125 as select * from formtable_main_1480;
create table workflow_billfield_back_0125 as select * from workflow_billfield;
-- SqlServer数据库
select * into formtable_main_1480_back_0125 from  formtable_main_1480;
select * into workflow_billfield_back_0125 from  workflow_billfield;

1.3 清除SQL缓存

方式一:直接重启应用服务器resin

方式二:使用系统管理员访问 OA系统域名+/commcache/cacheMonitor.jsp,点击重新加载配置

sql缓存

2.具体案例分享

适用懂简单SQL人员
改变字段类型,不影响原数据和配置

2.1 单行文本 => 多行文本

以表单【formtable_main_1480】 单行文本字段【dxwb】为例

步骤一:参考1.2备份

步骤二:修改物理表类型

不同数据库多行文本字段对应类型

数据库类型 多行文本字段类型
sqlserver text
oracle varchar2(4000)
mysql text

修改物理表列类型:

无表单数据时

-- Oracle
alter table formtable_main_1480 modify (dxwb varchar2(4000));
-- MySQL
alter table formtable_main_1480 modify column dxwb text;
-- SqlServer
alter table formtable_main_1480 alter column dxwb text;

有表单数据时(Mysql和SqlServer可按无数据执行)

-- Oracle
-- 给表中需要修改的字段重命名
alter table formtable_main_1480  rename column dxwb to dxwb_bak;
-- 添加一列字段,名字跟原来字段的名字一致,类型是想修改之后的类型
alter table formtable_main_1480 add dxwb varchar2(4000);
-- 把原来的字段的数据,“复制”到新加的字段中
update formtable_main_1480 set dxwb = dxwb_bak;
-- 更新完成删除原字段
alter table formtable_main_1480 drop column dxwb_bak;

步骤三:修改逻辑表

不同数据库类型不同,参考多行文本对应类型修改

-- Oracle
 update workflow_billfield set fielddbtype='varchar2(4000)',fieldhtmltype=2 where id=598610
 -- SqlServer
 update workflow_billfield set fielddbtype='text',fieldhtmltype=2 where id=598610
 -- MySQL
 update workflow_billfield set fielddbtype='text',fieldhtmltype=2 where id=598610

注:如果是Oracle数据库,在执行完上述步骤之后,需要提交事务。直接在数据库执行 commit即可

步骤四:参考1.3清除SQL缓存

2.2 单行文本 => 单行文本-整数

以表单【formtable_main_1480】 单行文本【wb】为例

1、请确认单行文本存的是数字

2、修改为浮点数同理

步骤一:参考1.2备份

步骤二:修改物理表类型

不同数据库单行文本-整数字段对应类型

数据库类型 单行文本-整数字段类型
oracle int
mysql int(11)
sqlserver int

修改字段物理表类型:

无表单数据时

-- Oracle
alter table formtable_main_1480 modify (wb int);
-- MySQL
alter table formtable_main_1480 modify column wb int(11);
-- SqlServer
alter table formtable_main_1480 alter column wb int;

有表单数据时,即已经走了流程,字段上保存了数据进入数据库

-- Oracle
-- 1、给表中需要修改的字段重命名
alter table formtable_main_1480  rename column wb to wb_bak;
-- 2、添加一列字段,名字跟原来字段的名字一致,类型是想修改之后的类型
alter table formtable_main_1480 add wb int;
-- 3、把原来的字段的数据,“复制”到新加的字段中
update formtable_main_1480 set wb = wb_bak;
-- 4、更新完成删除原字段
alter table formtable_main_1480 drop column wb_bak;
-- MySQL
--主要为了防止单行文本字段里面有空字符串,空字符串在进行转换成整数时会报错
-- 1、给表中需要修改的字段重命名
alter  table formtable_main_1480 change wb wb_bak text;
-- 2、添加一列字段,名字跟原来字段的名字一致,类型是想修改之后的类型
alter table formtable_main_1480 add wb int
-- 3、把原来的字段的数据,“复制”到新加的字段中
update formtable_main_1480 set wb = wb_bak where wb_back!='';
-- 4、更新完成删除原字段
alter table formtable_main_1480 drop column wb_bak;
-- SqlServer
-- 主要为了防止单行文本字段里面有空字符串,空字符串在进行转换成整数时会报错
-- 1、给表中需要修改的字段重命名
execute sp_rename 'formtable_main_1480.wb','wb_back'
-- 2、添加一列字段,名字跟原来字段的名字一致,类型是想修改之后的类型
alter table formtable_main_1480 add wb int
-- 3、把原来的字段的数据,“复制”到新加的字段中
update formtable_main_1480 set wb = wb_bak where wb_back!='';
-- 4、更新完成删除原字段
alter table formtable_main_1480 drop column wb_bak;

步骤三:修改逻辑表

不同数据库类型不同,参考单行文本-整数字段类型修改

-- Oracle
update workflow_billfield set fielddbtype='int',type=2 where id=583853
-- SqlServer
update workflow_billfield set fielddbtype='int',type=3 where id=583853
-- MySQL
update workflow_billfield set fielddbtype='int(11)',type=3, where id=583853

注:如果是Oracle数据库,在执行完上述步骤之后,需要提交事务。直接在数据库执行 commit即可

步骤四:参考1.3清除SQL缓存

2.3 单行文本-整数 => 单行文本-浮点数2位小数

以表单【formtable_main_1480】 单行文本-整数【dxwbzs】为例

步骤一:参考1.2备份

步骤二:修改物理表类型

不同数据库单行文本-浮点数2位小数字段对应类型

数据库类型 单行文本-浮点数2位小数字段类型
oracle number(38,2)
mysql decimal(38,2)
sqlserver decimal(38,2)

修改字段物理表类型:

无表单数据时

-- Oracle
alter table formtable_main_1480 modify (dxwbzs number(38,2));
-- MySQL
alter table formtable_main_1480 modify column dxwbzs decimal(38,2);
-- SqlServer
alter table formtable_main_1480 alter column dxwbzs decimal(38,2);

有表单数据时(Mysql、SqlServer按照无数据修改)

-- Oracle
-- 1、给表中需要修改的字段重命名
alter table formtable_main_1480  rename column dxwbzs to dxwbzs_bak;
-- 2、添加一列字段,名字跟原来字段的名字一致,类型是想修改之后的类型
alter table formtable_main_1480 add dxwbzs number(38,2);
-- 3、把原来的字段的数据,“复制”到新加的字段中
update formtable_main_1480 set dxwbzs = dxwbzs_bak;
-- 4、更新完成删除原字段
alter table formtable_main_1480 drop column dxwbzs_bak;

步骤三:修改逻辑表

不同数据库类型不同,参考单行文本-浮点数两位小数类型修改

-- Oracle
update workflow_billfield set fielddbtype='number(38,2)',type=3,qfws=2 where id=598612
-- SqlServer
update workflow_billfield set fielddbtype='decimal(38,2)',type=3,qfws=2 where id=598612
-- MySQL
update workflow_billfield set fielddbtype='decimal(38,2)',type=3,qfws=2 where id=598612

注:如果是Oracle数据库,在执行完上述步骤之后,需要提交事务。直接在数据库执行 commit即可

步骤四:参考1.3清除SQL缓存

2.4 单行文本-浮点数2位小数 => 增加精度(小数位数)

以表单【formtable_main_1480】 单行文本-浮点数2位小数【dxwbfds2】为例

类型:2位小数 修改为 4位小数

步骤一:参考1.2备份

步骤二:修改物理表类型

不同数据库单行文本-浮点数4位小数字段对应类型

数据库类型 单行文本-浮点数4位小数字段类型
oracle number(38,4)
mysql decimal(38,4)
sqlserver decimal(38,4)

修改字段物理表类型:

无表单数据时

-- Oracle
alter table formtable_main_1480 modify (dxwbfds2 number(38,4));
-- MySQL
alter table formtable_main_1480 modify column dxwbfds2 decimal(38,4);
-- SqlServer
alter table formtable_main_1480 alter column dxwbfds2 decimal(38,4);

有表单数据时(Mysql、SqlServer参考无数据修改)

-- Oracle
-- 1、给表中需要修改的字段重命名
alter table formtable_main_1480  rename column dxwbfds2 to dxwbfds2_bak;
-- 2、添加一列字段,名字跟原来字段的名字一致,类型是想修改之后的类型
alter table formtable_main_1480 add dxwbfds2 number(38,4);
-- 3、把原来的字段的数据,“复制”到新加的字段中
update formtable_main_1480 set dxwbfds2 = dxwbfds2_bak;
-- 4、更新完成删除原字段
alter table formtable_main_1480 drop column dxwbfds2_bak;

步骤三:修改逻辑表

不同数据库类型不同,参考单行文本-浮点数4位小数字段对应类型修改

qfws:千分位数

-- Oracle
update workflow_billfield set fielddbtype='number(38,4)',qfws=4 where id=598613
-- SqlServer
update workflow_billfield set fielddbtype='decimal(38,4)',qfws=4 where id=598613
-- MySQL
update workflow_billfield set fielddbtype='decimal(38,4)',qfws=4 where id=598613

注:如果是Oracle数据库,在执行完上述步骤之后,需要提交事务。直接在数据库执行 commit即可

步骤四:参考1.3清除SQL缓存

2.5 多行文本 => 多行文本html字段

以表单【formtable_main_1480】 多行文本【dwb】为例

步骤一:参考1.2备份

步骤二:修改物理表类型

不同数据库多行文本html字段对应类型

数据库类型 多行文本html字段类型
oracle clob
mysql longtext
sqlserver text

修改字段物理表类型:

无表单数据时

-- Oracle
alter table formtable_main_1480 modify (dwb clob);
-- MySQL
alter table formtable_main_1480 modify column dwb longtext;
-- SqlServer
-- 均是text类型,因此不需要修改此表

有表单数据时(Mysql、SqlServer参考无数据修改)

-- Oracle
-- 1、给表中需要修改的字段重命名
alter table formtable_main_1480  rename column dwb to dwb_bak;
-- 2、添加一列字段,名字跟原来字段的名字一致,类型是想修改之后的类型
alter table formtable_main_1480 add dwb clob;
-- 3、把原来的字段的数据,“复制”到新加的字段中
update formtable_main_1480 set dwb = dwb_bak;
-- 4、更新完成删除原字段
alter table formtable_main_1480 drop column dwb_bak;

步骤三:修改逻辑表

不同数据库类型不同,参考多行文本html字段类型修改

-- Oracle
update workflow_billfield set fielddbtype='clob',type = 2 where id=598611
-- SqlServer
update workflow_billfield set type = 2 where id=598611
-- MySQL
update workflow_billfield set fielddbtype='longtext',type = 2 where id=598611

注:如果是Oracle数据库,在执行完上述步骤之后,需要提交事务。直接在数据库执行 commit即可

步骤四:参考1.3清除SQL缓存

2.6 单人力 =>多人力

以表单【formtable_main_1480】 单人力【drl】为例

步骤一:参考1.2备份

步骤二:修改物理表类型

不同数据库多人力字段对应类型

数据库类型 多人力字段类型
oracle clob
mysql text
sqlserver text

修改字段物理表类型:

无表单数据时

-- Oracle
alter table formtable_main_1480 modify (drl clob);
-- MySQL
alter table formtable_main_1480 modify column drl text;
-- SqlServer
alter table formtable_main_1480 alter column drl text;

有表单数据时(Mysql、SqlServer参考无数据修改)

-- Oracle
-- 1、给表中需要修改的字段重命名
alter table formtable_main_1480  rename column drl to drl_bak;
-- 2、添加一列字段,名字跟原来字段的名字一致,类型是想修改之后的类型
alter table formtable_main_1480 add drl clob;
-- 3、把原来的字段的数据,“复制”到新加的字段中
update formtable_main_1480 set drl = drl_bak;
-- 4、更新完成删除原字段
alter table formtable_main_1480 drop column drl_bak;

步骤三:修改逻辑表

不同数据库类型不同,参考多人力字段修改

-- Oracle
update workflow_billfield set fielddbtype='clob',type = 17 where id=602110
-- SqlServer
update workflow_billfield set fielddbtype='text',type = 17 where id=602110
-- MySQL
update workflow_billfield set fielddbtype='text',type = 17 where id=602110

注:如果是Oracle数据库,在执行完上述步骤之后,需要提交事务。直接在数据库执行 commit即可

步骤四:参考1.3清除SQL缓存

3.修改思路分享

适用于DBA
注意:类型修改从小类型=>大类型是支持的,但是大类型=>小类型会丢失精度,操作数据库时需要注意数据不能错

3.1 逻辑表 —— workflow_billfield

该表是字段的逻辑信息表,不存储数据,记录字段的数据库类型、OA表单内类型等等信息
因此针对此表的修改是update

  • 主要关注四个地方需要修改:
    • fielddbtype(字段数据库类型)
    • fieldhtmltype(字段OA显示大类型)
    • type(字段OA显示小类型)
    • qfws(千分位数)
  • 修改时可以新建一个需要修改的字段,对比修改

3.2 物理表 —— formtable_main_1480

该表是物理表,存储OA流程表单该字段的数据,字段在该表上则为列
因此针对此表修改需要alter

4.注意点

image-20201103105347592

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容