안녕하세요
실제 코드는
ccc = a.aaa × b.bbb 라는 계산식으로 패키지 내에서 사용중인데
조건에 따라 계산식이 변경될때 소스 수정을 안하게 하려고
db 컬럼에 a.aaa×b.bbb라고 넣어놓고
패키지 내에서 계산식을 그대로 불러와서
ccc 변수에 넣고 싶은데 도무지 방법이 떠오르질 않네요
계산식은 조건에 따라 바뀌는데 불러와서 계산하는 방법이 있을까요?
고수분들의 조언 부탁드립니다.
감사합니다.
SELECT str , TO_NUMBER( dbms_xmlgen.getxmltype( 'SELECT ' || str || ' FROM dual' ).Extract('//text()') ) AS result FROM (SELECT '120 * 30' str FROM dual) ;
마농님 답변 감사합니다.
해당 쿼리는 사이트 검색으로 본적이 있는데 적용이 안되서 보류했던 쿼리였네요.
쿼리를 DB에서 아래처럼 조회를 하고
v_query := 'a.aaa * b.bbb';
v_sql := 'SELECT ' || v_query || ' FROM DUAL';
EXECUTE .... v_sql ....;
이런식으로 사용하려고 했는데
어떻게 하든 계산식 자체를 문자 변수에 넣는 순간 컬럼에 있는 값을 불러오는게 아니고
a.aaa, b.bbb 문자열 자체로 가져와서 답답한 상황입니다.
아래처럼 되버리더라구요.
SELECT str
, TO_NUMBER( dbms_xmlgen.getxmltype( 'SELECT ' || str || ' FROM dual' ).Extract('//text()') ) AS result
FROM (SELECT 'a.aaa*b.bbb' str FROM dual)
;
FROM 절에 a 와 b 테이블이 있어야죠.
SELECT str , TO_NUMBER( dbms_xmlgen.getxmltype( 'SELECT ' || str || ' FROM (SELECT 3 aaa FROM dual) a' || ', (SELECT 4 bbb FROM dual) b' ).Extract('//text()') ) AS result FROM (SELECT 'a.aaa*b.bbb' str FROM dual) ;