如何通过逗号分隔的Oracle SQL通过绑定变量传递多个字符串值

时间:2018-08-26 10:16:41

标签: sql oracle oracle-apex

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,财务),将“:”替换为“,”,但此方法无效并返回

  

找不到日期

     

使用Oracle Sql

2 个答案:

答案 0 :(得分:0)

顶点,是吗?既可以是穿梭项目,也可以是允许多项选择的选择项目。无论如何,您应该将以冒号分隔的列表分成几行,如下所示:

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
            )

答案 1 :(得分:0)

无需正则表达式

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,':'))
            )

如果可以进一步简化,这不会令我惊讶