Vous n'êtes pas identifié(e).

#1 13/07/2010 16:58:57

mortimer.pw
Membre

Syntaxe de déclaration d'une Vue

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" :

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.

Hors ligne

#2 13/07/2010 17:19:01

gleu
Administrateur

Re : Syntaxe de déclaration d'une Vue

- Y-a-t'il une meilleure solution que d'imbriquer des CASE ?

Sans plus de détails, non.

- Y-a-t'il une limite à la longueur de la valeur que je retourne dans les CASE (delete from ...., insert into ...., update .... ?

La taille maximale d'une cellule est de 1 Go. Donc, la longueur de la chaîne ne pourra pas dépasser ça. Vous rencontrerez d'autres difficultés avant (comme par exemple les performances pour construire une chaîne de 1 Go...).


Guillaume.

Hors ligne

#3 13/07/2010 17:33:08

mortimer.pw
Membre

Re : Syntaxe de déclaration d'une Vue

Bonjour Guillaume,

Merci pour la réponse.

Question 1 : c'est au niveau syntaxique que je me pose la question. Y-a-t'il une autre façon, peut être plus propre, d'écrire cette suite de CASE ?

Question 2 : Non aucun problème (jusqu'à présent, je suis en test). Je veux savoir si au niveau de la déclaration de la Vue je pourrai être limité sur la longueur de la valeur que je veux faire rentrer dans j_delete, j_insert et j_update ?

Hors ligne

#4 13/07/2010 18:05:35

gleu
Administrateur

Re : Syntaxe de déclaration d'une Vue

Non, pas mieux que le CASE. Quant à la limite de la valeur, elle est à 1 Go.


Guillaume.

Hors ligne

Pied de page des forums