Plsql 使用dbms_lob.compare比较CLOB,没有得到我想要的结果

Plsql 使用dbms_lob.compare比较CLOB,没有得到我想要的结果,plsql,Plsql,不用于使用dbms_lob.compare,因此更新工作正常,但是当它到达IF语句时,看起来像只在支持替换时执行相同的操作,如下图所示 我的PL/SQL代码: CREATE OR REPLACE PROCEDURE teste IS aux CLOB; cnt NUMBER := 0; cnt1 NUMBER := 0; BEGIN FOR rec IN (SELECT xxxx) LOOP aux := rec.VALUE;

不用于使用dbms_lob.compare,因此更新工作正常,但是当它到达IF语句时,看起来像只在支持替换时执行相同的操作,如下图所示

我的PL/SQL代码:

CREATE OR REPLACE PROCEDURE teste
IS
   aux CLOB;
   cnt NUMBER := 0;
   cnt1 NUMBER := 0;      
BEGIN
   FOR rec IN (SELECT  xxxx)
     LOOP
      aux := rec.VALUE;
        UPDATE db
        SET VALUE = TO_CLOB(deletexml(
        xmltype(VALUE),
        '//*:getPaymentDetailsResponse/*:Payment/*:childs[./*:status[text()="Failed"]]'
        ))
        WHERE id=rec.gb_ID;
          --Teste
          IF DBMS_LOB.compare(rec.VALUE, aux) = 0 THEN      
            DBMS_OUTPUT.put_line('### ORDERS NOT CHANGED ###');            
            cnt1 := cnt1 + 1;  --count orders without any change
            DBMS_OUTPUT.put_line(cnt1 || '- ' || rec.ORDER_PUBLIC_ID);
          ELSE
            DBMS_OUTPUT.put_line('### ORDERS CHANGED ###');
            cnt := cnt +1;  --count changed orders
            DBMS_OUTPUT.put_line(cnt || '- ' || rec.ORDER_PUBLIC_ID);
          END IF;  
     END LOOP;
   -- Print count results
   DBMS_OUTPUT.put_line('Orders without changing: '|| cnt1 || ' orders.');
   DBMS_OUTPUT.put_line('Orders updated: '|| cnt || ' orders.');
END;
/
这是我目前得到的:

订单未更改 1-160000

订单未更改 2-160000

订单未更改 3-160313

订单未更改 4-160313

我想发生的事:

命令改变了 1-160000

订单未更改 2-160000

命令改变了 3-160313

订单未更改
4-160313

创建光标时,它是运行select时存在的数据的快照。在游标执行期间所做的任何表更改都不会反映在游标中。有关更多详细信息,请参阅

因此,您需要更新光标的基表(我假设您没有显示实际的select)

然后使用光标中的详细信息进行比较

IF DBMS_LOB.compare(rec.VALUE, aux) = 0 THEN

由于光标是一个快照,它将始终以未更改的状态返回,因此必须从基表中重新选择该值,或使用SQL%ROWCOUNT检查更新状态是否影响任何行(请参阅),以了解如何使用该值的详细信息

欢迎来到堆栈溢出。您能否澄清您看到的行为以及您期望/希望看到的行为?
IF DBMS_LOB.compare(rec.VALUE, aux) = 0 THEN