line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package oEdtk::trackEdtk;
|
2
|
|
|
|
|
|
|
|
3
|
|
|
|
|
|
|
BEGIN {
|
4
|
1
|
|
|
1
|
|
7
|
use oEdtk::Main 0.42;
|
|
1
|
|
|
|
|
22
|
|
|
1
|
|
|
|
|
486
|
|
5
|
1
|
|
|
1
|
|
9
|
use Config::IniFiles;
|
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
26
|
|
6
|
1
|
|
|
1
|
|
5
|
use Sys::Hostname;
|
|
1
|
|
|
|
|
3
|
|
|
1
|
|
|
|
|
64
|
|
7
|
1
|
|
|
1
|
|
7
|
use Digest::MD5 qw(md5_base64);
|
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
60
|
|
8
|
1
|
|
|
1
|
|
6
|
use DBI;
|
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
48
|
|
9
|
1
|
|
|
1
|
|
6
|
use Cwd qw(abs_path);
|
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
47
|
|
10
|
1
|
|
|
1
|
|
6
|
use strict;
|
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
35
|
|
11
|
|
|
|
|
|
|
|
12
|
1
|
|
|
1
|
|
7
|
use Exporter;
|
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
41
|
|
13
|
1
|
|
|
1
|
|
5
|
use vars qw($VERSION @ISA @EXPORT_OK); # @EXPORT %EXPORT_TAGS);
|
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
95
|
|
14
|
|
|
|
|
|
|
|
15
|
1
|
|
|
1
|
|
9
|
$VERSION = 0.0034;
|
16
|
1
|
|
|
|
|
19
|
@ISA = qw(Exporter);
|
17
|
|
|
|
|
|
|
# @EXPORT = qw(
|
18
|
|
|
|
|
|
|
# );
|
19
|
|
|
|
|
|
|
|
20
|
1
|
|
|
|
|
3966
|
@EXPORT_OK = qw(
|
21
|
|
|
|
|
|
|
ini_Edtk_Conf conf_To_Env
|
22
|
|
|
|
|
|
|
env_Var_Completion
|
23
|
|
|
|
|
|
|
|
24
|
|
|
|
|
|
|
init_Tracking track_Obj
|
25
|
|
|
|
|
|
|
define_Mod_Ed define_Job_Evt
|
26
|
|
|
|
|
|
|
define_Track_Key
|
27
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
edit_Track_Table
|
29
|
|
|
|
|
|
|
create_Track_Table prepare_Tracking_Env
|
30
|
|
|
|
|
|
|
drop_Track_Table
|
31
|
|
|
|
|
|
|
)
|
32
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
}
|
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
# 3 méthodes possibles d'alimentation (config edtk.ini -> EDTK_TRACK_MODE) :
|
36
|
|
|
|
|
|
|
# -1- DB : suivi directement dans un SGBD (DB)-> ralentissement du traitement de prod (insérer les info de suivi en fin de traitement pour limiter l'impact => END du module ?)
|
37
|
|
|
|
|
|
|
# -2- FDB : suivi via SQLite -> pas de gestion de plusieurs accès en temps réel => créer 1 fichier db par process (procDB)-> organiser une consolidation des données
|
38
|
|
|
|
|
|
|
# -3- LOG : fichiers de suivi à plat -> organiser une consolidation des données
|
39
|
|
|
|
|
|
|
#
|
40
|
|
|
|
|
|
|
# ? A VOIR : bug dans la création dynamique du fichier SQLite, on utilise pas le TSTAMP/PROCESS_ID ???
|
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
my $DBI_DNS ="";
|
43
|
|
|
|
|
|
|
my $DBI_USER ="";
|
44
|
|
|
|
|
|
|
my $DBI_PASS ="";
|
45
|
|
|
|
|
|
|
my $TABLENAME ="tracking_oEdtk";
|
46
|
|
|
|
|
|
|
|
47
|
|
|
|
|
|
|
my $ED_HOST ="";
|
48
|
|
|
|
|
|
|
my $ED_TSTAMP ="";
|
49
|
|
|
|
|
|
|
my $ED_PROC ="";
|
50
|
|
|
|
|
|
|
my $ED_SNGL_ID ="";
|
51
|
|
|
|
|
|
|
my $ED_USER ="";
|
52
|
|
|
|
|
|
|
my $ED_SEQ ="";
|
53
|
|
|
|
|
|
|
my $ED_APP ="";
|
54
|
|
|
|
|
|
|
my $ED_MOD_ED ="";
|
55
|
|
|
|
|
|
|
my $ED_JOB_EVT ="";
|
56
|
|
|
|
|
|
|
my $ED_OBJS ="";
|
57
|
|
|
|
|
|
|
my @ED_K_NAME;
|
58
|
|
|
|
|
|
|
my @ED_K_VAL;
|
59
|
|
|
|
|
|
|
|
60
|
|
|
|
|
|
|
my @TRACKED_OBJ;
|
61
|
|
|
|
|
|
|
my @DB_USER_COL;
|
62
|
|
|
|
|
|
|
|
63
|
|
|
|
|
|
|
my $NOK=-1;
|
64
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
sub ini_Edtk_Conf {
|
67
|
|
|
|
|
|
|
# recherche du fichier de configuration
|
68
|
|
|
|
|
|
|
# renvoi le chemin au fichier de configuration valide
|
69
|
0
|
|
|
0
|
0
|
|
my $iniEdtk =$INC{'oEdtk/trackEdtk.pm'};
|
70
|
0
|
|
|
|
|
|
$iniEdtk =~s/(trackEdtk\.pm)//;
|
71
|
0
|
|
|
|
|
|
$iniEdtk .="iniEdtk/edtk.ini";
|
72
|
0
|
|
|
|
|
|
my $hostname =uc ( hostname());
|
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
# OUVERTURE DU FICHIER DE CONFIGURATION
|
75
|
0
|
|
|
|
|
|
my $tmpIniEdtk =$iniEdtk;
|
76
|
0
|
|
|
|
|
|
my $confIni;
|
77
|
0
|
|
|
|
|
|
while ($tmpIniEdtk ne 'local'){
|
78
|
0
|
0
|
|
|
|
|
if (! (-e $tmpIniEdtk)){die "ERR. config file not found : $tmpIniEdtk\n";}
|
|
0
|
|
|
|
|
|
|
79
|
0
|
|
|
|
|
|
$confIni = Config::IniFiles->new( -file => $tmpIniEdtk, -default => 'DEFAULT');
|
80
|
|
|
|
|
|
|
|
81
|
0
|
|
|
|
|
|
$iniEdtk =$tmpIniEdtk;
|
82
|
|
|
|
|
|
|
# recherche de la variable iniEdtk dans la section '$hostname' ou par défaut
|
83
|
|
|
|
|
|
|
# dans la section 'DEFAULT' (cf méthode new)
|
84
|
0
|
|
|
|
|
|
$tmpIniEdtk=$confIni->val( $hostname, 'iniEdtk' );
|
85
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
# si iniEdtk == fichier courant alors mettre la valeur à local (éviter les boucle infinies)
|
87
|
0
|
0
|
|
|
|
|
if ($tmpIniEdtk eq $iniEdtk) { last; }
|
|
0
|
|
|
|
|
|
|
88
|
|
|
|
|
|
|
}
|
89
|
|
|
|
|
|
|
|
90
|
0
|
|
|
|
|
|
$ENV{EDTK_INIEDTK} =$iniEdtk;
|
91
|
0
|
|
|
|
|
|
return $iniEdtk;
|
92
|
|
|
|
|
|
|
}
|
93
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
sub conf_To_Env ($;$) {
|
96
|
|
|
|
|
|
|
# charge les sections demandées du fic de config dans la configuration d'environnement
|
97
|
|
|
|
|
|
|
# en param, passer le chemin d'accès au fichier ini + la section à charger
|
98
|
|
|
|
|
|
|
# si la section HOSTNAME existe elle surcharge les valeurs de la section
|
99
|
0
|
|
|
0
|
0
|
|
my $confIni=shift;
|
100
|
0
|
|
|
|
|
|
my $section=shift;
|
101
|
0
|
|
0
|
|
|
|
$section ||='DEFAULT';
|
102
|
|
|
|
|
|
|
|
103
|
0
|
0
|
|
|
|
|
if (-e $confIni){
|
104
|
|
|
|
|
|
|
} else {
|
105
|
0
|
|
|
|
|
|
die "ERR. config file not found : $confIni\n";
|
106
|
|
|
|
|
|
|
}
|
107
|
|
|
|
|
|
|
|
108
|
0
|
|
|
|
|
|
my $hostname =uc ( hostname());
|
109
|
|
|
|
|
|
|
|
110
|
|
|
|
|
|
|
# OUVERTURE DU FICHIER DE CONFIGURATION
|
111
|
0
|
|
|
|
|
|
my %hConfIni;
|
112
|
0
|
|
|
|
|
|
tie %hConfIni, 'Config::IniFiles',( -file => $confIni );
|
113
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
# CHARGEMENT DES VALEURS DE LA SECTION
|
115
|
0
|
|
|
|
|
|
my %hSection;
|
116
|
0
|
0
|
|
|
|
|
if (exists $hConfIni{$section}) {
|
117
|
0
|
|
|
|
|
|
%hSection =%{$hConfIni{$section}};
|
|
0
|
|
|
|
|
|
|
118
|
|
|
|
|
|
|
}
|
119
|
|
|
|
|
|
|
|
120
|
|
|
|
|
|
|
# CHARGEMENT EN SURCHARGE DES VALEURS PROPRES AU HOSTNAME
|
121
|
0
|
|
|
|
|
|
my %hHostname;
|
122
|
0
|
0
|
|
|
|
|
if (exists $hConfIni{$hostname}) {
|
123
|
0
|
|
|
|
|
|
undef %hSpecific;
|
124
|
0
|
|
|
|
|
|
%hHostname =%{$hConfIni{$hostname}};
|
|
0
|
|
|
|
|
|
|
125
|
|
|
|
|
|
|
} else {
|
126
|
0
|
|
|
|
|
|
warn "INFO machine '$hostname' inconnue dans la configuration";
|
127
|
|
|
|
|
|
|
}
|
128
|
0
|
|
|
|
|
|
%hConfig=(%hSection,%hHostname);
|
129
|
|
|
|
|
|
|
|
130
|
0
|
|
|
|
|
|
my $self = abs_path($0);
|
131
|
0
|
|
|
|
|
|
$self =~ /([\w\.\-]+)[\/\\]\w+\.\w+$/;
|
132
|
|
|
|
|
|
|
# DÉFINITION POUR L'ENVIRONNEMENT DE DÉV DE L'APPLICATION/PROGRAMME COURANT
|
133
|
0
|
|
|
|
|
|
$hConfig{'EDTK_PRGNAME'} =$1;
|
134
|
|
|
|
|
|
|
#$hConfig{'EDTK_OPTJOB'} =$EDTK_OPTJOB;
|
135
|
|
|
|
|
|
|
|
136
|
|
|
|
|
|
|
# mise en place des variables d'environnement
|
137
|
0
|
|
|
|
|
|
while ((my $cle, my $valeur) = each (%hConfig)){
|
138
|
0
|
|
0
|
|
|
|
$valeur ||="";
|
139
|
0
|
|
|
|
|
|
$ENV{$cle}=$valeur;
|
140
|
|
|
|
|
|
|
}
|
141
|
0
|
|
|
|
|
|
1;
|
142
|
|
|
|
|
|
|
}
|
143
|
|
|
|
|
|
|
|
144
|
|
|
|
|
|
|
|
145
|
|
|
|
|
|
|
sub env_Var_Completion (\$){
|
146
|
|
|
|
|
|
|
# développe les chemins en remplaçant les variables d'environnement par les valeurs réelles
|
147
|
|
|
|
|
|
|
# tous les niveaux d'imbrication définis dans les variables d'environnement sont développés
|
148
|
|
|
|
|
|
|
# nécessite au préalable que les variables d'environnements soient définies
|
149
|
0
|
|
|
0
|
0
|
|
my $rScript =shift;
|
150
|
|
|
|
|
|
|
# il peut y avoir des variables dans les variables d'environnement elles mêmes
|
151
|
0
|
|
|
|
|
|
while (${$rScript}=~/\$/g) {
|
|
0
|
|
|
|
|
|
|
152
|
0
|
|
|
|
|
|
${$rScript}=~s/\$(\w+)/${ENV{$1}}/g;
|
|
0
|
|
|
|
|
|
|
153
|
|
|
|
|
|
|
}
|
154
|
0
|
|
|
|
|
|
${$rScript}=~s/(\/)/\\/g;
|
|
0
|
|
|
|
|
|
|
155
|
0
|
|
|
|
|
|
1;
|
156
|
|
|
|
|
|
|
}
|
157
|
|
|
|
|
|
|
|
158
|
|
|
|
|
|
|
|
159
|
|
|
|
|
|
|
################################################################################
|
160
|
|
|
|
|
|
|
# PARTIE DEFINITION SUIVI DE PRODUCTION
|
161
|
|
|
|
|
|
|
#
|
162
|
|
|
|
|
|
|
#
|
163
|
|
|
|
|
|
|
my $DBH;
|
164
|
|
|
|
|
|
|
my %h_subInsert;
|
165
|
|
|
|
|
|
|
|
166
|
|
|
|
|
|
|
# definition de la méthode d'insertion
|
167
|
|
|
|
|
|
|
$h_subInsert{'LOG'}=\&subInsert_Log;
|
168
|
|
|
|
|
|
|
$h_subInsert{'DB'} =\&subInsert_DB;
|
169
|
|
|
|
|
|
|
$h_subInsert{'FDB'}=\&subInsert_DB;
|
170
|
|
|
|
|
|
|
$h_subInsert{'none'}=\&noSub;
|
171
|
|
|
|
|
|
|
|
172
|
|
|
|
|
|
|
my %h_subClose;
|
173
|
|
|
|
|
|
|
$h_subClose{'DB'} =\&subClose_DB;
|
174
|
|
|
|
|
|
|
$h_subClose{'FDB'}=\&subClose_DB;
|
175
|
|
|
|
|
|
|
|
176
|
|
|
|
|
|
|
|
177
|
|
|
|
|
|
|
sub prepare_Tracking_Env() {
|
178
|
0
|
|
|
0
|
0
|
|
my $iniEdtk =ini_Edtk_Conf();
|
179
|
0
|
|
|
|
|
|
conf_To_Env($iniEdtk, 'ENVDESC');
|
180
|
0
|
|
|
|
|
|
conf_To_Env($iniEdtk, 'EDTK_DB');
|
181
|
0
|
|
|
|
|
|
oe_uc_sans_accents($ENV{EDTK_TRACK_MODE});
|
182
|
|
|
|
|
|
|
|
183
|
0
|
|
|
|
|
|
1;
|
184
|
|
|
|
|
|
|
}
|
185
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
sub open_Tracking_Env(){
|
187
|
0
|
0
|
|
0
|
0
|
|
if ($ENV{EDTK_TRACK_MODE} =~/FDB/i){
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
188
|
|
|
|
|
|
|
# DB FILE oe_now_time/PROCESS
|
189
|
0
|
|
|
|
|
|
$ENV{EDTK_DBI_DNS}=~s/(.+)\.(\w+)$/$1\.$ED_TSTAMP\.$ED_PROC\.$2/;
|
190
|
0
|
|
|
|
|
|
warn "INFO tracking to $ENV{EDTK_DBI_DSN}\n";
|
191
|
0
|
|
|
|
|
|
create_Track_Table($ENV{EDTK_DBI_DSN});
|
192
|
0
|
|
|
|
|
|
open_DBI();
|
193
|
|
|
|
|
|
|
|
194
|
|
|
|
|
|
|
} elsif ($ENV{EDTK_TRACK_MODE} =~/LOG/i){
|
195
|
|
|
|
|
|
|
# log
|
196
|
|
|
|
|
|
|
|
197
|
|
|
|
|
|
|
} elsif ($ENV{EDTK_TRACK_MODE} =~/DB/i){
|
198
|
|
|
|
|
|
|
# DB connexion tracking
|
199
|
0
|
|
|
|
|
|
open_DBI();
|
200
|
|
|
|
|
|
|
|
201
|
|
|
|
|
|
|
} else {
|
202
|
0
|
|
|
|
|
|
$ENV{EDTK_TRACK_MODE} = "none";
|
203
|
|
|
|
|
|
|
|
204
|
|
|
|
|
|
|
}
|
205
|
|
|
|
|
|
|
|
206
|
0
|
0
|
0
|
|
|
|
if (!($h_subInsert{$ENV{EDTK_TRACK_MODE}}) && !($h_subCreate{$ENV{EDTK_TRACK_MODE}})){
|
207
|
0
|
|
|
|
|
|
warn "INFO $ENV{EDTK_TRACK_MODE} undefined - tracking halted\n";
|
208
|
0
|
|
|
|
|
|
$ENV{EDTK_TRACK_MODE} ="none";
|
209
|
|
|
|
|
|
|
}
|
210
|
|
|
|
|
|
|
|
211
|
0
|
|
|
|
|
|
1;
|
212
|
|
|
|
|
|
|
}
|
213
|
|
|
|
|
|
|
|
214
|
|
|
|
|
|
|
sub open_DBI(){
|
215
|
0
|
|
|
0
|
0
|
|
my $dbargs = { AutoCommit => $ENV{EDTK_DBI_AutoCommit},
|
216
|
|
|
|
|
|
|
RaiseError => $ENV{EDTK_DBI_RaiseError},
|
217
|
|
|
|
|
|
|
PrintError => $ENV{EDTK_DBI_PrintError}};
|
218
|
|
|
|
|
|
|
|
219
|
0
|
0
|
|
|
|
|
$DBH = DBI->connect( $ENV{EDTK_DBI_DSN},
|
220
|
|
|
|
|
|
|
$ENV{EDTK_DBI_DSN_USER},
|
221
|
|
|
|
|
|
|
$ENV{EDTK_DBI_DSN_PASS}
|
222
|
|
|
|
|
|
|
# ,$dbargs
|
223
|
|
|
|
|
|
|
)
|
224
|
|
|
|
|
|
|
or die "ERR no connexion to $ENV{EDTK_DBI_DSN} " . DBI->errstr;
|
225
|
|
|
|
|
|
|
|
226
|
0
|
|
|
|
|
|
1;
|
227
|
|
|
|
|
|
|
}
|
228
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
|
230
|
|
|
|
|
|
|
sub init_Tracking(;@){
|
231
|
0
|
|
|
0
|
0
|
|
my $Mod_Ed =shift;
|
232
|
0
|
|
|
|
|
|
my $Typ_Job =shift;
|
233
|
0
|
|
|
|
|
|
my $Job_User =shift;
|
234
|
0
|
|
|
|
|
|
my @Track_Key =@_;
|
235
|
0
|
|
|
|
|
|
define_Mod_Ed ($Mod_Ed); # U(ndef) by default
|
236
|
0
|
|
|
|
|
|
define_Job_Evt ($Typ_Job); # S(pool) by default
|
237
|
0
|
|
|
|
|
|
define_Job_User($Job_User); # user job request, by default 'None'
|
238
|
0
|
|
|
|
|
|
$ED_HOST =hostname();
|
239
|
0
|
|
|
|
|
|
$ED_TSTAMP =oe_now_time();
|
240
|
0
|
|
|
|
|
|
$ED_PROC =$$;
|
241
|
0
|
|
|
|
|
|
$ED_SEQ =0; # (dynamic, private)
|
242
|
0
|
|
|
|
|
|
$ED_SNGL_ID = md5_base64($ED_HOST.$ED_TSTAMP.$ED_PROC);
|
243
|
|
|
|
|
|
|
|
244
|
0
|
|
|
|
|
|
&prepare_Tracking_Env();
|
245
|
0
|
|
|
|
|
|
&open_Tracking_Env();
|
246
|
|
|
|
|
|
|
|
247
|
0
|
|
|
|
|
|
my $indice =0;
|
248
|
0
|
|
|
|
|
|
foreach my $element (@Track_Key) {
|
249
|
0
|
|
|
|
|
|
define_Track_Key($element, $indice++); # default key for indiced col_name
|
250
|
|
|
|
|
|
|
}
|
251
|
|
|
|
|
|
|
|
252
|
0
|
|
|
|
|
|
$0 =~/([\w-]+)[\.plmex]*$/;
|
253
|
0
|
0
|
|
|
|
|
$1 ? $ED_APP ="application" : $ED_APP =$1;
|
254
|
|
|
|
|
|
|
|
255
|
0
|
|
|
|
|
|
$ED_OBJS =1; ## default insert unit count (dynamic)
|
256
|
|
|
|
|
|
|
|
257
|
0
|
|
|
|
|
|
warn "INFO tracking init ( track mode : $ENV{EDTK_TRACK_MODE}, edition mode : $ED_MOD_ED, job type : $ED_JOB_EVT, user : $ED_USER, optional Keys : @ED_K_NAME )\n";
|
258
|
|
|
|
|
|
|
|
259
|
0
|
|
|
|
|
|
return $ED_SNGL_ID;
|
260
|
|
|
|
|
|
|
}
|
261
|
|
|
|
|
|
|
|
262
|
|
|
|
|
|
|
|
263
|
|
|
|
|
|
|
sub track_Obj (;@){
|
264
|
|
|
|
|
|
|
# track_Obj ([$ED_OBJS, $ED_JOB_EVT, @ED_K_VAL])
|
265
|
|
|
|
|
|
|
# $ED_OBJS (optionel) : nombre d'unité de l'objet (1 par defaut)
|
266
|
|
|
|
|
|
|
# $ED_JOB_EVT (optio) : evenement en question (cf define_Job_Evt)
|
267
|
|
|
|
|
|
|
# @ED_K_VAL(optionel) : valeurs des clefs optionnels définies avec init_Tracking (même ordre)
|
268
|
|
|
|
|
|
|
|
269
|
0
|
|
|
0
|
0
|
|
$ED_SEQ++;
|
270
|
0
|
|
|
|
|
|
$ED_OBJS =shift;
|
271
|
0
|
|
0
|
|
|
|
$ED_OBJS ||=1;
|
272
|
0
|
|
|
|
|
|
define_Job_Evt (shift);
|
273
|
0
|
|
|
|
|
|
@ED_K_VAL =@_;
|
274
|
|
|
|
|
|
|
|
275
|
0
|
|
|
|
|
|
undef @TRACKED_OBJ;
|
276
|
0
|
|
|
|
|
|
push (@TRACKED_OBJ, oe_now_time());
|
277
|
0
|
|
|
|
|
|
push (@TRACKED_OBJ, $ED_USER);
|
278
|
0
|
|
|
|
|
|
push (@TRACKED_OBJ, $ED_SEQ);
|
279
|
0
|
|
|
|
|
|
push (@TRACKED_OBJ, $ED_SNGL_ID);
|
280
|
0
|
|
|
|
|
|
push (@TRACKED_OBJ, $ED_APP);
|
281
|
0
|
|
|
|
|
|
push (@TRACKED_OBJ, $ED_MOD_ED);
|
282
|
|
|
|
|
|
|
|
283
|
0
|
|
|
|
|
|
push (@TRACKED_OBJ, $ED_JOB_EVT);
|
284
|
0
|
|
|
|
|
|
push (@TRACKED_OBJ, $ED_OBJS);
|
285
|
0
|
|
|
|
|
|
undef @DB_USER_COL;
|
286
|
0
|
|
|
|
|
|
for (my $i=0 ; $i <= $#ED_K_VAL ; $i++) {
|
287
|
0
|
|
0
|
|
|
|
push (@TRACKED_OBJ, $ED_K_NAME[$i] || "");
|
288
|
0
|
|
0
|
|
|
|
push (@TRACKED_OBJ, $ED_K_VAL[$i] || "");
|
289
|
0
|
|
|
|
|
|
push (@DB_USER_COL, "ED_K${i}_NAME");
|
290
|
0
|
|
|
|
|
|
push (@DB_USER_COL, "ED_K${i}_VAL");
|
291
|
|
|
|
|
|
|
}
|
292
|
|
|
|
|
|
|
|
293
|
0
|
0
|
|
|
|
|
&{$h_subInsert{$ENV{EDTK_TRACK_MODE}}}
|
|
0
|
|
|
|
|
|
|
294
|
|
|
|
|
|
|
or die "ERR. undefined EDTK_TRACK_MODE -> $ENV{EDTK_TRACK_MODE}\n";
|
295
|
0
|
|
|
|
|
|
1;
|
296
|
|
|
|
|
|
|
}
|
297
|
|
|
|
|
|
|
|
298
|
|
|
|
|
|
|
|
299
|
|
|
|
|
|
|
sub define_Mod_Ed ($) {
|
300
|
|
|
|
|
|
|
# Printing Mode : looking for one of the following :
|
301
|
|
|
|
|
|
|
# Undef (default), Batch, Tp, Web, Mail
|
302
|
0
|
|
|
0
|
0
|
|
my $value =shift;
|
303
|
|
|
|
|
|
|
|
304
|
0
|
0
|
|
|
|
|
if ($value) { $ED_MOD_ED =$value };
|
|
0
|
|
|
|
|
|
|
305
|
0
|
|
|
|
|
|
$ED_MOD_ED =~ /([NBTWM])/;
|
306
|
0
|
|
|
|
|
|
$ED_MOD_ED =$1;
|
307
|
0
|
|
0
|
|
|
|
$ED_MOD_ED ||="U"; # Undef by default
|
308
|
|
|
|
|
|
|
|
309
|
0
|
|
|
|
|
|
return $ED_MOD_ED;
|
310
|
|
|
|
|
|
|
}
|
311
|
|
|
|
|
|
|
|
312
|
|
|
|
|
|
|
|
313
|
|
|
|
|
|
|
sub define_Job_Evt ($) {
|
314
|
|
|
|
|
|
|
# Job Event : looking for one of the following :
|
315
|
|
|
|
|
|
|
# Job (default), Spool, Document, Line, Warning, Error
|
316
|
0
|
|
|
0
|
0
|
|
my $value =shift;
|
317
|
|
|
|
|
|
|
|
318
|
0
|
0
|
|
|
|
|
if ($value) { $ED_JOB_EVT =$value };
|
|
0
|
|
|
|
|
|
|
319
|
0
|
|
|
|
|
|
$ED_JOB_EVT =~ /([JSDLWE])/;
|
320
|
0
|
|
|
|
|
|
$ED_JOB_EVT =$1;
|
321
|
0
|
|
0
|
|
|
|
$ED_JOB_EVT ||="J"; # Job by default
|
322
|
|
|
|
|
|
|
|
323
|
0
|
|
|
|
|
|
return $ED_JOB_EVT;
|
324
|
|
|
|
|
|
|
}
|
325
|
|
|
|
|
|
|
|
326
|
|
|
|
|
|
|
|
327
|
|
|
|
|
|
|
sub define_Job_User ($) {
|
328
|
|
|
|
|
|
|
# USER JOB REQUEST : LOOKING FOR ONE OF THE FOLLOWING :
|
329
|
|
|
|
|
|
|
# None (default), user Id (max 10 alphanumerics)
|
330
|
0
|
|
|
0
|
0
|
|
my $value =shift;
|
331
|
|
|
|
|
|
|
|
332
|
0
|
0
|
|
|
|
|
if ($value=~/(\w{1,10})/) {
|
333
|
0
|
|
|
|
|
|
$ED_USER =$1;
|
334
|
|
|
|
|
|
|
} else {
|
335
|
0
|
|
|
|
|
|
$ED_USER ="None";
|
336
|
|
|
|
|
|
|
}
|
337
|
|
|
|
|
|
|
|
338
|
0
|
|
|
|
|
|
return $ED_USER;
|
339
|
|
|
|
|
|
|
}
|
340
|
|
|
|
|
|
|
|
341
|
|
|
|
|
|
|
|
342
|
|
|
|
|
|
|
sub define_Track_Key ($;$) {
|
343
|
|
|
|
|
|
|
# TO DEFINE THE COL_NAME OF THE N INDICED TRACKING KEY
|
344
|
0
|
|
|
0
|
0
|
|
my $value =shift;
|
345
|
0
|
|
|
|
|
|
my $indice =shift;
|
346
|
0
|
|
0
|
|
|
|
$indice ||=0;
|
347
|
|
|
|
|
|
|
|
348
|
0
|
0
|
|
|
|
|
if (!defined $ENV{EDTK_MAX_USER_KEY}) {
|
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
349
|
0
|
|
|
|
|
|
warn "INFO : tracking key undefined\n";
|
350
|
0
|
|
|
|
|
|
return 0;
|
351
|
|
|
|
|
|
|
|
352
|
|
|
|
|
|
|
} elsif ($indice gt ($ENV{EDTK_MAX_USER_KEY}-1)) {
|
353
|
0
|
|
|
|
|
|
warn "INFO : tracking key not allowed (limit is $ENV{EDTK_MAX_USER_KEY})\n";
|
354
|
0
|
|
|
|
|
|
return 0;
|
355
|
|
|
|
|
|
|
|
356
|
|
|
|
|
|
|
} elsif (length ($value) > 5) {
|
357
|
0
|
|
|
|
|
|
$value=~s/^(\w{5})(.*)/$1/;
|
358
|
0
|
|
|
|
|
|
warn "INFO : redefined col as '$value'";
|
359
|
|
|
|
|
|
|
}
|
360
|
0
|
0
|
|
|
|
|
if ($value) { $ED_K_NAME[$indice] =$value; }
|
|
0
|
|
|
|
|
|
|
361
|
|
|
|
|
|
|
|
362
|
0
|
|
|
|
|
|
$ED_K_NAME[$indice] =~ s/\s/\_/g;
|
363
|
0
|
|
|
|
|
|
oe_uc_sans_accents($ED_K_NAME[$indice]);
|
364
|
|
|
|
|
|
|
|
365
|
0
|
|
|
|
|
|
return $ED_K_NAME[$indice];
|
366
|
|
|
|
|
|
|
}
|
367
|
|
|
|
|
|
|
|
368
|
|
|
|
|
|
|
|
369
|
|
|
|
|
|
|
sub subInsert_Log(){
|
370
|
|
|
|
|
|
|
# DANS LE CAS D'UN SUIVI SOUS FORME DE FICHIERS LOG
|
371
|
|
|
|
|
|
|
# à compléter avec l'utisation du remplaçant du Logger
|
372
|
|
|
|
|
|
|
|
373
|
0
|
|
|
0
|
0
|
|
my $request =join (", ", @TRACKED_OBJ);
|
374
|
0
|
|
|
|
|
|
warn "$request\n";
|
375
|
|
|
|
|
|
|
|
376
|
0
|
|
|
|
|
|
1;
|
377
|
|
|
|
|
|
|
}
|
378
|
|
|
|
|
|
|
|
379
|
|
|
|
|
|
|
|
380
|
|
|
|
|
|
|
sub subInsert_DB() {
|
381
|
|
|
|
|
|
|
# constructuction de la commande SQL pour insertion dans une base DBI (file/DB)
|
382
|
|
|
|
|
|
|
|
383
|
0
|
|
|
0
|
0
|
|
my $request="insert into $ENV{EDTK_DBI_TRACKING}";
|
384
|
0
|
|
|
|
|
|
$request .=" (";
|
385
|
0
|
|
|
|
|
|
$request .="ED_TSTAMP, ED_USER, ED_SEQ, ED_SNGL_ID, ED_APP, ED_MOD_ED, ED_JOB_EVT, ED_OBJ_COUNT";
|
386
|
0
|
0
|
|
|
|
|
if (@DB_USER_COL) {
|
387
|
0
|
|
|
|
|
|
$request .=", ";
|
388
|
0
|
|
|
|
|
|
$request .=join (", ", @DB_USER_COL);
|
389
|
|
|
|
|
|
|
}
|
390
|
0
|
|
|
|
|
|
$request .=" ) values ('";
|
391
|
|
|
|
|
|
|
# FORMATAGE DE LA DATE POUR LES SGBD
|
392
|
|
|
|
|
|
|
# $request .=sprintf ("to_date('%014.f', 'YYYYMMDDHH24MISS'), '", shift @TRACKED_OBJ);
|
393
|
0
|
|
|
|
|
|
$request .=join ("', '", @TRACKED_OBJ);
|
394
|
0
|
|
|
|
|
|
$request .="')";
|
395
|
|
|
|
|
|
|
|
396
|
0
|
|
|
|
|
|
$DBH->do($request);
|
397
|
0
|
0
|
|
|
|
|
if ($DBH->err()) {
|
398
|
0
|
|
|
|
|
|
warn "INFO ".$DBI::errstr."\n";
|
399
|
|
|
|
|
|
|
}
|
400
|
|
|
|
|
|
|
|
401
|
|
|
|
|
|
|
# $DBH->commit(); # nécessaire si AutoCommit vaut 0
|
402
|
|
|
|
|
|
|
# $DBH->disconnect();
|
403
|
|
|
|
|
|
|
# if ($DBH->err()) { warn "$DBI::errstr\n"; }
|
404
|
0
|
|
|
|
|
|
1;
|
405
|
|
|
|
|
|
|
}
|
406
|
|
|
|
|
|
|
|
407
|
|
|
|
|
|
|
sub noSub(){
|
408
|
|
|
|
|
|
|
# FONCTION A VIDE POUR LES POINTEURS DE FONCTION %H_SUBINSERT
|
409
|
|
|
|
|
|
|
# pour éviter d'utiliser des tests dans des fonctions répétitives
|
410
|
|
|
|
|
|
|
# (faux switch/case)
|
411
|
0
|
|
|
0
|
0
|
|
return 1;
|
412
|
|
|
|
|
|
|
}
|
413
|
|
|
|
|
|
|
|
414
|
|
|
|
|
|
|
|
415
|
|
|
|
|
|
|
sub test_exist_table(){
|
416
|
0
|
|
|
0
|
0
|
|
my $dbargs = { AutoCommit => $ENV{EDTK_DBI_AutoCommit},
|
417
|
|
|
|
|
|
|
RaiseError => $ENV{EDTK_DBI_RaiseError},
|
418
|
|
|
|
|
|
|
PrintError => $ENV{EDTK_DBI_PrintError}};
|
419
|
0
|
0
|
|
|
|
|
$DBH = DBI->connect($ENV{EDTK_DBI_DSN},
|
420
|
|
|
|
|
|
|
$ENV{EDTK_DBI_DSN_USER},
|
421
|
|
|
|
|
|
|
$ENV{EDTK_DBI_DSN_PASS}
|
422
|
|
|
|
|
|
|
,$dbargs
|
423
|
|
|
|
|
|
|
)
|
424
|
|
|
|
|
|
|
or die "ERR no connexion to $ENV{EDTK_DBI_DSN} " . DBI->errstr;
|
425
|
|
|
|
|
|
|
|
426
|
0
|
|
|
|
|
|
my $request="select * from $ENV{EDTK_DBI_TABLENAME}";
|
427
|
|
|
|
|
|
|
|
428
|
0
|
|
|
|
|
|
$DBH->do($request);
|
429
|
0
|
0
|
|
|
|
|
if ($DBI::errstr) {
|
430
|
0
|
0
|
|
|
|
|
if ( $DBI::errstr =~/no such table/ ) {
|
431
|
0
|
|
|
|
|
|
$DBH->disconnect();
|
432
|
0
|
|
|
|
|
|
return 0;
|
433
|
|
|
|
|
|
|
}
|
434
|
0
|
|
|
|
|
|
warn "INFO ".$DBI::errstr."\n";
|
435
|
0
|
|
|
|
|
|
$DBH->disconnect();
|
436
|
0
|
|
|
|
|
|
return $NOK;
|
437
|
|
|
|
|
|
|
}
|
438
|
0
|
|
|
|
|
|
$DBH->disconnect();
|
439
|
|
|
|
|
|
|
|
440
|
0
|
|
|
|
|
|
1;
|
441
|
|
|
|
|
|
|
}
|
442
|
|
|
|
|
|
|
|
443
|
|
|
|
|
|
|
|
444
|
|
|
|
|
|
|
sub edit_Track_Table(;$){
|
445
|
0
|
|
|
0
|
0
|
|
my $request=shift;
|
446
|
|
|
|
|
|
|
|
447
|
0
|
|
|
|
|
|
&open_DBI();
|
448
|
|
|
|
|
|
|
|
449
|
0
|
|
|
|
|
|
my $ref_Tab =&fetchall_DBI($request);
|
450
|
0
|
|
|
|
|
|
&edit_All_rTab($ref_Tab);
|
451
|
0
|
|
|
|
|
|
1;
|
452
|
|
|
|
|
|
|
}
|
453
|
|
|
|
|
|
|
|
454
|
|
|
|
|
|
|
|
455
|
|
|
|
|
|
|
sub create_Track_Table(){
|
456
|
|
|
|
|
|
|
#my $dbi_dns=shift;
|
457
|
|
|
|
|
|
|
|
458
|
|
|
|
|
|
|
# CREATE TABLE tablename [IF NOT EXISTS][TEMPORARY] (column1data_type, column2data_type, column3data_type);
|
459
|
|
|
|
|
|
|
#&prepare_Tracking_Env();
|
460
|
|
|
|
|
|
|
#$dbi_dns ||=$ENV{EDTK_DBI_DNS};
|
461
|
|
|
|
|
|
|
|
462
|
0
|
|
|
0
|
0
|
|
my $dbargs = { AutoCommit => 0,
|
463
|
|
|
|
|
|
|
RaiseError => 0,
|
464
|
|
|
|
|
|
|
PrintError => 0 };
|
465
|
0
|
0
|
|
|
|
|
$DBH = DBI->connect($ENV{EDTK_DBI_DSN},
|
466
|
|
|
|
|
|
|
$ENV{EDTK_DBI_DSN_USER},
|
467
|
|
|
|
|
|
|
$ENV{EDTK_DBI_DSN_PASS},
|
468
|
|
|
|
|
|
|
$dbargs)
|
469
|
|
|
|
|
|
|
or die "ERR no connexion to $ENV{EDTK_DBI_DSN} " . DBI->errstr;
|
470
|
|
|
|
|
|
|
|
471
|
0
|
|
|
|
|
|
my $struct="CREATE TABLE $ENV{EDTK_DBI_TABLENAME} ";
|
472
|
0
|
|
|
|
|
|
$struct .="( ED_TSTAMP NUMBER(14) NOT NULL"; # interesting for formated date and interval search
|
473
|
|
|
|
|
|
|
# $struct .="( ED_TSTAMP VARCHAR2(14) NOT NULL"; # most used
|
474
|
|
|
|
|
|
|
# $struct .="( ED_TSTAMP DATE NOT NULL"; # Not compatible
|
475
|
|
|
|
|
|
|
# $struct .=", ED_HOST VARCHAR2(15) NOT NULL"; # hostname
|
476
|
|
|
|
|
|
|
# $struct .=", ED_PROC VARCHAR2(6) NOT NULL"; # processus
|
477
|
0
|
|
|
|
|
|
$struct .=", ED_USER VARCHAR2(10) NOT NULL"; # job request user
|
478
|
0
|
|
|
|
|
|
$struct .=", ED_SEQ NUMBER(9) NOT NULL"; # sequence
|
479
|
0
|
|
|
|
|
|
$struct .=", ED_SNGL_ID VARCHAR2(22) NOT NULL"; # Single ID
|
480
|
0
|
|
|
|
|
|
$struct .=", ED_APP VARCHAR2(15) NOT NULL"; # application name
|
481
|
0
|
|
|
|
|
|
$struct .=", ED_MOD_ED CHAR"; # mode d'edition (Batch, Tp, Web, Mail)
|
482
|
0
|
|
|
|
|
|
$struct .=", ED_JOB_EVT CHAR"; # niveau de l'événement dans le job(Spool, Document, Line, Warning, Error)
|
483
|
0
|
|
|
|
|
|
$struct .=", ED_OBJ_COUNT NUMBER(15)"; # nombre d'éléments/objets attachés à l'événement
|
484
|
|
|
|
|
|
|
|
485
|
0
|
|
|
|
|
|
for (my $i=0 ; $i lt $ENV{EDTK_MAX_USER_KEY} ; $i++) {
|
486
|
0
|
|
|
|
|
|
$struct .=", ED_K${i}_NAME VARCHAR2(5)"; # nom de clef $i
|
487
|
0
|
|
|
|
|
|
$struct .=", ED_K${i}_VAL VARCHAR2(30)"; # valeur clef $i
|
488
|
|
|
|
|
|
|
}
|
489
|
0
|
|
|
|
|
|
$struct .=")"; #, CONSTRAINT pk_$ENV{EDTK_DBI_TABLENAME} PRIMARY KEY (ED_TSTAMP, ED_PROC, ED_SEQ)";
|
490
|
|
|
|
|
|
|
|
491
|
0
|
|
|
|
|
|
$DBH->do($struct);
|
492
|
0
|
0
|
|
|
|
|
if ($DBI::errstr) {
|
493
|
0
|
|
|
|
|
|
warn "INFO ".$DBI::errstr."\n";
|
494
|
|
|
|
|
|
|
}
|
495
|
|
|
|
|
|
|
|
496
|
|
|
|
|
|
|
# my $seq ="CREATE SEQUENCE sq_$TABLENAME
|
497
|
|
|
|
|
|
|
# MINVALUE 1
|
498
|
|
|
|
|
|
|
# MAXVALUE 999999999
|
499
|
|
|
|
|
|
|
# START WITH 1
|
500
|
|
|
|
|
|
|
# INCREMENT BY 1;";
|
501
|
|
|
|
|
|
|
#$dbh->do("$seq");
|
502
|
|
|
|
|
|
|
|
503
|
0
|
|
|
|
|
|
$DBH->commit(); # nécessaire si AutoCommit vaut 0
|
504
|
0
|
|
|
|
|
|
$DBH->disconnect();
|
505
|
0
|
|
|
|
|
|
1;
|
506
|
|
|
|
|
|
|
}
|
507
|
|
|
|
|
|
|
|
508
|
|
|
|
|
|
|
|
509
|
|
|
|
|
|
|
sub drop_Track_Table(){
|
510
|
0
|
|
|
0
|
0
|
|
&prepare_Tracking_Env();
|
511
|
0
|
|
|
|
|
|
&open_DBI();
|
512
|
|
|
|
|
|
|
|
513
|
0
|
|
|
|
|
|
warn "=> Drop table $ENV{EDTK_DBI_TABLENAME} from $ENV{EDTK_DBI_DSN}, if exist\n\n";
|
514
|
0
|
|
|
|
|
|
$DBH->do("DROP TABLE $ENV{EDTK_DBI_TABLENAME}");
|
515
|
0
|
|
|
|
|
|
$DBH->disconnect;
|
516
|
|
|
|
|
|
|
|
517
|
0
|
|
|
|
|
|
1;
|
518
|
|
|
|
|
|
|
}
|
519
|
|
|
|
|
|
|
|
520
|
|
|
|
|
|
|
|
521
|
|
|
|
|
|
|
sub fetchall_DBI(;$) {
|
522
|
|
|
|
|
|
|
# CONNEXION À UNE TABLE DBI POUR SELECT VERS UNE RÉFÉRENCE DE TABLEAU
|
523
|
|
|
|
|
|
|
# sélection de toutes les données correspondant à un critère
|
524
|
|
|
|
|
|
|
# option : requete à passer, exemple "SELECT * FROM TRACKING_OEDTK WHERE ED_MOD_ED = 'T'"
|
525
|
|
|
|
|
|
|
# par defaut vaut 'SELECT * from $ENV{EDTK_DBI_TABLENAME}'
|
526
|
0
|
|
|
0
|
0
|
|
my $request =shift;
|
527
|
0
|
|
0
|
|
|
|
$request ||="SELECT * from $ENV{EDTK_DBI_TABLENAME}";
|
528
|
|
|
|
|
|
|
|
529
|
0
|
|
|
|
|
|
my $sql = qq($request);
|
530
|
0
|
|
|
|
|
|
my $sth = $DBH->prepare( $sql );
|
531
|
0
|
0
|
|
|
|
|
$sth->execute ()
|
532
|
|
|
|
|
|
|
|| warn "ERR. DBI exec " . $DBH->errstr ;
|
533
|
|
|
|
|
|
|
|
534
|
0
|
|
|
|
|
|
my $rTab = $sth->fetchall_arrayref;
|
535
|
|
|
|
|
|
|
|
536
|
0
|
|
|
|
|
|
$sth->{Active} = 1; # resolution du bug SQLite "closing dbh with active statement" http://rt.cpan.org/Public/Bug/Display.html?id=9643
|
537
|
0
|
|
|
|
|
|
$sth->finish();
|
538
|
|
|
|
|
|
|
#$DBH->commit(); # nécessaire si AutoCommit vaut 0 ???
|
539
|
0
|
0
|
|
|
|
|
if ($DBI::errstr) {
|
540
|
0
|
|
|
|
|
|
warn $DBI::errstr."\n";
|
541
|
|
|
|
|
|
|
}
|
542
|
|
|
|
|
|
|
|
543
|
0
|
|
|
|
|
|
return $rTab;
|
544
|
|
|
|
|
|
|
}
|
545
|
|
|
|
|
|
|
|
546
|
|
|
|
|
|
|
|
547
|
|
|
|
|
|
|
sub edit_All_rTab($){
|
548
|
|
|
|
|
|
|
# EDITION DE L'ENSEMBLE DES DONNÉES D'UN TABLEAU PASSÉ EN REFÉRENCE
|
549
|
|
|
|
|
|
|
# affichage du tableau en colonnes
|
550
|
0
|
|
|
0
|
0
|
|
my $rTab=shift;
|
551
|
|
|
|
|
|
|
|
552
|
0
|
|
|
|
|
|
for (my $i=0 ; $i<=$#{$rTab} ; $i++) {
|
|
0
|
|
|
|
|
|
|
553
|
0
|
|
|
|
|
|
my $cols = $#{$$rTab[$i]};
|
|
0
|
|
|
|
|
|
|
554
|
0
|
|
|
|
|
|
print "\n$i:\t";
|
555
|
|
|
|
|
|
|
|
556
|
0
|
|
|
|
|
|
for (my $j=0 ;$j<=$cols ; $j++){
|
557
|
0
|
0
|
|
|
|
|
print "$$rTab[$i][$j]" if (defined $$rTab[$i][$j]);
|
558
|
|
|
|
|
|
|
}
|
559
|
|
|
|
|
|
|
}
|
560
|
0
|
|
|
|
|
|
print "\n";
|
561
|
|
|
|
|
|
|
|
562
|
0
|
|
|
|
|
|
1;
|
563
|
|
|
|
|
|
|
}
|
564
|
|
|
|
|
|
|
|
565
|
|
|
|
|
|
|
|
566
|
|
|
|
|
|
|
sub subClose_DB(){
|
567
|
0
|
0
|
|
0
|
0
|
|
$DBH->commit() if ($ENV{EDTK_DBI_AutoCommit} eq 0 ); # nécessaire si AutoCommit vaut 0
|
568
|
|
|
|
|
|
|
# $DBH->disconnect();
|
569
|
0
|
|
|
|
|
|
1;
|
570
|
|
|
|
|
|
|
}
|
571
|
|
|
|
|
|
|
|
572
|
|
|
|
|
|
|
END {
|
573
|
1
|
50
|
|
1
|
|
11
|
if (exists $h_subClose{EDTK_TRACK_MODE}) {
|
574
|
0
|
|
|
|
|
|
&{$h_subClose{$ENV{EDTK_TRACK_MODE}}} ;
|
|
0
|
|
|
|
|
|
|
575
|
|
|
|
|
|
|
}
|
576
|
|
|
|
|
|
|
}
|
577
|
|
|
|
|
|
|
1;
|
578
|
|
|
|
|
|
|
|
579
|
|
|
|
|
|
|
|
580
|
|
|
|
|
|
|
|
581
|
|
|
|
|
|
|
|
582
|
|
|
|
|
|
|
# NOTES
|
583
|
|
|
|
|
|
|
#
|
584
|
|
|
|
|
|
|
# LISTE DES TABLES
|
585
|
|
|
|
|
|
|
# select table_name from tabs;
|
586
|
|
|
|
|
|
|
#
|
587
|
|
|
|
|
|
|
# Lister les tables du schéma de l'utilisateur courant :
|
588
|
|
|
|
|
|
|
# SELECT table_name FROM user_tables;
|
589
|
|
|
|
|
|
|
#
|
590
|
|
|
|
|
|
|
# Lister les tables accessibles par l'utilisateur :
|
591
|
|
|
|
|
|
|
# SELECT table_name FROM all_tables;
|
592
|
|
|
|
|
|
|
#
|
593
|
|
|
|
|
|
|
# Lister toutes les tables (il faut être ADMIN) :
|
594
|
|
|
|
|
|
|
# SELECT table_name FROM dba_tables;
|
595
|
|
|
|
|
|
|
#
|
596
|
|
|
|
|
|
|
# DESCRIPTION DE LA TABLE :
|
597
|
|
|
|
|
|
|
# desc matable; # retourne les champs et leurs types
|
598
|
|
|
|
|
|
|
|
599
|
|
|
|
|
|
|
|
600
|
|
|
|
|
|
|
|
601
|
|
|
|
|
|
|
# EXEMPLES REQUETES - http://fadace.developpez.com/sgbdcmp/fonctions/
|
602
|
|
|
|
|
|
|
#
|
603
|
|
|
|
|
|
|
# SELECT * FROM TRACKING_OEDTK WHERE ED_JOB_EVT='S';
|
604
|
|
|
|
|
|
|
# SELECT * FROM TRACKING_OEDTK WHERE ED_MOD_ED='T';
|
605
|
|
|
|
|
|
|
# SELECT SUM(ED_OBJ_COUNT) AS "OBJETS" FROM TRACKING_OEDTK WHERE ED_JOB_EVT='D';
|
606
|
|
|
|
|
|
|
# SELECT COUNT(ED_OBJ_COUNT) AS "OBJETS" FROM TRACKING_OEDTK WHERE ED_JOB_EVT='D';
|
607
|
|
|
|
|
|
|
# SELECT DISTINCT ED_SNGL_ID FROM TRACKING_OEDTK;
|
608
|
|
|
|
|
|
|
# SELECT COUNT (DISTINCT ED_SNGL_ID) FROM TRACKING_OEDTK ;
|
609
|
|
|
|
|
|
|
# SELECT COUNT (DISTINCT ED_SNGL_ID) FROM TRACKING_OEDTK WHERE ED_JOB_EVT='D';
|
610
|
|
|
|
|
|
|
# SELECT COUNT (DISTINCT ED_SNGL_ID) AS "TOTAL" FROM TRACKING_OEDTK WHERE ED_JOB_EVT='D' AND ED_MOD_ED='T';
|
611
|
|
|
|
|
|
|
# SELECT ED_TSTAMP, ED_APP, ED_SNGL_ID FROM TRACKING_OEDTK WHERE ED_MOD_ED='T' AND ED_JOB_EVT='S';
|
612
|
|
|
|
|
|
|
# SELECT to_char(ED_TSTAMP, 'DD/MM/YYYY HH24:MM:SS'), ED_APP, ED_SNGL_ID FROM TRACKING_OEDTK WHERE ED_MOD_ED='T' AND ED_JOB_EVT='S';
|
613
|
|
|
|
|
|
|
# SELECT to_char(ED_TSTAMP, 'DD/MM/YYYY HH24:MM:SS') AS TIME , ED_APP, ED_SNGL_ID FROM TRACKING_OEDTK WHERE ED_MOD_ED='B' AND ED_JOB_EVT='S';
|
614
|
|
|
|
|
|
|
|
615
|
|
|
|
|
|
|
# update EDTK_FILIERES SET ed_postcomp =2020 where ed_postcomp<>'FilR100';
|
616
|
|
|
|
|
|
|
|
617
|
|
|
|
|
|
|
#
|
618
|
|
|
|
|
|
|
# END
|