基于 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,%'
这会非常慢,但它会起作用。
我有一个 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,%'
这会非常慢,但它会起作用。