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 avis mais tu as forcément dû nommer ton trigger pour le créer :Envoyé par fluec-wa, 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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager