2013-10-23 46 views
1

我想在sys_context窗體中使用數據在WHERE子句中執行匹配。使用sys_context匹配數據字符串

我在上下文中放置的是('53','89'),這是我選擇對抗雙重時返回的內容。

我的WHERE語句爲:其中TO_CHAR(LOCATION_ID)在SYS_CONTEXT(「my_ctx」,「valoc」)

由於我沒有收到預期的反應,我猜,我認爲甲骨文應該看到實際上並不是它所看到的,但我不知道如何「查看」從TOAD傳遞給處理器的內容。

原始形式是其中的位置在sys_context('my_ctx','valoc')與(53,89)中的valoc,但也沒有返回任何東西。我感覺到我的問題可能沒有答案。

回答

1

的問題是,所產生的WHERE條款是相同的:

where to_char(location_id) in '('53','89')' 

(沒有加倍清晰內撇號)

數據庫看到什麼根據上下文檢索爲單個值,而不是作爲價值清單。

可以使用CONNECT BY怎麼實現自己的目標:

SELECT 1 
    FROM dual 
WHERE '53' IN (-- replace '53' with TO_CHAR(location_id) 
    SELECT regexp_substr('53,89', '[0-9]*', 1, level) -- replace '53,89' with sys_context('my_ctx','valoc') 
    FROM dual 
    CONNECT BY regexp_substr('53,89', '[0-9]*', 1, level) IS NOT NULL -- replace '53,89' with sys_context('my_ctx','valoc') 
);