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 :

Insert d'instances définies par un "WITH SELECT" [10g]


Sujet :

SQL Oracle

  1. #1
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut Insert d'instances définies par un "WITH SELECT"
    Bonjour,
    J'ai défini la requète suivante qui ramène les données attendues :
    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
    22
    23
    24
    SQL> desc actlist
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     TIME_ACT                                  NOT NULL NUMBER(38)
     NON_CTL_AREA_NAME                         NOT NULL VARCHAR2(12)
     AIRSPACE_ENV_NAME                         NOT NULL VARCHAR2(20)
     
    SQL> with sr AS
    ( select non_ctl_area_name,time_act as time_courant,
      2    3  lead(time_act) over(partition by non_ctl_area_name order by time_act asc) as time_suivant
      4  from actlist where airspace_env_name='MAASNEW' and non_ctl_area_name='NORB'
      5  )
      6  select non_ctl_area_name,time_courant,time_suivant
      7  from sr
      8  where time_suivant is not null;
     
    NON_CTL_AREA TIME_COURANT TIME_SUIVANT
    ------------ ------------ ------------
    NORB                 1000         1100
    NORB                 1100         1200
    NORB                 1200         1300
    NORB                 1300         1400
     
    SQL>
    J'ai besoin d'insérer les résultats dans une table afin de la réexploiter par d'autres requètes. J'ai testé la requète suivante :
    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
    SQL> desc time_tmp
     Name                                      Null?    Type
     ----------------------------------------- -------- ----------------------------
     NON_CTL_AREA_NAME                         NOT NULL VARCHAR2(12)
     TIME_COURANT                              NOT NULL NUMBER(38)
     TIME_SUIVANT                              NOT NULL NUMBER(38)
     
    SQL> INSERT INTO TIME_TMP (
      WITH SR AS (SELECT NON_CTL_AREA_NAME,TIME_ACT AS TIME_COURANT,
      2    3                LEAD(TIME_ACT) OVER(PARTITION BY NON_CTL_AREA_NAME ORDER BY TIME_ACT ASC) AS TIME_SUIVANT
      4         FROM ACTLIST
      5         WHERE AIRSPACE_ENV_NAME = 'MAASNEW')
      6    SELECT s.NON_CTL_AREA_NAME,s.TIME_COURANT,s.TIME_SUIVANT
      7    FROM SR s
      8    WHERE s.TIME_SUIVANT IS NOT NULL)
      9  ;
      WHERE s.TIME_SUIVANT IS NOT NULL)
                                      *
    ERROR at line 8:
    ORA-32034: unsupported use of WITH clause
    Je ne sais pas trop comment formuler la requète, je compte sur les suggestions de la communauté.
    Merci de votre aide

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Insert Into tab(col1, col2, ...)
    With Sr As (
      Select colx, coly, ... From tabX
    )
    Select colx, coly, ...
      From sr

  3. #3
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut
    Donc en fait il fallait repréciser les noms de colonnes à insérer. Je n'y aurais pas pensé compte tenu que cette requète :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TIME_TMP  select NON_CTL_AREA_NAME,TIME_ACT,TIME_ACT from ACTLIST;
    est correcte.
    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Une requête INSERT sans précision des noms de colonnes n'est correcte que tant qu'on ne modifie pas la structure de la table alimentée.
    Si le nombre ou l'ordre des colonnes de la table est modifié, cette requête tombera en erreur, dans le meilleur des cas.
    Mais il peut arriver aussi, après un changement d'ordre des colonnes, que les valeurs ne soient plus insérées dans les bonnes colonnes, sans message d'erreur mais avec un résultat qui n'est pas celui attendu et qui pourra être préjudiciable à l'intégrité des données.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par awalter1 Voir le message
    Donc en fait il fallait repréciser les noms de colonnes à insérer. ...
    Non ce n'est pas obligatoire mais regardez votre exemple: vous avez ouvert une parenthèse après le nom de la table. Relisez aussi le bon conseil de al1_24.

  6. #6
    Membre averti Avatar de awalter1
    Inscrit en
    Août 2004
    Messages
    994
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 994
    Points : 407
    Points
    407
    Par défaut

    Oui en effet, le parenthèsage devant le WIDTH n'était pas nécessaire en l'état.
    Merci de m'avoir débloqué.

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

Discussions similaires

  1. SQL Server / Fonction définie par l'utilisateur
    Par borgfabr dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2005, 15h14
  2. Voir quelques enregistrements définis par leur Index
    Par Lucien dans le forum Bases de données
    Réponses: 4
    Dernier message: 06/12/2004, 08h42
  3. Modifier un type défini par l'utilisateur
    Par soazig dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/08/2004, 12h47
  4. Fonctions définies par l'utilisateur
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/06/2003, 11h17

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