我有一个名为:col_mapping的Oracle表,其中此表中的列具有另一个表中列的列值。
表格的示例数据: col_mapping
ID DESCR COL_VALS
------------------------------
1 LABEL COL_1
2 NAME_ADDR COL_2:COL_3
3 SALARY COL4
基于上表,我现在想要浏览col_mapping中的每条记录,并在另一个名为 other_tab 的表中使用COL_VALS作为我的WHERE条件的一部分,即:
select 'Y'
from other_tab
where COL_1 = 'whatever1';
select 'Y'
from other_tab
where (COL_2 = 'whatever2' or COL_3 = 'whatever2');
and finally:
select 'Y'
from other_tab
where COL_4 = 'whatever4';
我基本上想将COL_VALS拆分为where条件,并且有多个值冒号分开,将其转换为OR条件,如上例所示。
答案 0 :(得分:0)
未经测试。但我认为这是可以实现的。你需要两个循环。一个循环遍历表col_mapping
,另一个遍历每行的COL_VALS
列并构造where条件。
这样的事情:
DECLARE
a_where_vars APEX_APPLICATION_GLOBAL.VC_ARR2; --you can replace it with your own associative array here
l_where_string VARCHAR2(4000);
BEGIN
For i IN (SELECT id, descr, col_vals FROM col_mapping)
LOOP
a_where_vars := APEX_UTIL.STRING_TO_TABLE(i.col_vals, ':') --split values into array
FOR j IN 1 .. a_where_vars.COUNT LOOP
l_where_string := l_where_string||a_where_vars(j)||' = '||whatever_variable||' OR ';
END LOOP;
--you can remove last OR and clean up l_where_string
--then you query:
EXECUTE IMMEDIATE := '
select ''Y''
from other_tab
where '||l_where_string
END LOOP INTO some_binding_variables;
--other queries.
END;
/