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 :
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);
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
 
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);
Mon problème reside au niveau des fonction "RPAD".

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:
Nom : pb alignement.png
Affichages : 504
Taille : 66,5 Ko

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