不使用 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