Vue imbiquée

Résolu/Fermé
dadateite Messages postés 312 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 4 août 2014 - 19 nov. 2012 à 10:02
dadateite Messages postés 312 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 4 août 2014 - 19 nov. 2012 à 14:38
Bonjour,

J'ai des requetes avec des vues imbriquées, j'aimerais faire en sorte que ces requetes n'utilisent plus ces vues, comment faire?
La requête en question:
--Description : Offre
SELECT
p."MARCHE",p."PX_ID",p."DESCRIPTION",p."STATUS",p."PROD_BRAND",p."CATEGORIE",p."INSTALLED_PROD",p."DEBUT_COMMERCIAL",p."EXT_ID",p."AVANTAGE_BOOST",p."TYPE_SO",p."ALLOW_MODIFY",p."BILLABLE_FLAG",p."SALEABLE_FLG",p."FC_SUPPR_FLAG",p."FC_RETRAIT_FLAG",p."SIM_ONLY",p."FC_ELIGIBILITE",p."PRIX",p."ALCEA_ID",lnk.product_group,c.libelle /*AS catalogue*/,c.fc_cata_type
FROM
v_produit p
INNER JOIN PS_PROD_PGRP_LNK lnk ON lnk.product_id=p.px_id
LEFT OUTER JOIN v_cata c ON c.product_group=lnk.product_group AND c.prod_grp_type=lnk.prod_grp_type
AND c.prod_grp_type='CMDE' AND p.categorie IN ('OFFRE','OFFRE TYPE')


v_produit
--Description : liste des produits
SELECT
so.setid /*AS marche*/,so.product_id /*AS px_id*/,descr /*AS description*/,so.eff_status /*AS status*/,
so.prod_brand,so.prod_category /*AS categorie*/,installed_prod,date_begin /*AS debut_commercial*/,kl_prd_ext_id /*AS ext_id*/,so.FC_AVANTAGE /*AS avantage_boost*/
,tso.description /*AS type_so*/,
auth.allow_modify,auth.billable_flag,auth.saleable_flg,fc_suppr_flag,fc_retrait_flag,
CASE auth.fc_simonly_flag WHEN 'Y' THEN 'Y' ELSE 'N' END /*AS sim_only*/,
FC_ELIGIBILITE,p.rt_total_price /*AS prix*/,
so.fc_alcea_id /*AS alcea_id*/
FROM
ps_prod_item so
LEFT OUTER JOIN ps_fc_type_so tso ON tso.fc_type_so=so.fc_type_so
LEFT OUTER JOIN ps_fc_otso_com_tbl auth ON auth.product_id=so.product_id and so.setid=auth.setid
LEFT OUTER JOIN PS_FC_PREST_POST p ON p.FC_PPOST_ID=so.fc_ppost_id



v_cata
--Description : catalogue d'offres
SELECT
product_group,prod_grp_type,descr /*as libelle*/,fc_cata_type,fc_calc_fmig
FROM
ps_prod_group_tbl
WHERE
prod_grp_type IN ('CMDE','CMPT')
ORDER BY 
descr



A voir également:

5 réponses

Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
19 nov. 2012 à 10:08
Bonjour,
Pour ne plus utiliser ces vues, il faudrait créer des tables qui correspondraient à un instant t au contenu de ces vues :
SELECT * INTO MaNouvelleTable FROM  v_produit
(Pareil pour les autres vues)
Cependant on perd le caractère dynamique des vues, pour le remplacer on peut utiliser un job qui truncate MaNouvelleTable et qui la re-alimente via la même requête...

J'espère avoir pu t'aider,
A+
1
dadateite Messages postés 312 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 4 août 2014 180
19 nov. 2012 à 10:28
Le problème c'est que les vues seront supprimées.

N'y aurait-il pas un moyen plus simple de gérer ca?

Merci d'avance
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
19 nov. 2012 à 10:40
Pour ne plus les utiliser du tout, il faudrait créer alors un job qui supprime/recréé MaNouvelleTable via la requête source de la vue pour garder ce côté dynamique. Si les données n'ont pas besoin d'être mises à jour continuellement, juste créer une table avec le contenu de la vue suffit (ce qui doit être le cas si les vues doivent être supprimées).
0
dadateite Messages postés 312 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 4 août 2014 180
19 nov. 2012 à 10:51
Je n'ai jamais utilisé les jobs, pourrais tu me donner un exemple.

