E9流程表单修改字段类型
1.说明(必读)
1.1 识别字段id
- 方式一:使用谷歌浏览器登录,编辑字段页面,鼠标放到字段上,左下角显示的数字即为字段的id

- 方式二:在模板上查看(若明细表的字段查看不到,使用上面的方法即可)

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,点击重新加载配置

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.注意点

本文发布于 40 天前,内容仍有参考价值
评论
请先登录后再评论
登录