2013-11-22 195 views
1

條款我有這樣在甲骨文

SELECT * FROM ACTITIVY WHERE CODE in ('L','D') 

相反hardcording在參數值我已經創建了一個PARAM表的SELECT查詢。帕拉姆表具有以下值

CODE   | CODE_VAL | ACTIVE 
TRIGGER_XM | 'L','D' | Y 

因此,當我重寫查詢,如下

select * from ops_ACTITIVY WHERE CODE IN ( 
SELECT CODE_VAL FROM OPS_CONFIG_PARAMETER 
WHERE CODE='TRIGGER_XML' AND ACTIVE='Y') 

它不工作,任何想法如何解決這個?

+0

哪個表你真的使用? 'ACTITIVY'或'ops_ACTITIVY'? –

回答

0

你可以嘗試這樣的:

select * from ops_ACTITIVY t1 
WHERE t1.CODE IN (SELECT CODE_VAL FROM OPS_CONFIG_PARAMETER t2 
WHERE t2.CODE='TRIGGER_XML' AND t2.ACTIVE='Y') 
+0

嗨,我試過了,但這不起作用 – Preethi

0

當你正在檢查某個字符串在另一字符串的存在,你可以嘗試這樣的事:

select * from activity a where (
    select instr(b.code_val, a.code) 
    from param b 
    where b.code = 'TRIGGER_XM' 
    AND active = 'Y' 
) > 0; 

但它很可能只只要你有單數密碼就可以工作。

爲我工作在:SQL Fiddle

0

哪個表你真的使用? ACTITIVYops_ACTITIVY

假設這些表都是一樣的,我建議你的參數表具有以下值:

| CODE   | CODE_VAL | ACTIVE | 
| ----------- ----------- ------------- 
| TRIGGER_XM | L   | Y   | 
| TRIGGER_XM | D   | Y   | 

它更易於管理,我覺得更有道理分開的代碼值。 L和D以防你只需要選擇其中一個。

現在,下面的查詢一定會從ops_ACTITIVY表取得與「L」兩碼和「d」值:

select * 
from ops_ACTITIVY 
WHERE CODE IN (SELECT CODE_VAL 
     FROM OPS_CONFIG_PARAMETER 
     WHERE CODE ='TRIGGER_XML' 
     AND  ACTIVE = 'Y');