En essayant de trouve une autre solution, je me demande s'il n'y a pas moyen d'inclure la requete de la vue dans ma requete principale, exemple:

SELECT
p."MARCHE",p."PX_ID",p."DESCRIPTION",p."STATUS",p."PROD_BRAND",p."CATEGORIE",p."INSTALLED_PROD",p."DEBUT_COMMERCIAL",p."EXT_ID",p."AVANTAGE_BOOST",p."TYPE_SO",p."ALLOW_MODIFY",p."BILLABLE_FLAG",p."SALEABLE_FLG",p."FC_SUPPR_FLAG",p."FC_RETRAIT_FLAG",p."SIM_ONLY",p."FC_ELIGIBILITE",p."PRIX",p."ALCEA_ID",lnk.product_group,c.libelle /*AS catalogue*/,c.fc_cata_type
FROM
(
SELECT
so.setid /*AS marche*/,so.product_id /*AS px_id*/,descr /*AS description*/,so.eff_status /*AS status*/,
so.prod_brand,so.prod_category /*AS categorie*/,installed_prod,date_begin /*AS debut_commercial*/,kl_prd_ext_id /*AS ext_id*/,so.FC_AVANTAGE /*AS avantage_boost*/
,tso.description /*AS type_so*/,
auth.allow_modify,auth.billable_flag,auth.saleable_flg,fc_suppr_flag,fc_retrait_flag,
CASE auth.fc_simonly_flag WHEN 'Y' THEN 'Y' ELSE 'N' END /*AS sim_only*/,
FC_ELIGIBILITE,p.rt_total_price /*AS prix*/,
so.fc_alcea_id /*AS alcea_id*/
FROM
ps_prod_item so
LEFT OUTER JOIN ps_fc_type_so tso ON tso.fc_type_so=so.fc_type_so
LEFT OUTER JOIN ps_fc_otso_com_tbl auth ON auth.product_id=so.product_id and so.setid=auth.setid
LEFT OUTER JOIN PS_FC_PREST_POST p ON p.FC_PPOST_ID=so.fc_ppost_id
)
AS p
INNER JOIN PS_PROD_PGRP_LNK lnk ON lnk.product_id=p.px_id
LEFT OUTER JOIN v_cata c ON c.product_group=lnk.product_group AND c.prod_grp_type=lnk.prod_grp_type
AND c.prod_grp_type='CMDE' AND p.categorie IN ('OFFRE','OFFRE TYPE')
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
19 nov. 2012 à 11:13
Tu peux aussi faire comme ça, c'est un choix en fonction de ton besoin :
Soit tu prévois de requêter souvent ces résultats, et il vaut mieux l'avoir actualisé une fois par jour (par exemple) dans une table fixe
Ou alors tu ne prévois pas de requêter la dessus souvent, et il vaut mieux inclure la requête dans la clause FROM et supporter la charge d'une "double requête" quelque fois par semaine (par exemple encore une fois).

Pour la première solution, créer un job permet de planifier une requête de façon à ce qu'elle s'exécute périodiquement.
Voici un tuto pour créer un job.
Ah mais j'oubliais, les jobs c'est pour SQL Server, ton post est classé en "Bases de données"... Quelle est ta plateforme ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dadateite Messages postés 312 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 4 août 2014 180
19 nov. 2012 à 11:22
Je suis sur du Oracle, je vais dans un premier temps m'orienter sur la seconde solution (inclure la vue dans ma requête), dans l'exemple que j'ai donné dans mon message précédent, j'ai une erreur d'exécution, pourquoi?

Merci d'avance.
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
19 nov. 2012 à 11:32
L'erreur d'exécution, ça peut venir de plein de choses ^^
Voir ceci
Ceci également
Et pourquoi pas ça aussi
0
dadateite Messages postés 312 Date d'inscription lundi 10 décembre 2007 Statut Membre Dernière intervention 4 août 2014 180
19 nov. 2012 à 14:38
Ok merci, j'avais mal nommé les libellés.
0