在 Oracle 数据库中搜索 Long 数据类型的最佳方法是什么?
我正在使用将 HTML 存储为 Long 数据类型的 Oracle 数据库。 我想查询数据库以搜索存储在 Long 中的 HTML 数据中的特定字符串。
我尝试过“从表中选择*,其中列如'%form%'”。 这会导致以下 Oracle 错误,因为 Long 数据类型不支持“like”。
ORA-00932: 数据类型不一致: 预期的 NUMBER 变为 LONG
I am working with an Oracle database that stores HTML as a Long datatype. I would like to query the database to search for a specific string within the HTML data stored in the Long.
I tried, "select * from TABLE where COLUMN like '%form%'". This causes the following Oracle error because "like" is not supported for Long datatypes.
ORA-00932: inconsistent datatypes: expected NUMBER got LONG
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您可以在不使用临时表的情况下使用此示例:
当然,如果 LONG 超过 32K 字符,则会出现问题。
You can use this example without using temp table:
Of course there is a problem if LONG has more than 32K characters.
您不能直接搜索 LONG。 LONG 不能出现在 WHERE 子句中。 不过,它们可以出现在 SELECT 列表中,因此您可以使用它来缩小必须检查的行数。
Oracle 建议至少在过去的 2 个版本中将 LONG 转换为 CLOB。 对 CLOB 的限制较少。
You can't search LONGs directly. LONGs can't appear in the WHERE clause. They can appear in the SELECT list though so you can use that to narrow down the number of rows you'd have to examine.
Oracle has recommended converting LONGs to CLOBs for at least the past 2 releases. There are fewer restrictions on CLOBs.
示例:
但是要小心。 PL/SQL 函数将仅搜索 LONG 的前 32K。
Example:
But be careful. A PL/SQL function will only search the first 32K of LONG.
首先将
LONG
类型列转换为CLOB
类型,然后使用LIKE
条件,例如:First convert
LONG
type column toCLOB
type then useLIKE
condition, for example:不要使用 LONG,而使用 CLOB。 您可以像 VARCHAR2 一样对 CLOB 进行索引和搜索。
此外,使用前导通配符 (%) 进行查询将始终导致全表扫描。 请查看 Oracle Text 索引。
Don't use LONGs, use CLOB instead. You can index and search CLOBs like VARCHAR2.
Additionally, querying with a leading wildcard(%) will ALWAYS result in a full-table-scan. Look into Oracle Text indexes instead.