SELECT A.*
,REPLACE(TEXT, PARAM_NAME ,
dbms_xmlgen.getxmltype('SELECT '|| A.db_column ||' FROM B WHERE code='''|| A.code||'''' ).Extract('//text()')
)
FROM A
WITH a AS
(
SELECT 'P1' param_name, 'AAA' db_column, 'P1 P2 P3' text, 'ABCD' code FROM dual
UNION ALL SELECT 'P2', 'BBB', 'P1 P2 P3', 'ABCD' FROM dual
UNION ALL SELECT 'P3', 'CCC', 'P1 P2 P3', 'ABCD' FROM dual
)
, b AS
(
SELECT 'ABCD' code, '111' aaa, '222' bbb, '333' ccc FROM dual
)
-- 어차피 컬럼명은 몇가지로 한정되어 있겠지요...
SELECT a.code
, a.param_name
, a.db_column
, b.aaa, b.bbb, b.ccc
, a.text
, REPLACE(a.text, a.param_name
, DECODE(a.db_column, 'AAA', b.AAA, 'BBB', b.BBB, 'CCC', b.CCC)
) text2
FROM a, b
WHERE a.code = b.code
;
아.. 괜히 어렵게 생각했네요.. 간단한데..