【发布时间】:2021-06-18 13:25:05
【问题描述】:
该列包含用逗号分隔的数据。
我在存储过程中传递逗号分隔值作为参数。
我想看到如下输出
如果我通过 "Abc,Ple" - 返回的行数将是 1,3,4,5
如果我通过“Abc” - 返回的行数将是 4,5
如果我通过“App” - 返回的行数将是 1,2,5
如何在 Oracle 中完成此任务? 如果我通过 "App,Ple" - 返回的行数将是 1,2,3,4,5
【问题讨论】:
-
最近几天似乎在各种甲骨文论坛上出现了这种情况。在单个列中使用逗号分隔的值列表是一个基本的设计缺陷。它违反了第一范式,这绝对是关系数据理论的基础。根据数据的实际业务性质,这些以逗号分隔的值应分别位于其自己的列中,或者(更有可能)位于子表的它们自己的行中。当您的表格正确规范化为第三范式时,您的问题就变得微不足道了。
-
我同意你的观点,它违反了基本的设计缺陷。但是,这是一个非常旧的数据库,不想将数据移动到新表中。但是,逗号分隔的列不会很大。它最多包含 4 或 5 个逗号
-
你说它是一个旧数据库。它是什么版本?在 Oracle 中有很多不同的方法来标记 CSV 字符串,但在旧版本的产品中选项范围缩小了。