Oracle对数据库字段类型的可重复提交脚本

DECLARE
	cnt integer; 
	tempCnt integer;
	tempCnt2 integer;
BEGIN
	SELECT COUNT(0)
	INTO cnt
	FROM user_tab_columns a
	WHERE a.Table_name = upper('gdt_apply_intermediary')
		AND a.COLUMN_NAME = upper('INTERMEDIARYCOSTS')
		AND a.DATA_TYPE = upper('number')
		AND a.DATA_SCALE = 2;
		
	SELECT COUNT(0)
	INTO tempCnt
	FROM user_tab_columns a
	WHERE a.Table_name = upper('gdt_apply_intermediary')
		AND a.COLUMN_NAME = upper('INTERMEDIARYCOSTS_1');
		
	IF cnt = 0 THEN 
		IF tempCnt = 1 THEN 
			EXECUTE IMMEDIATE 'SELECT COUNT(0) FROM dual WHERE EXISTS (SELECT NULL FROM gdt_apply_intermediary a WHERE a.INTERMEDIARYCOSTS_1 IS NOT NULL)' INTO tempCnt2;
			IF tempCnt2 = 0 THEN
				EXECUTE IMMEDIATE 'ALTER TABLE gdt_apply_intermediary DROP COLUMN INTERMEDIARYCOSTS_1';
				EXECUTE IMMEDIATE 'ALTER TABLE gdt_apply_intermediary ADD (INTERMEDIARYCOSTS_1 integer)';
			END IF;
		ELSE
			tempCnt2 := 0;
			EXECUTE IMMEDIATE 'ALTER TABLE gdt_apply_intermediary ADD (INTERMEDIARYCOSTS_1 integer)';
		END IF;
		
		IF tempCnt2 = 0 THEN
			EXECUTE IMMEDIATE 'UPDATE gdt_apply_intermediary SET INTERMEDIARYCOSTS_1 = INTERMEDIARYCOSTS';
		END IF;
		
		EXECUTE IMMEDIATE 'update gdt_apply_intermediary set INTERMEDIARYCOSTS = null';
		EXECUTE IMMEDIATE 'ALTER TABLE gdt_apply_intermediary MODIFY (INTERMEDIARYCOSTS number(16,2))';
	END IF;
	SELECT COUNT(0)
	INTO tempCnt
	FROM user_tab_columns a
	WHERE a.Table_name = upper('gdt_apply_intermediary')
		AND a.COLUMN_NAME = upper('INTERMEDIARYCOSTS_1');
	IF tempCnt = 1 THEN
		EXECUTE IMMEDIATE 'UPDATE gdt_apply_intermediary SET INTERMEDIARYCOSTS = INTERMEDIARYCOSTS_1';
		EXECUTE IMMEDIATE 'ALTER TABLE gdt_apply_intermediary DROP COLUMN INTERMEDIARYCOSTS_1';
	END IF;
END;
/

相关逻辑:

cnt表示是该字段类型事都已经修改过了,

tempCnt表示是否有临时字段

tmpCnt表示临时字段中是否有值

 

首先判断该字段是否已经修改过,如果没有:

判断是否有临时字段

如果没有临时字段

新建临时字段

如果有临时字段

判断临时字段中是否有值

如果有不做操作

如果没有就记录tmpCnt2 = 0

如果没有临时字段

创建临时字段 并记录tmpCnt2 = 0

如果tmpCnt2 = 0;

复制原字段到临时字段

 

修改字段为需要的类型

复制临时表中的数据过来

删除临时表

(大概是这个意思,这样逻辑是因为字段中有数据就不可以修改字段类型)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值