在插入之前读取 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'
我正在尝试在 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'