Bonjour,

Des données sont chargées dans les colonnes d'une table temporaire depuis une table externe. Certains traitements sont à effectuer sur certaines colonnes avant chargement dans la table cible définitive.

Je souhaiterais savoir comment implémenter le tout.
Le chargement table externe vers table temporaire est ok!
Simplement je souhaite savoir si je dois:
1/ Effectuer les calculs (=traitements) sur les colonnes une fois que les données sont chargées dans la table temporaire ?
2/ Ou alors dois-je implémenter les calculs à effectuer sur les colonnes en même temps qu'elles sont chargées depuis la table externe ?

J'ai essayé de faire le traitement après chargement mais le programme ne semble pas aimer. Voilà la structure de mon code :

1/ Chargement dans table temporaire depuis la table externe:
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
 
 BEGIN
          IF is_INDICES THEN
                EXECUTE IMMEDIATE '
                INSERT INTO toto_temp 
          (
                    key_id,
                    evaluation_date,
                     ... etc...
                    event_type,
                    event_amount,
                    terms,
                    termsdate,
                    status     
               )
                SELECT
                    keyidseq.NEXTVAL,
                     evaluation_date,
                     ... etc...
                    event_type,
                    event_amount,
                    terms,
                    termsdate,
                    status
                FROM '||extTableName;    
         ELSE
                EXECUTE IMMEDIATE '
                INSERT INTO toto_temp                  
               (
                    key_id,
                    evaluation_date,
                     ... etc...
                    event_type,
                    event_amount,
                    terms,
                    termsdate,
                    status 
                )
                  SELECT 
                keyidseq.NEXTVAL,
                     evaluation_date,
                    ... etc...
                    event_type,
                    event_amount,
                    terms,
                    termsdate,
                    status
               FROM '||extTableName; 
          end if;
Exception
...
end;
2/ Ma solution de traitement suivait ainsi dans la même procédure :

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
 
Begin 
   IF IS_NOT_INDICES THEN
      SELECT ecs.event_type INTO v_event_type FROM TOTO_TEMP ecs
     WHERE ecs.termsdate = ecs.evaluation_date;
      AND ecs.status = 'IMPLEMENTED';
 
        IF v_event_type IS NOT NULL THEN 
        SELECT REPLACE(regexp_substr(ecs.event_type, '[[:digit:]]{1}.[[:digit:]]* SPECIAL'),'SPECIAL','')
          INTO v_event_amount
          FROM TOTO_TEMP ecs
         WHERE ecs.termsdate = ecs.evaluation_date
           AND ecs.status = 'IMPLEMENTED';
         END IF;
 
        IF v_event_amount IS NOT NULL 
        THEN
         UPDATE toto_temp  SET 
               special_div_in_prov_currency =  v_event_amount;  
       END IF;
Mais cela ne fonctionne pas.
J'ai eu alors dans l'idée d'implémenter ces traitements directement sur les colonnes durant le processus de chargement mais cela me semble lourd et surtout je ne saurais comment faire.

J'ai donc nesoin d'être guidée.

Merci pour votre aide.