【问题标题】:Pass Comma Separated String to IN clause in stored procedure将逗号分隔的字符串传递给存储过程中的 IN 子句
【发布时间】:2015-05-27 12:41:27
【问题描述】:

我有逗号分隔的字符串,我将这个逗号分隔的字符串传递给 oracle 存储过程。现在如何处理光标到 IN 子句中的这个字符串。

String codes = "ABCD','EEFF','GGHH";

游标查询就像

    CURSOR cur_bill_cod
   IS
      SELECT a.*
  FROM bill_codes a
 WHERE a.code in (p_codes)  ;

我在过程中将 p_codes 声明为 varchar。

但它没有获取记录。我尝试以另一种方式传递字符串

String codes = "ABCD,EEFF,GGHH";

但是在这两种方式中它都失败了并且它没有抛出任何异常。 你能帮我解决这个问题吗?

【问题讨论】:

  • String codes=" 'ABCD' ,'EEFF', 'GGHH' "; 尝试正确添加单引号!
  • 不,它不工作
  • 有同样的问题,但我在 PL/SQL 中使用了解决方法。阅读:blogs.oracle.com/aramamoo/entry/…
  • 您使用的是哪个 DBMS?后格雷斯?甲骨文?

标签: java stored-procedures


【解决方案1】:

尝试使用:

CURSOR cur_bill_cod
   IS
      SELECT a.*
  FROM bill_codes a
 WHERE a.code in (  
            SELECT CAST (TRIM (REGEXP_SUBSTR (p_codes,
                                '[^,]+',
                                1,
                                LEVEL)) AS VARCHAR2 (30))
                    codes
                FROM DUAL
            CONNECT BY LEVEL <= REGEXP_COUNT (p_codes, ',') + 1) 

【讨论】:

  • 您的代码有问题,我在编译过程时遇到了缺少关键字错误。我还尝试将其作为 (SELECT CAST (TRIM (REGEXP_SUBSTR (p_shipper_codes,'[^,]+',1,LEVEL)) ) from dual ) ;但直到它给出同样的错误
  • 对不起,我已经改变了答案。
猜你喜欢
  • 2014-08-23
  • 1970-01-01
  • 2015-12-29
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
相关资源
最近更新 更多