IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

View avec oracle


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 99
    Par défaut View avec oracle
    Bonjour,
    J'ai compilé cette vue mais ça pas marché
    voila le message d'erreur ainsi que la vue:

    Msg D'erreur: ORA-00923: FROM keyword not found where expected
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    create or replace view MFT_AR_FACTURE_INFO_PROMO  
    (YRES_ID,SHORTDESC,MONTANT,NBR_JOUR,DU,AU)
    as
    SELECT MFT_AR_PROMO_YRES  YRES_ID,
    MFT_AR_PROMO_SHORTDESC  SHORTDESC,
    max(MFT_AR_PROMO_MOUNT) as MONTANT,
    count(*) AS Nbr_jours NBR_JOUR,
    min(MFT_AR_PROMO_DATE) AS Du,
    max(MFT_AR_PROMO_DATE) AS Au 
    FROM
    (SELECT MFT_AR_PROMO_YRES,MFT_AR_PROMO_SHORTDESC,MFT_AR_PROMO_MOUNT,MFT_AR_PROMO_DATE,
    sum(dif) OVER (PARTITION BY MFT_AR_PROMO_YRES ORDER BY MFT_AR_PROMO_DATE) AS plage 
    FROM
    (SELECT MFT_AR_PROMO_YRES,MFT_AR_PROMO_SHORTDESC,MFT_AR_PROMO_MOUNT,MFT_AR_PROMO_DATE,
    coalesce(abs(MFT_AR_PROMO_MOUNT-lag(MFT_AR_PROMO_MOUNT) over (PARTITION BY MFT_AR_PROMO_YRES ORDER BY MFT_AR_PROMO_DATE)),0) AS dif 
    FROM MFT_AR_PROMO  ))
     
     
    GROUP BY  MFT_AR_PROMO_YRES,MFT_AR_PROMO_SHORTDESC,plage ORDER BY MFT_AR_PROMO_YRES, Du
    /

  2. #2
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Ne manque-t-il pas simplement des AS ou des virgules ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MFT_AR_PROMO_YRES  YRES_ID,
    MFT_AR_PROMO_SHORTDESC  SHORTDESC
    Deviedrait alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MFT_AR_PROMO_YRES AS YRES_ID,
    MFT_AR_PROMO_SHORTDESC AS SHORTDES

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 99
    Par défaut
    Non ce n'est pas le problème des AS ou les virgules le message d'erreur c'est
    ORA-00923: FROM keyword not found where expected

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Si j'indente correctement la requête, je constate qu'il n'y a pas d'alias aux FROM (sous_requête). Ça pourrait être ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    CREATE OR REPLACE VIEW MFT_AR_FACTURE_INFO_PROMO  
      (YRES_ID,SHORTDESC,MONTANT,NBR_JOUR,DU,AU)
    AS
    SELECT MFT_AR_PROMO_YRES  YRES_ID,
      MFT_AR_PROMO_SHORTDESC  SHORTDESC,
      max(MFT_AR_PROMO_MOUNT) AS MONTANT,
      count(*) AS Nbr_jours NBR_JOUR,
      min(MFT_AR_PROMO_DATE) AS Du,
      max(MFT_AR_PROMO_DATE) AS Au 
    FROM (
      SELECT MFT_AR_PROMO_YRES, MFT_AR_PROMO_SHORTDESC, MFT_AR_PROMO_MOUNT, MFT_AR_PROMO_DATE,
        sum(dif) OVER (PARTITION BY MFT_AR_PROMO_YRES ORDER BY MFT_AR_PROMO_DATE) AS plage 
      FROM (
        SELECT MFT_AR_PROMO_YRES, MFT_AR_PROMO_SHORTDESC, MFT_AR_PROMO_MOUNT, MFT_AR_PROMO_DATE,
          coalesce(abs(MFT_AR_PROMO_MOUNT-lag(MFT_AR_PROMO_MOUNT) over (PARTITION BY MFT_AR_PROMO_YRES ORDER BY MFT_AR_PROMO_DATE)),0) AS dif 
        FROM MFT_AR_PROMO  
      ) -- Manque alias du FROM intermédiaire
    ) -- Manque alias du FROM général
    GROUP BY  MFT_AR_PROMO_YRES,MFT_AR_PROMO_SHORTDESC,plage ORDER BY MFT_AR_PROMO_YRES, Du
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 99
    Par défaut
    J'ai mis des alias mais il reste le même problème

  6. #6
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Citation Envoyé par bargougui86 Voir le message
    Non ce n'est pas le problème des AS ou les virgules le message d'erreur c'est
    ORA-00923: FROM keyword not found where expected
    Justement... à mon sens, ça signifie qu'il attendait un FROM quelque part, mais qu'il ne l'a pas trouvé.
    Or, à moins que mon bouquin et moi-même ne nous trompions (ce qui est probable, certes), un SELECT sous oracle se compose grosso modo comme suit : (je vous épargne ce qui ne concerne pas ce dont je parle)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT select_item [AS alias][, select_item [AS alias]]* [INTO ...] FROM ...
    Donc, un select_item ne peut être suivi que par une virgule, un AS, un INTO ou un FROM.
    Ce qui me ramène à ceci :
    Ne manque-t-il pas simplement des AS ou des virgules ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MFT_AR_PROMO_YRES  YRES_ID,
    MFT_AR_PROMO_SHORTDESC  SHORTDESC
    Deviedrait alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT MFT_AR_PROMO_YRES AS YRES_ID,
    MFT_AR_PROMO_SHORTDESC AS SHORTDES
    Si effectivement mon livre et moi-même nous trompons, pourrait-on m'expliquer la signification de cette construction ?

    EDIT : d'ailleurs, remarquez que si ce que j'avance est juste, ça colle avec la définition de la vue. Voyez donc les noms des deux premières colonnes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE OR REPLACE VIEW MFT_AR_FACTURE_INFO_PROMO  
    (YRES_ID,SHORTDESC,MONTANT,NBR_JOUR,DU,AU)
    Et pour couronner le tout, il y a précisément 2 espaces entre MFT_AR_PROMO_YRES et YRES_ID dans la requête présentée. De quoi placer un mot entre... un AS par exemple

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ce que ne précise pas ton livre, c'est que le AS n'est pas nécessaire au niveau du select pour faire un alias :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select toto as alias1, titi as alias2 from ma_table
    équivaut à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select toto alias1, titi alias2 from ma_table

  8. #8
    Membre confirmé
    Inscrit en
    Mars 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 99
    Par défaut
    Merci Antoine_935 pour votre explication mais le problème c'est pas au niveau des espaces ou les alia, il n 'y a pas de souci si on met des espaces supplémentaire ou des alias et comme il a dit Jerome_Mtl on peut mettre ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT champs1 toto FROM ...
    Mais d'après mon analyse le problème c'est au niveau des select imbriqué mais je me bloque .

  9. #9
    Membre émérite
    Avatar de Antoine_935
    Profil pro
    Développeur web/mobile
    Inscrit en
    Juillet 2006
    Messages
    883
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur web/mobile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 883
    Par défaut
    Ah c'est juste... je connaissais bien ça pour la liste des FROM, mais pour la liste des SELECT... Au temps pour moi donc

    Malgré tout, ça collait si bien... ça vaudrait la peine de tester quand même

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel langage avec Oracle????
    Par djedje11 dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 16/03/2004, 11h15
  2. Réponses: 14
    Dernier message: 01/09/2003, 15h54
  3. Conseils pour developper une application avec Oracle
    Par belugha dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 02/06/2003, 16h03
  4. Tree View avec XML et XSL
    Par Drooxy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/04/2003, 10h21
  5. [Crystal Report 9] Changer de schéma avec Oracle
    Par sur_uix dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 14/11/2002, 12h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo