:salut:
est il possible de comparer la similaritée de 2 blob, nottament dans le code d'un trigger ? (o10g)
marche po ...Code:
1
2
3
4 if (:NEW.MONBLOB <> :OLD.MONBLOB) Then :NEW.MONBLOB_A_CHANGE:= 1; End if;
merci :-)
Version imprimable
:salut:
est il possible de comparer la similaritée de 2 blob, nottament dans le code d'un trigger ? (o10g)
marche po ...Code:
1
2
3
4 if (:NEW.MONBLOB <> :OLD.MONBLOB) Then :NEW.MONBLOB_A_CHANGE:= 1; End if;
merci :-)
Code:
1
2
3
4
5
6
7
8 DBMS_LOB.COMPARE ( lob_1 IN BLOB, lob_2 IN BLOB, amount IN INTEGER := 4294967295, offset_1 IN INTEGER := 1, offset_2 IN INTEGER := 1) RETURN INTEGER;
Il faut aussi savoir qu'un trigger n'est pas obligatoirement déclenché lorsque une colonne CLOB/BLOB est mise à jour: cela dépend du type de mise à jour.
Exemple:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 dev001> dev001> set serveroutput on; dev001> set long 10 dev001> set null N_U_L_L dev001> dev001> select * from v$version; BANNER ---------------------------------------------------------------- Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod PL/SQL Release 10.2.0.2.0 - Production CORE 10.2.0.2.0 Production TNS for 32-bit Windows: Version 10.2.0.2.0 - Production NLSRTL Version 10.2.0.2.0 - Production dev001> dev001> drop table t; Table dropped. dev001> dev001> create table t (x int, y clob); Table created. dev001> dev001> create trigger tau 2 after update on t 3 for each row 4 begin 5 dbms_output.put_line('<<trigger after update>>'); 6 end; 7 / Trigger created. dev001> show errors No errors. dev001> dev001> create trigger tbu 2 before update on t 3 for each row 4 begin 5 dbms_output.put_line('<<trigger before update>>'); 6 end; 7 / Trigger created. dev001> show errors No errors. dev001> dev001> insert into t values (1, '111'); 1 row created. dev001> update t set y='222' where x=1; <<trigger before update>> <<trigger after update>> 1 row updated. dev001> select * from t; X Y ---------- ---------- 1 222 dev001> update t set y=empty_clob() where x=1; <<trigger before update>> <<trigger after update>> 1 row updated. dev001> select * from t; X Y ---------- ---------- 1 N_U_L_L dev001> commit; Commit complete. dev001> dev001> declare vcl clob; 2 begin 3 select y into vcl from t where x=1 for update; 4 dbms_lob.write(vcl, 3, 1, '333'); 5 commit; 6 end; 7 / PL/SQL procedure successfully completed. dev001> show errors No errors. dev001> select * from t; X Y ---------- ---------- 1 333 dev001> dev001> exit
Merci pour ces réponses rapides, clair et détaillé :-) :king: