2017-06-21 45 views
0

我有一個古怪的問題。我有一個複選框,一個報告表,我想單擊一個複選框或多個複選框來返回結果。在數據庫中,我有一個保存的複選框結果列表,用冒號分隔:Oracle Apex 5 - 複選框列表中where子句不起作用,爲什麼?

除了當我勾選'A'和'C'時,它全部有效。這是數據庫中的第一個也是最後一個結果。我可以單擊A和B或者只是A或者C或C和B,但是當我單擊A和C時它不起作用。

任何線索?

select ... 

from ... 

where 

AND (CASE WHEN :P1_BENEFITS_TAG IS NOT NULL 
    THEN instr(':'|| UPPER(b.BENEFITS_TAGS)||':', 
       ':'|| UPPER(:P1_BENEFITS_TAG) ||':') 
    ELSE 1 
    END) > 0 

enter image description here

回答

2

它看起來像你的數據庫行包含字符串 'A:B:C:'。

當:P1_BENEFITS_TAG是值'A:B','B:C','A','B'或'C'中的任何一個時,數據庫行將「包含」該值,並且您的INSTR表達式將返回數字> 0。

但是,'A:B:C'不包含字符串'A:C',所以INSTR將返回0。

+0

偉大的邏輯解釋,謝謝。你會如何建議我過去呢?我在撓頭 –

+1

我想你可能需要將'P1_BENEFITS_TAG'中的字符串轉換爲值表('A','C') - 參見[regexp_substr示例](https:// blogs。 oracle.com/aramamoo/how-to-split-comma-separated-string-and-pass-to-in-clause-of-select-statement) –

+0

嗨託尼,感謝您的鏈接。我能夠通過使用regexp_subtr和instr @Tony Andrews以一種混亂的方式解決它 –