ALIAS | VALUE |
R1 | 5.7 |
R2 | 2.8 |
R3 | 3 |
... | ... |
ID | DATA |
V01 | R1+R3/3 |
V02 | (R2+R3)*(R1+R3)/5 |
V03 | ... |
고객의 요구사항은 tbl1.alias 로 tbl2.DATA 필드에 수식을 구성해서 그 결과를 얻어야 한다는 겁니다. 제약은 계산항목은 무조건 'R'로 시작한다. 나머지 숫자가 필요한 경우는 숫자를 직접 입력하겠다는 건데... 도무지 방법이 생각나질 않네요. 혹시 저 요구를 처리할 방법이 있을까요?
-- 테스트용 테이블 생성 -- CREATE TABLE tbl1 AS SELECT 'R1' alias, 5.7 value FROM dual UNION ALL SELECT 'R2', 2.8 FROM dual UNION ALL SELECT 'R3', 3 FROM dual ; -- Model 절을 이용한 행간 계산 & dbms_xmlgen 을 이용한 동적쿼리 수행 WITH tbl2 AS ( SELECT 'V01' id, 'R1+R3/3' data FROM dual UNION ALL SELECT 'V02', '(R2+R3)*(R1+R3)/5' FROM dual ) SELECT id , data , TO_NUMBER( dbms_xmlgen.getxmltype ( 'SELECT v' ||' FROM (SELECT *' ||' FROM tbl1' ||' MODEL' ||' DIMENSION BY (CAST(alias AS VARCHAR2(9)) a)' ||' MEASURES (value v)' ||' RULES (v'||'['''||id||''']='||REGEXP_REPLACE(data, '(R[0-9]+)', 'v[''\1'']')||')' ||' )' ||' WHERE a = ''' || id || '''' ).Extract('//text()') ) v FROM tbl2 ;