Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 21/02/2013 08:51:47
- mortimer.pw
- Membre
Lecture de vue
Bonjour,
Je travaille sur des bases en 8.4.2 et 9.2.2 sous Cent-Os 5.4.
J'ai écris une vue qui se présente ainsi :
CREATE OR REPLACE VIEW j_geo.jv_type_act AS
SELECT
CASE WHEN targ.id_type_act IS NULL THEN 'D' ELSE 'I' END AS j_flag,
j.id_site,
j.j_date,
CASE WHEN targ.id_type_act IS NULL THEN 'delete from geo.type_act where id_type_act='||chr(39)||j.id_type_act||chr(39) ELSE NULL END AS j_delete,
CASE WHEN targ.id_type_act IS NULL THEN NULL ELSE 'insert into geo.type_act values('||chr(39)||j.id_type_act||chr(39)||','||GEO.recode(targ.libelle)||','||chr(39)||targ.id_type_operation||chr(39)||','||targ.activer||','||targ.id_type_alim_cgu||')' END AS j_insert,
CASE WHEN targ.id_type_act IS NULL THEN NULL ELSE 'update geo.type_act SET libelle='||GEO.recode(targ.libelle)||',id_type_operation='||chr(39)||targ.id_type_operation||chr(39)||',activer='||targ.activer||',id_type_alim_cgu='||targ.id_type_alim_cgu||' where id_type_act='||chr(39)||j.id_type_act||chr(39) END AS j_update
FROM (SELECT l.id_site, l.id_type_act, max(l.j_date) AS j_date FROM j_geo.j_type_act l WHERE l.j_consumed = '1' GROUP BY l.id_site, l.id_type_act) j
LEFT JOIN geo.type_act targ ON j.id_type_act = targ.id_type_act;
Lorsque je la visualise sous PgAdmin, et que j'ai besoin d'y faire des modifications, la relecture est trés difficile car elle se présente ainsi :
CREATE OR REPLACE VIEW j_geo.jv_type_act AS
SELECT
CASE
WHEN targ.id_type_act IS NULL THEN 'D'::text
ELSE 'I'::text
END AS j_flag,
j.id_site, j.j_date,
CASE
WHEN targ.id_type_act IS NULL THEN (('delete from geo.type_act where id_type_act='::text || chr(39)) || j.id_type_act::text) || chr(39)
ELSE NULL::text
END AS j_delete,
CASE
WHEN targ.id_type_act IS NULL THEN NULL::text
ELSE ((((((((((((('insert into geo.type_act values('::text || chr(39)) || j.id_type_act::text) || chr(39)) || ','::text) || recode(targ.libelle)::text) || ','::text) || chr(39)) || targ.id_type_operation::text) || chr(39)) || ','::text) || targ.activer) || ','::text) || targ.id_type_alim_cgu) || ')'::text
END AS j_insert,
CASE
WHEN targ.id_type_act IS NULL THEN NULL::text
ELSE (((((((((((('update geo.type_act SET libelle='::text || recode(targ.libelle)::text) || ',id_type_operation='::text) || chr(39)) || targ.id_type_operation::text) || chr(39)) || ',activer='::text) || targ.activer) || ',id_type_alim_cgu='::text) || targ.id_type_alim_cgu) || ' where id_type_act='::text) || chr(39)) || j.id_type_act::text) || chr(39)
END AS j_update
FROM ( SELECT l.id_site, l.id_type_act, max(l.j_date) AS j_date
FROM j_type_act l
WHERE l.j_consumed::text = '1'::text
GROUP BY l.id_site, l.id_type_act) j
LEFT JOIN type_act targ ON j.id_type_act::text = targ.id_type_act::text;
Pourquoi toutes ces parenthèses, ::text ?
Est-ce que je n'écris pas correctement la vue ?
Merci pour vos réponses.
Hors ligne
#2 21/02/2013 17:58:43
- gleu
- Administrateur
Re : Lecture de vue
Votre écriture de la requête n'a rien à voir. pgAdmin demande à PostgreSQL d'afficher joliment la requête, ce qui a pour effet d'ajouter certaines choses, comme des parenthèses en plus si cela permet de mieux comprendre la requête, mais aussi d'ajouter des conversions comme les ::text que vous voyez. Rien d'alarmant à tout ça.
Guillaume.
Hors ligne
Pages : 1