테이블이 2개 있는데 part_usage과 vc_feature 입니다. 실제 정보중 일부를 가져 왔는데요.
part_usage 테이블의 usage속성의 길이는 1000자 이상이 되는 경우도 많고 Partid의 수량도 3000개 이상입니다.
또한 vc_feature 테이블의 feature_list의 5자리 feature수량도 150개 이상입니다.
정상적인 방법으로는 속도를 만족시킬수 없어 여러가지 방법을 찾고 있고 그러는 과정중에 글자 변환 작업을 하고 있습니다.
혹시 전문가님들의 다른 생각이 있으시면 어떤 조언도 감사하게 받겠습니다.
그림을 먼저 참조 해주세요.
1. 첫번째 정보는 제품id(part)와 사용 조건을 결정하는 로직 정보(usage)입니다.
2. 두번째 테이블 정보는 제품의 변형품 id와 사용조건 항목 정보(usage)들 입니다.
feature라고 부르는 5자리 id는 part_usage 테이블의 usage 속성으로 관리됩니다 또한 vc_feature의 feature_list에서는 사용되는 id들 정보가 나타납니다.
input table: part_usage
seq | Partid | usage |
1 | P920 | &13131&15205&12919&15297/15296&13043/12814&13626/13625/13628 |
2 | P5383 | &13131&15289&22100&13647&13517&13540 |
3 | P28 | &13131&15289&22100&13647&13518&13540 |
4 | P2838 | &13131&15289&22100&13648&13517&13540 |
input table: vc_feature
vc_id | feature_list |
VC1 | 13213,13215,13131,13233,13147,13116,13138,15299,15264,15228,15237 |
VC2 | 13213,13215,13233,13147,13116,13138,15289, 13647,15299,15264,15228,15237,15205,15210,15163,15124,15142,15082,15028,14997 |
VC3 | 13213,13215,13233,13147,13116,13138,15299,15264,15228,15237,15205,13540 |
중간 단계 | ||
VC1 | P920 | &S&15205&12919&15297/15296&13043/12814&13626/13625/13628 |
VC1 | P5383 | &S&15289&22100&13647&13517&13540 |
VC1 | P28 | &S&15289&22100&13647&13518&13540 |
VC1 | P2838 | &S&15289&22100&13648&13517&13540 |
VC2 | P920 | &13131&15205&12919&15297/15296&13043/12814&13626/13625/13628 |
VC2 | P5383 | &13131&S&22100&S&13517&13540 |
VC2 | P28 | &13131&S&22100&S&13518&13540 |
VC2 | P2838 | &13131&S&22100&13648&13517&13540 |
VC3 | P920 | &13131&S&12919&15297/15296&13043/12814&13626/13625/13628 |
VC3 | P5383 | &13131&15289&22100&13647&13517&S |
VC3 | P28 | &13131&15289&22100&13647&13518&S |
VC3 | P2838 | &13131&15289&22100&13648&13517&S |
마지막 단계에서는 feature id가 S로 매칭이 되지않은것은 - 표시해 줍니다.
마지막 단계 table: result | ||
VC1 | P920 | &S&-&-&-/-&-/-&-/-/- |
VC1 | P5383 | &S&-&-&-&-&- |
VC1 | P28 | &S&-&-&-&-&- |
VC1 | P2838 | &S&-&-&-&-&- |
VC2 | P920 | &-&-&-&-/-&-/-&-/-/- |
VC2 | P5383 | &-&S&-&S&-&- |
VC2 | P28 | &-&S&-&S&-&- |
VC2 | P2838 | &-&S&-&-&-&- |
VC3 | P920 | &-&S&-&-/-&-/-&-/-/- |
VC3 | P5383 | &-&-&-&-&-&S |
VC3 | P28 | &-&-&-&-&-&S |
VC3 | P2838 | &-&-&-&-&-&S |
SET DEFINE OFF; WITH part_usage AS ( SELECT 1 seq, 'P920' Partid, '&13131&15205&12919&15297/15296&13043/12814&13626/13625/13628' usage FROM dual UNION ALL SELECT 2, 'P5383', '&13131&15289&22100&13647&13517&13540' FROM dual UNION ALL SELECT 3, 'P28' , '&13131&15289&22100&13647&13518&13540' FROM dual UNION ALL SELECT 4, 'P2838', '&13131&15289&22100&13648&13517&13540' FROM dual ) , vc_feature AS ( SELECT 'VC1' vc_id, '13213,13215,13131,13233,13147,13116,13138,15299,15264,15228,15237' feature_list FROM dual UNION ALL SELECT 'VC2', '13213,13215,13233,13147,13116,13138,15289,13647,15299,15264,15228,15237,15205,15210,15163,15124,15142,15082,15028,14997' FROM dual UNION ALL SELECT 'VC3', '13213,13215,13233,13147,13116,13138,15299,15264,15228,15237,15205,13540' FROM dual ) SELECT b.vc_id , a.seq , a.Partid , REGEXP_REPLACE(REGEXP_REPLACE(a.usage , REPLACE(b.feature_list, ',', '|'), 'S') , '[0-9]{5}', '-') x FROM part_usage a , vc_feature b ORDER BY b.vc_id, a.seq ;