最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle内联视图更新遇到的问题

来源:动视网 责编:小采 时间:2020-11-09 16:19:46
文档

Oracle内联视图更新遇到的问题

Oracle内联视图更新遇到的问题:遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理。 遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理。 UPDATE ( SELECT /*+ BYPASS_UJVC */ * FROM mvbox_space.music_origi
推荐度:
导读Oracle内联视图更新遇到的问题:遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理。 遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理。 UPDATE ( SELECT /*+ BYPASS_UJVC */ * FROM mvbox_space.music_origi


遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理。

遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理。

UPDATE (

SELECT /*+ BYPASS_UJVC */ *
FROM mvbox_space.music_original t1
INNER JOIN (
SELECT REGEXP_SUBSTR(value_str, '[^,]+', 1, 1) AS p1, REGEXP_SUBSTR(value_str, '[^,]+', 1, 2) AS p2
FROM (
SELECT SUBSTR(inlist, INSTR(inlist, ';', 1, LEVEL) + 1, INSTR(inlist, ';', 1, LEVEL + 1) - INSTR(inlist, ';', 1, LEVEL) - 1) AS value_str, level AS l
FROM (
SELECT ';' || '20077,1;20078,2' || ';' AS inlist
FROM DUAL
)
CONNECT BY LEVEL <= LENGTH('20077,1;20078,2') - LENGTH(REPLACE('20077,1;20078,2', ';', NULL)) + 1
)
) t2 ON t1.opus_id = t2.p1
)
SET visit_num = nvl(visit_num, 0) + p2, total_today = nvl(total_today, 0) + p2, total_this_week = nvl(total_this_week, 0) + p2, total_this_month = nvl(total_this_month, 0) + p2

在测试库10.2.0.1通过.
但是拿到线上10.2.0.4,居然报错,这个内部的HINT没有生效.
后来改写为

MERGE INTO mvbox_space.music_original t1

USING (
SELECT REGEXP_SUBSTR(value_str, '[^,]+', 1, 1) AS p1, REGEXP_SUBSTR(value_str, '[^,]+', 1, 2) AS p2
FROM (
SELECT SUBSTR(inlist, INSTR(inlist, ';', 1, LEVEL) + 1, INSTR(inlist, ';', 1, LEVEL + 1) - INSTR(inlist, ';', 1, LEVEL) - 1) AS value_str, LEVEL AS l
FROM (
SELECT ';' || '20077,1;20078,2' || ';' AS inlist
FROM DUAL
)
CONNECT BY LEVEL <= LENGTH('20077,1;20078,2') - LENGTH(REPLACE('20077,1;20078,2', ';', NULL)) + 1
)
) t2 ON t1.opus_id = t2.p1
WHEN MATCHED THEN UPDATE SET t1.visit_num = NVL(t1.visit_num, 0) + t2.p2, t1.total_today = NVL(t1.total_today, 0) + t2.p2, t1.total_this_week = NVL(t1.total_this_week, 0) + t2.p2, t1.total_this_month = NVL(t1.total_this_month, 0) + t2.p2

文档

Oracle内联视图更新遇到的问题

Oracle内联视图更新遇到的问题:遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理。 遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理。 UPDATE ( SELECT /*+ BYPASS_UJVC */ * FROM mvbox_space.music_origi
推荐度:
标签: 更新 更新的 遇到
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top