【发布时间】:2020-09-25 21:55:58
【问题描述】:
我正在尝试在 regexp_substr 函数中使用 CLOB 变量,如下所示
UPDATE TableName
SET Tab_DATE = SYSDATE
WHERE Tab_ID IN (
select regexp_substr(clob_variable,'[^~]+', 1, level) from dual
connect by regexp_substr(clob_variable, '[^~]+', 1, level) is not null
)
clob_variable 是 CLOB 类型,包含 ~ 分隔的 id。
执行更新语句时出现以下错误:
ORA-00932: inconsistent datatypes: expected - got CLOB
我们可以将 CLOB 与 RegExp 一起使用吗?如果没有,有没有办法将 CLOB 值转换为表格格式?
【问题讨论】:
-
问:我们可以将 CLOB 与 RegExp 一起使用吗?答:没有。 问:有什么方法可以将 CLOB 值转换为表格格式? A: 所以你想对 table 应用一个正则表达式???答:您可以做的就是将CLOB 转换为字符串。例如,
SELECT dbms_lob.substr( my_clob, 4000, 1 ) FROM my_table; -
谢谢.. 但是如果我将 CLOB 转换为字符串,它会占用所有值吗?我想从 CLOB 变量生成临时表。因为我的 CLOB 有 ~ 分隔的 ID。此外,我将在更新语句中使用这个临时表。
-
您不能将正则表达式应用于 CLOB。我建议了另一种选择,Barbaros Özhan 给了你另一种。建议:您可能想重新审视您的数据设计。听起来你放在 CLOB 中的东西可能首先应该是单独的列和/或单独的表:(
-
tab_id 是数字数据类型吗?你的 oracle 版本是什么?
-
@paulsm4 regexp_substr 支持 clob:docs.oracle.com/cd/B12037_01/server.101/b10759/functions116.htm 但它返回 clob