Как передать несколько строковых значений через переменную связывания через Oracle, разделенный запятыми - PullRequest
0 голосов
/ 26 августа 2018
SELECT a.gl_account, g.gl
    from et_bp_gl_account a,et_bp_gl g
    where a.gl_id=g.gl_id
    and g.gl in (select replace(:P117_GL,':',',')  from et_bp_gl )

----- Вот код, который я использую для передачи нескольких значений через переменную связывания, например, (Asset Mg: Finance) подзапрос, который должен вернуть ( Asset Mg, Finance ), заменив ':' на ',', но он не работает и возвращает

дата не найдена

Использование Oracle Sql

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Нет необходимости в регулярном выражении

select * from table(apex_string.split('1:2:3',':'));

Таким образом, ваш запрос может выглядеть следующим образом:

SELECT a.gl_account, g.gl
from et_bp_gl_account a,et_bp_gl g
where a.gl_id=g.gl_id
and g.gl in (select column_value
             from table(apex_string.split(:P117_GL,':'))
            )

Меня не удивит, если это еще больше упростится

0 голосов
/ 26 августа 2018

Апекс, а?Это либо пункт шаттла, либо элемент выбора, который позволяет множественный выборВ любом случае, вы должны разбить этот список, разделенный двоеточиями, на строки, примерно так:

SELECT a.gl_account, g.gl
from et_bp_gl_account a,et_bp_gl g
where a.gl_id=g.gl_id
and g.gl in (select regexp_substr(:P117_GL, '[^:]+', 1, level)
             from dual
             connect by level <= regexp_count(:P117_GL, ':') + 1
            )
...