oracel数据库搬家总结

  1. 使用pls|sql对oracel的基本sql进行了扩展
    使用plsql对含有大字段的数据进行迁移 ,
    前提:(1) 数据量很大; (2)存在blog或者clob字段里面存放的数据值很大; (3)两个表的字段不对应
根据每天的数据量来实现数据迁移
DECLARE
	v_num NUMBER := 0 ; i NUMBER := 0 ;
BEGIN
	-- 循环
	loop 
	-- IF i == 0 THEN
	-- 	-- 手动开启事务 tran
	-- SET TRANSACTION NAME 'tran' ;
	-- END
    -- IF ;
-- 开启事务    
SET TRANSACTION NAME 'tran' ;
INSERT INTO "F_COMPARE_PHOTO" (
	"GUID",
	"HISTORY_GUID",
	"PHOTO_ID",
	"PHOTO_USER",
	"PHOTO_CHIP",
	"CREATE_TIME",
	"ID_PHOTO" ,
	"USER_PHOTO"
) (
	SELECT
		"GUID",
		"HISTORY_GUID",
		NULL AS "PHOTO_ID",
		NULL AS "PHOTO_USER",
		NULL AS "PHOTO_CHIP",
		"CREATE_TIME",
		"PHOTO_ID" AS "ID_PHOTO" ,
		NULL AS "USER_PHOTO"
	FROM
		T_COMPARE_HISTORY_PHOTO
-- 条件中是绑定一天的数据,搬迁完一天的数据,时间会加一天
	WHERE
		CREATE_TIME BETWEEN (
			TO_DATE (
				'2016-11-10 00:00:01',
				'yyyy-mm-dd hh24:mi:ss'
			) + v_num
		)
	AND (
		TO_DATE (
			'2016-11-10 00:00:00',
			'yyyy-mm-dd hh24:mi:ss'
		) + 1 + v_num
	)
) ; 
v_num := v_num + 1 ;
 i := i + 1 ; 
 -- IF i == 100 THEN
-- 	-- 手动开启事务 tran
-- 	i := 0 ; COMMIT ;
-- END
-- IF ; 
-- 提交事务
COMMIT ;
 exit
-- 当最终日期,到达设定的日期,就停止搬迁,因为我的老数据还在新增,所以为了后续搬迁,设置了时间节点
WHEN (
	TO_DATE (
		'2016-11-10 00:00:00',
		'yyyy-mm-dd hh24:mi:ss'
	) + v_num
) > "TO_DATE" (
	'2018-09-16 00:00:00',
	'yyyy-mm-dd hh24:mi:ss'
) ;
END loop ;
-- 这个提交事务,可以不写,是留给批量提交用的,就是注释的那部分
COMMIT ;
END ;
  1. 用到的条件语句decode
-- 最终表 成功 --> 0    失败--> 2    未验证 -->-1(这里还是,保留原来的值,不改成-1了)
-- 目前表 成功 --> null 失败--> null 未验证 (自己本身存在值)
-- 0--> 2   1 --> 0  -1 --> -1
DECODE (t1."SUCCESS", '0', '2','1', '0', -1) AS RETURN_CODE,
  1. 查询重复值并删除保留一个
SELECT *

  FROM TABLE_NAME A

 WHERE ROWID  NOT IN (SELECT MAX(ROWID)

                   FROM TABLE_NAME D

                  WHERE A.COL1 = D.COL1

                    AND A.COL2 = D.COL2);
DELETE FROM TABLE_NAME

WHERE ROWID NOT IN (SELECT MAX(ROWID)

                   FROM TABLE_NAME D

                  group by d.col1,d.col2);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值