Hi all!
Je me trouve confronté à un petit soucis en PLSQL sur une base oracle8i
J'essaie (mais je galère pas mal) de faire un petit bloc PLSQL qui me récupère le nombre de lignes d'un certain type (Insert,Update,Delete).
Quand je lance la requête sous PLSQL Developper:
J'obtiens bien mes trois colonnes Insert,Update et Delete.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT SUM( CASE WHEN dmltype$$ = 'I' THEN 1 ELSE 0 END ) num_pending_inserts, SUM( CASE WHEN dmltype$$ = 'U' THEN 1 ELSE 0 END ) num_pending_updates, SUM( CASE WHEN dmltype$$ = 'D' THEN 1 ELSE 0 END ) num_pending_deletes FROM mlog$_equipment_object_tab;
Après quelques ajustements:
Quand je test ce bloc il me sort une exception ORA-00972: indentifier too long.
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 DECLARE select_I VARCHAR2(2000); volume_I NUMBER; select_U VARCHAR2(2000); volume_U NUMBER; select_D VARCHAR2(2000); volume_D NUMBER; CURSOR mlog is select log_table from all_snapshot_logs where log_table = 'MLOG$_EQUIPMENT_OBJECT_TAB'; mlog_name VARCHAR2(50); BEGIN FOR IC IN mlog LOOP mlog_name := IC.LOG_TABLE; --déclaration des commandes select_I := 'SELECT SUM(CASE WHEN DMLTYPE$$ = "I" THEN 1 ELSE 0 END) FROM ' || mlog_name || 'WHERE CHANGE_VECTOR IS NOT NULL;' ; select_U := 'SELECT SUM( CASE WHEN DMLTYPE$$ = "U" THEN 1 ELSE 0 END ) FROM' || mlog_name; select_D := 'SELECT SUM( CASE WHEN DMLTYPE$$ = "D" THEN 1 ELSE 0 END ) FROM' || mlog_name; --exécution des commandes execute immediate select_I into volume_I; execute immediate select_U into volume_U; execute immediate select_D into volume_D; -- Output le volume de données à répliquer -- DBMS_OUTPUT.put_line('Log: '||IC.LOG_TABLE || 'Inserts: '||num_pending_inserts || 'Updates: ' || num_pending_updates || 'Deletes: ' || num_pending_deletes ); END LOOP; END;
Comment le nom de ma table (27 caractères) peut être trop long dans un cas et pas dans l'autre? Est-ce que ce sont mes adaptations qui sont pas terribles (ce qui est plus que probable étant donné mon niveau en PLSQL...)?
Partager