Hello à tous,
Je vous expose mon problème, qui semble tout bête à première vue mais qui m'enquiquine quelque peu:
J'ai créé une vue matérielle (FIXALARMS_MV) à partir d'une table appelée FIXALARMS.
Script de construction de la table FIXALARMS :
La vue matérielle se construit comme suit:
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
67
68
69
70
71
72
73
74
75
76 DROP TABLE IFIXEVENTWRITER.FIXALARMS CASCADE CONSTRAINTS; CREATE TABLE IFIXEVENTWRITER.FIXALARMS ( ALM_NATIVETIMELAST DATE, ALM_DATELAST VARCHAR2(12 BYTE), ALM_TIMELAST VARCHAR2(15 BYTE), ALM_LOGNODENAME VARCHAR2(10 BYTE), ALM_PHYSLNODE VARCHAR2(10 BYTE), ALM_TAGNAME VARCHAR2(30 BYTE), ALM_ALMSTATUS VARCHAR2(9 BYTE), ALM_VALUE VARCHAR2(40 BYTE), ALM_ALMEXTFLD1 VARCHAR2(80 BYTE), ALM_MSGTYPE VARCHAR2(11 BYTE), ALM_DESCR VARCHAR2(480 BYTE), ALM_ALMPRIORITY VARCHAR2(10 BYTE), ALM_ALMAREA VARCHAR2(500 BYTE), ALM_ALMEXTFLD2 VARCHAR2(80 BYTE), ALM_OPNAME VARCHAR2(32 BYTE), ALM_OPFULLNAME VARCHAR2(80 BYTE), ALM_OPNODE VARCHAR2(10 BYTE), ALM_MSGID VARCHAR2(128 BYTE), ALM_NATIVETIMEIN DATE, ALM_DATEIN VARCHAR2(12 BYTE), ALM_TIMEIN VARCHAR2(15 BYTE), ALM_TAGDESC VARCHAR2(40 BYTE), ALM_UNIT VARCHAR2(13 BYTE), ALM_PERFNAME VARCHAR2(32 BYTE), ALM_PERFFULLNAME VARCHAR2(80 BYTE), ALM_PERFBYCOMMENT VARCHAR2(170 BYTE), ALM_VERNAME VARCHAR2(32 CHAR), ALM_VERFULLNAME VARCHAR2(80 BYTE), ALM_VERBYCOMMENT VARCHAR2(170 BYTE), ID NUMBER GENERATED ALWAYS AS IDENTITY ( START WITH 6347841 MAXVALUE 9999999999999999999999999999 MINVALUE 1 NOCYCLE CACHE 20 NOORDER NOKEEP) NOT NULL ) TABLESPACE USERS PCTUSED 0 PCTFREE 10 INITRANS 1 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ) LOGGING NOCOMPRESS NOCACHE MONITORING; CREATE UNIQUE INDEX IFIXEVENTWRITER.FIXALARMS_ID_PK ON IFIXEVENTWRITER.FIXALARMS (ID) LOGGING TABLESPACE USERS PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED PCTINCREASE 0 BUFFER_POOL DEFAULT ); ALTER TABLE IFIXEVENTWRITER.FIXALARMS ADD ( CONSTRAINT FIXALARMS_ID_PK PRIMARY KEY (ID) USING INDEX IFIXEVENTWRITER.FIXALARMS_ID_PK ENABLE VALIDATE);
Mon problème reside au niveau des fonction "RPAD".
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 DROP MATERIALIZED VIEW IFIXEVENTWRITER.FIXALARMS_MV ; CREATE MATERIALIZED VIEW IFIXEVENTWRITER.FIXALARMS_MV PCTFREE 0 TABLESPACE USERS STORAGE (INITIAL 64K) BUILD IMMEDIATE REFRESH FAST ON COMMIT WITH PRIMARY KEY DISABLE QUERY REWRITE AS SELECT ID AS ID, ALM_NATIVETIMELAST AS NATIVETIMELAST, ALM_LOGNODENAME AS LOGNODENAME, ALM_ALMEXTFLD1 AS CRITICALITY, ALM_DATELAST || chr(32) || Substr(ALM_TIMELAST,1,10)|| chr(32) || RPAD(ALM_LOGNODENAME, 8, chr(32)) || chr(32)|| RPAD(ALM_TAGNAME,30, chr(32)) || chr(9) ||RPAD(ALM_ALMSTATUS, 9, chr(32)) || chr(9) || RPAD(ALM_VALUE, 13, chr(32)) || chr(9) || ALM_DESCR AS ALMTEXT FROM IFIXEVENTWRITER.FIXALARMS ORDER BY ID DESC; CREATE INDEX IFIXEVENTWRITER.I_FIXALARMS3_MV ON IFIXEVENTWRITER.FIXALARMS3_MV (NATIVETIMELAST, LOGNODENAME);
Exemple avec RPAD(ALM_LOGNODENAME, 8, chr(32)) :
Si le texte contenu dans ALM_LOGNODENAME est de de 6 caractères (123456), la valeur retournée devrait être "123456 " avec 2 espaces à droite.
Or, il me retourne "123456 " (1 seul espace est present)
Mon problème est donc le suivant: Les informations ne s'alignent pas correctement:
J'ai essayé de remplacer le chr(32) par un chr(160), et là aucun problème. Le texte est bien aligné.
Je ne comprends donc pas l'origine du problème: Paramètrage de la colonne de la DB, Problème avec le NLS_LANG (pour info, j'utilise : FRENCH_SWITZERLAND.WE8MSWIN1252), ...
Si vous avez la moindre idée, je suis preneur.
Merci par avance
Bien cordialement,
Forfelet
Partager