Sql 如何在Oracle中替换字符串?

Sql 如何在Oracle中替换字符串?,sql,oracle,performance,plsql,replace,Sql,Oracle,Performance,Plsql,Replace,从前端用户将输入多个员工编号123456789,以便在应用程序中搜索。用户输入数据的方式 员工编号是预定义的,如上所述 必须在PL/SQL包中的Oracle数据库表中搜索此值 我已经编写了如下代码来格式化输入的值,以便可以在SQLWHERE条件中对其进行搜索 lv_where := REPLACE( REPLACE( REPLACE( '(123,456,789)', ',', ''',''' ), '(', '(''') , ')', ''')') 输出为:“123”、“456”、“789

从前端用户将输入多个员工编号123456789,以便在应用程序中搜索。用户输入数据的方式 员工编号是预定义的,如上所述

必须在PL/SQL包中的Oracle数据库表中搜索此值

我已经编写了如下代码来格式化输入的值,以便可以在SQLWHERE条件中对其进行搜索

lv_where := REPLACE( REPLACE(  REPLACE( '(123,456,789)', ',', ''',''' ), '(', '(''') , ')', ''')')
输出为:“123”、“456”、“789”


有更好的方法吗?

除非是动态SQL,否则这样的LVU将无法工作。我建议您将输入的值拆分成行,并在查询中使用它们

在下面的示例中,par_emp表示用户输入的值。基本上,您需要从第3行开始

SQL> with test (par_emp) as
  2    (select '(10,20,30)' from dual)
  3  select deptno, ename
  4  from emp
  5  where deptno in (select regexp_substr(replace(replace(par_emp, '(', ''), ')', ''), '[^,]+', 1, level)
  6                   from test
  7                   connect by level <= regexp_count(par_emp, ',') + 1
  8                  )
  9  order by deptno;

    DEPTNO ENAME
---------- ----------
        10 CLARK
        10 KING
        10 MILLER
        20 JONES
        20 FORD
        20 ADAMS
        20 SMITH
        20 SCOTT
        30 WARD
        30 TURNER
        30 ALLEN
        30 JAMES
        30 BLAKE
        30 MARTIN

14 rows selected.

SQL>
你可以用


是的,但是-这对OP所说的没有帮助-在WHERE子句中使用它:但是他没有说,他在WHERE子句中如何使用它。也许他使用动态sql:
regexp_replace('(123,456,789)','([[:digit:]]+)','''\1''')
Result:
('123','456','789')