基于 IN 子句查询 Oracle CLOB 列

Query an Oracle CLOB column based on an IN clause

我有一个 table 具有以下定义:

Table name: MY_TAB

ID          NUMBER,
ACCESS_LVL  CLOB

此 table 中可能存在的一些示例数据如下:

ID: 1
ACCESS_LVL: RoleName-A,RoleName-B,RoleName-C,RoleName-D,RoleName-E

ID: 2
ACCESS_LVL: RoleName-D,RoleName-E

ID: 3
ACCESS_LVL: RoleName-A,RoleName-B,RoleName-C,RoleName-D,RoleName-E,RoleName-F,RoleName-G,RoleName-H

ID: 4
ACCESS_LVL: RoleName-E

我不确定该怎么做的查询是我需要 return 所有可能具有以下 ACCESS_LVL 值的 IDs(其中 ACCESS_LVL 是clob),即

RoleName-B,RoleName-C,RoleName-D

基本上是这样的:

select id
from my_tab
where ('RoleName-B','RoleName-C','RoleName-D') in (ACCESS_LVL)

所以这个例子中的结果就是:

ID
1
2
3

在单个列中存储 comma-separated 值违反了规范化的每条规则。这将使您的查询更难编写并且更慢 运行。你真的应该有一个 1-to-many child table 来存储角色。如果你这样做,你的查询会更有效率。

你可以这样做

select id
  from my_tab
 where ',' || access_lvl || ',' like '%,RoleName-B,%'
    or ',' || access_lvl || ',' like '%,RoleName-C,%'
    or ',' || access_lvl || ',' like '%,RoleName-D,%'

这会非常慢,但它会起作用。