Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 用CLOB查询_Sql_Oracle_Plsql_Rdbms - Fatal编程技术网

Sql 用CLOB查询

Sql 用CLOB查询,sql,oracle,plsql,rdbms,Sql,Oracle,Plsql,Rdbms,我有一个CLOB类型的“PHOTOIDS”列,它有一个逗号分隔的数字列表。我需要查询所有记录,其中包含一组特定的“photoid”。查询CLOB列中的数字列表的最佳方式是什么 我在寻找语义上类似于 从(1,2,3)中PhotoID所在的表_名称中选择* 只要您有一个相对有限的要搜索的数字列表,这就行了:)我建议您规范化您的设计,并有一个子表来保存photoid。这样会更高效、更简单 如果你不能做到这一点,那么使用过程/函数或动态sql就可以了,如果你想了解更多关于如何使用这两种方法的信息,请告诉

我有一个CLOB类型的“PHOTOIDS”列,它有一个逗号分隔的数字列表。我需要查询所有记录,其中包含一组特定的“photoid”。查询CLOB列中的数字列表的最佳方式是什么

我在寻找语义上类似于

从(1,2,3)中PhotoID所在的表_名称中选择*


只要您有一个相对有限的要搜索的数字列表,这就行了:)

我建议您规范化您的设计,并有一个子表来保存photoid。这样会更高效、更简单


如果你不能做到这一点,那么使用过程/函数或动态sql就可以了,如果你想了解更多关于如何使用这两种方法的信息,请告诉我。

如果不是CLOB列,而是正确的规范化设计,你可以用几种方法来看这个问题:“有限的数字列表”因为“1”将匹配“10”和“11”以及“111”,并且。。。。好吧,不必再赘述了。我的意思是有限的数字数量,例如,如果你对照100个不同ID的列表进行检查,那么它将是无效的。您注意到的问题(1匹配10和11以及111)可以根据数据在clob中的存储方式来解决。如果ID用逗号分隔,那么您可以简单地将条件“dbms_lob.instr(photoids,'1')>0”作为示例。我刚刚将@Skynet指向了正确的函数(dbms_lob.instr),那么“1”将匹配“11”和“21”,等等。我想你明白我的意思了。假设我们要搜索ID为1的实例,那么我们将使用(dbms_lob.instr(photoids',1',)>0或dbms_lob.instr(photoids,'1',)=1)。该子句的前半部分将在光照像场的中间寻找ID 1的出现,而第二部分将从1开始寻找光敏体块。正如我所说,这实际上取决于clob中数据的结构,我的目标是简单地将@Skynet指向正确的函数:)
SELECT * 
FROM table_name 
WHERE dbms_lob.instr(photoids, '1') > 0 
  AND dbms_lob.instr(photoids, '2') > 0
  AND dmbs_lob.instr(photoids, '3') > 0;