PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

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

#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

Pied de page des forums