在插入之前读取 CLOB,更新触发器

Reading CLOB in before insert,update trigger

我正在尝试在 Oracle 中的 table 上创建插入和更新之前的触发器。 在尝试阅读 NEW.CLOB_COLUMN_VALUE 时,它让我一片空白。

Table:

CREATE TABLE TEMP_TEST101
(
  ID               NUMBER(2),
  TEST_CLOB_VALUE  CLOB
)

触发器:

CREATE OR REPLACE TRIGGER TR_Temp_Test101
BEFORE INSERT OR UPDATE
ON Temp_Test101 FOR EACH ROW
DECLARE
BEGIN

If (:NEW.TEST_CLOB_VALUE = 'A')
Then
    raise_application_error(-20010,'Testing Successfull');
End IF;

raise_application_error(-20010,'Testing Failed:['||:NEW.TEST_CLOB_VALUE||']');


END TR_Temp_Test101;
/

尝试插入后提示:

ORA-20010: Testing Failed:[]

有什么方法可以让我们阅读 insert/update 之前的 :NEW.TEST_CLOB_VALUE 吗?

要求在insert/update之前验证CLOB列的数据。

因为它是 clob 列,您需要检查条件

dbms_lob.substr(:NEW.TEST_CLOB_VALUE,1,1) = 'A'

查看演示:

CREATE OR REPLACE TRIGGER TR_Temp_Test101
   BEFORE INSERT OR UPDATE
   ON Temp_Test101
   FOR EACH ROW
DECLARE
BEGIN
   IF (dbms_lob.substr(:NEW.TEST_CLOB_VALUE,1,1) = 'A')
   THEN
      raise_application_error (-20010, 'Testing Successfull');
   END IF;

   raise_application_error (
      -20010,
      'Testing Failed:[' || :NEW.TEST_CLOB_VALUE || ']');
END TR_Temp_Test101;

执行:

SQL> Insert into TEMP_TEST101 values(1,'A');
Insert into TEMP_TEST101 values(1,'A')
            *
ERROR at line 1:
ORA-20010: Testing Successfull
ORA-06512: at "TR_TEMP_TEST101", line 5
ORA-04088: error during execution of trigger 'TR_TEMP_TEST101'