Bonjour,
J'aimerais savoir s'il existe un moyen (p.ex une fonction), pour connaître, en étant dans un trigger:
- - le nom de celui-ci
:
- de quelle table celui-ci dépend:
- de quel schema celui-ci depend:
Merci d'avance!
Bonjour,
J'aimerais savoir s'il existe un moyen (p.ex une fonction), pour connaître, en étant dans un trigger:
- - le nom de celui-ci
:
- de quelle table celui-ci dépend:
- de quel schema celui-ci depend:
Merci d'avance!
Avec le nom du trigger, vous pouvez retrouver les infos le concernant via la vue ALL_TRIGGERS
Ca peut paraître bête comme question, mais comment je fais pour connaître
le nom de mon trigger, à l'interieur de celui-ci?
Merci!
Envoyé par SheikYerbouti
Réponse tout aussi bête à mon avisEnvoyé par fluec-wa
mais tu as forcément dû nommer ton trigger pour le créer :
, non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CREATE OR REPLACE TRIGGER TI_AN_CODE ...
Je ne crois pas qu'une telle fonction existe.
Quel est le but final de votre question ?
Voici 2 fonctions qui devraient répondre à ton problème :
Un petit exemple d'exécution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 create or replace procedure who_called_me( owner out varchar2, name out varchar2, lineno out number, caller_t out varchar2 ) as call_stack varchar2(4096) default dbms_utility.format_call_stack; n number; found_stack BOOLEAN default FALSE; line varchar2(255); cnt number := 0; begin loop n := instr( call_stack, chr(10) ); exit when ( cnt = 3 or n is NULL or n = 0 ); line := substr( call_stack, 1, n-1 ); call_stack := substr( call_stack, n+1 ); if ( NOT found_stack ) then if ( line like '%handle%number%name%' ) then found_stack := TRUE; end if; else cnt := cnt + 1; -- cnt = 1 is ME -- cnt = 2 is MY Caller -- cnt = 3 is Their Caller if ( cnt = 3 ) then lineno := to_number(substr( line, 10, 10 )); line := substr( line, 22 ); if ( line like 'pr%' ) then n := length( 'procedure ' ); elsif ( line like 'fun%' ) then n := length( 'function ' ); elsif ( line like 'package body%' ) then n := length( 'package body ' ); elsif ( line like 'pack%' ) then n := length( 'package ' ); elsif ( line like 'anonymous%' ) then n := length( 'anonymous block ' ); else n := null; end if; if ( n is not null ) then caller_t := ltrim(rtrim(upper(substr( line, 1, n-1 )))); else caller_t := 'TRIGGER'; end if; line := substr( line, nvl(n,1) ); n := instr( line, '.' ); owner := ltrim(rtrim(substr( line, 1, n-1 ))); name := ltrim(rtrim(substr( line, n+1 ))); end if; end if; end loop; end; / create or replace function who_am_i return varchar2 is l_owner varchar2(30); l_name varchar2(30); l_lineno number; l_type varchar2(30); begin who_called_me( l_owner, l_name, l_lineno, l_type ); return l_owner || '.' || l_name; end; /
Après pour avoir les informations concernant ton trigger, tu as la table all_triggers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 SQL> create or replace trigger trg_test before insert on test_dvp 2 declare 3 begin 4 dbms_output.put_line (who_am_i); 5 end; 6 / Trigger created. SQL> insert into test_dvp values (1); DVP.TRG_TEST 1 row created.![]()
Ben dis-donc, moi qui m'attendait à un truc qui ressemble à Reflexion de Java... :o
En tout cas, ça répond à mon problème, merci!
Envoyé par plaineR
Pour info, la fonction est dispo (10g au moins) sous owa_util.who_called_me. Mais c'est interessant d'avoir le code non wrappe.
Partager