Динамический запрос, параметры не работают, где в

Я работаю с динамическими запросами в oracle, и когда я передаю строковый параметр, где находится условие, он не работает.

for x in (
            SELECT DISTINCT column_id
            FROM table
            WHERE column_id in (in_column_ids)          
            /* WHERE column_id in (15,16,17) =>works */
            /* => in_column_ids is a varchar type which 
                  holds comma separated value */
            and column_title=in_column_title /* works */
    )

Здесь, если я сохраню значения непосредственно в этом in_column_ids, запрос будет работать. Но значение, которое передается как параметр, похоже, не работает для where in.

Любая идея ?


person hsuk    schedule 09.05.2013    source источник


Ответы (1)


IMO, вам нужно разделить переменную с разделителями-запятыми, используя regexp_substr. Ваш запрос должен быть таким:

for x in (
            SELECT DISTINCT column_id
            FROM table
            WHERE column_id in (
            SELECT DISTINCT regexp_substr(in_column_ids,'[^,]+', 1, LEVEL) FROM DUAL
            CONNECT BY regexp_substr(in_column_ids, '[^,]+', 1, LEVEL) IS NOT NULL
            )          
            /* WHERE column_id in (15,16,17) =>works */
            /* => in_column_ids is a varchar type which 
                  holds comma separated value */
            and column_title=in_column_title /* works */
    )

Посмотрите SQLFIDDLE DEMO

person Akash KC    schedule 09.05.2013