【问题标题】:How to look for words in a CLOB如何在 CLOB 中查找单词
【发布时间】:2020-03-20 06:54:17
【问题描述】:

我已经在这个过程中玩了一段时间并且使用了INSTR(),并且在此之前从未遇到任何问题 现在。 a.review 是一个 CLOB,INSTR() 在一个简单的 SELECT 语句中起作用。

DECLARE
lv_hotel NUMBER;
seed_cnt NUMBER;
lv_cat NUMBER;
lv_pol NUMBER;
f NUMBER;
BEGIN
FOR f IN 1..4176
LOOP
SELECT a.IDHotel ,DBMS_LOB.INSTR(a.review, b.seed_words), b.CATEGORYID, SUM(b.Polarity) 
                    INTO lv_hotel, seed_cnt, lv_cat, lv_pol
                      FROM review a, SEEDWORDS b
                      GROUP BY a.IDHOTEL, b.CategoryID, DBMS_LOB.INSTR(a.review, b.seed_words), a.review, b.seed_words;
                    FOR lv_cat IN 1..4
                    LOOP
                    INSERT INTO RATINGS (RATING)
                    VALUES(lv_pol);
                    END LOOP;
                    END LOOP;                   
                END;

当我运行上面的代码时,我得到如下所示的错误:

 Error report -
ORA-00932: inconsistent datatypes: expected - got CLOB
ORA-06512: at line 11
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:

这附近有吗?我应该使用 REGEX 函数吗?

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    DBMS_LOB.INSTR

    INSTR 函数

    这个函数返回第n个匹配的位置 LOB 中模式的出现,从您的偏移量开始 指定。

    更新:

    我从来没有意识到你在做group by a.review。不能在 group by 子句中使用 CLOB 列。除非您将其转换为 varchar2,否则无法解决。这个逻辑需要重新考虑。

    【讨论】:

    • 我将 INSTR(a.review, b.seed_words) 更改为 DBMS_LOB.INSTR(a.review, b.seed_words) 并且仍然恢复了相同的错误。有什么我可能错过的吗?
    • b.seed_words的数据类型是什么?
    • 只是为了确保 - 您也在 group by 中更改了它,对吗? :)
    • 我已将帖子中的代码编辑为我尝试过的内容。是的,我在组中更改了它
    • 哦。没关系,我刚刚意识到。你在group by 中有a.review。您不能按 clob 列分组。查询逻辑将需要更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多