0

我想将此变量拆分为可能,以便在 PLSQL 中处理 IN 子句中的限制。

SELECT codeid from code table where codename in (code_string);

code_string 的值类似于 'abc1',abc2','abc3'.....abc175000

所以我想code_string应该分成 1000 个代码组并提供给查询,所以 IN 子句的限制是句柄。

查询看起来像这样

SELECT codeid from code table where codename in ('abc1',abc2','abc3'.....abc1000);

请提供解决方案。

4

1 回答 1

0

您可以使用CONNECT BYandregexp_substr来拆分字符串,例如:

WITH
  test_data AS (
    SELECT 'abc' AS val FROM dual
    UNION SELECT 'abc1' FROM dual
    UNION SELECT 'abc2' FROM dual
  )
SELECT *
  FROM test_data
WHERE
  val IN (
    SELECT regexp_substr('abc1,abc2,abc3', '[^,]+', 1, level) FROM dual
    CONNECT BY regexp_substr('abc1,abc2,abc3', '[^,]+', 1, level) IS NOT NULL
);

CONNECT BYand将regexp_substr标记输入字符串,您将能够使用IN子句中的结果集。

输出:

价值
----
abc1
abc2

SQLFiddle 示例

于 2013-11-05T12:20:02.887 回答