think about how most lobs are created
a) empty or partial lob inserted
b) remaining lob data is streamed into lob, since they are big by definition
eg:
ops$tkyte%ORA10GR2> create table t ( x int, y clob );
Table created.
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> create or replace trigger t
2 before insert on t for each row
3 begin
4 dbms_output.put_line( :new.x || ', ' || :new.y );
5 end;
6 /
Trigger created.
ops$tkyte%ORA10GR2>
ops$tkyte%ORA10GR2> declare
2 l_clob clob;
3 begin
4 insert into t values ( 1, empty_clob() ) returning y into l_clob;
5 dbms_lob.writeAppend( l_clob, length('hello world'), 'hello world' );
6 end;
7 /
1,
PL/SQL procedure successfully completed.
the trigger fires for the insert, but won't fire on subsequent "lob operations"
so, triggers that access lobs are virtually useless.