Oracle使用MERGE按计数条件更新TABLE1并分插至两张结果表问题
Oracle分表插入需求实现方案
1 更新TABLE1的CNT字段
你可以直接使用关联更新或者MERGE语句完成COLUMN1出现次数的统计更新,正确MERGE写法如下:
MERGE INTO TABLE1 t1 USING ( SELECT COLUMN1, COUNT(*) AS total FROM TABLE1 GROUP BY COLUMN1 ) t_cnt ON (t1.COLUMN1 = t_cnt.COLUMN1) WHEN MATCHED THEN UPDATE SET t1.CNT = t_cnt.total;
也可以用更简洁的UPDATE语句实现:
UPDATE TABLE1 t SET CNT = (SELECT COUNT(*) FROM TABLE1 WHERE COLUMN1 = t.COLUMN1);
执行后TABLE1的CNT字段就会符合你预期的统计结果。
2 按CNT条件分插数据到两张结果表
Oracle原生支持INSERT ALL条件多表插入语法,不需要写两条独立INSERT语句,也不需要用MERGE(Oracle的MERGE单次只能操作一张目标表,这也是你之前执行报错的核心原因),实现代码如下:
INSERT ALL WHEN CNT = 1 THEN INTO RESULT1(COLUMN1, COLUMN2, FREQ) VALUES(COLUMN1, COLUMN2, FREQ) WHEN CNT > 1 THEN INTO RESULT2(COLUMN1, COLUMN2, FREQ) VALUES(COLUMN1, COLUMN2, FREQ) SELECT COLUMN1, COLUMN2, FREQ, CNT FROM TABLE1; -- 事务提交 COMMIT;
执行后就能得到你预期的RESULT1和RESULT2数据。
内容的提问来源于stack exchange,提问作者impstuffsforcse
相关产品推荐
相关产品推荐

