使用WHERE子句

时间:2016-05-25 01:17:18

标签: sql plsql oracle11g

我有一个名为: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条件,如上例所示。

1 个答案:

答案 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;
/