Bonjour,

Je travaille sur une BD 8.4 sous Cent-OS 5.2.


J'ai créé une Vue qui doit contenir des infos pour faire de la mise à jour sur une table "journalisée" :

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
 
CREATE OR REPLACE VIEW sch2.vue_action AS 
 SELECT 
        CASE
            WHEN act.id_action IS NULL THEN 'D'::text
            ELSE 'I'::text
        END AS j_flag, journal.ets, journal.j_date, 
        CASE
            WHEN act.id_action IS NULL THEN ((('delete from sch1.action where id_action='::text || chr(39)) || journal.id_action::text) || chr(39)) || ';'::text
            ELSE NULL::text
        END AS j_delete, 
        CASE
            WHEN act.id_action IS NULL THEN NULL::text
            ELSE ((((((('insert into sch1.action values('::text || chr(39)) || journal.id_action::text) || chr(39)) || ','::text) || chr(39)) || act.libelle::text) || chr(39)) || ');'::text
        END AS j_insert, 
        CASE
            WHEN act.id_action IS NULL THEN NULL::text
            ELSE ((((((('update sch1.action set libelle='::text || chr(39)) || act.libelle::text) || chr(39)) || ' where id_action='::text) || chr(39)) || journal.id_action::text) || chr(39)) || ';'::text
        END AS j_update
   FROM ( SELECT jour_action.ets, jour_action.id_action, max(jour_action.j_date) AS j_date
           FROM sch2.j_action jour_action
          WHERE jour_action.j_consumed::text = '1'::text
          GROUP BY jour_action.ets, jour_action.id_action) journal
   LEFT JOIN action act ON journal.id_action::text = act.id_action::text;
J'ai deux questions :
- Y-a-t'il une meilleure solution que d'imbriquer des CASE ?
- Y-a-t'il une limite à la longueur de la valeur que je retourne dans les CASE (delete from ...., insert into ...., update .... ?

J'espère être clair.

Merci pour vos réponses.