Vous n'êtes pas identifié(e).
Pages : 1
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
- 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
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
Non, pas mieux que le CASE. Quant à la limite de la valeur, elle est à 1 Go.
Guillaume.
Hors ligne
Pages : 1