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

PL/SQL Oracle Discussion :

Insérer dans une table le résultat d'une requete


Sujet :

PL/SQL Oracle

  1. #1
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut Insérer dans une table le résultat d'une requete
    Bonjour,

    J'ai un soucis, je n'arrive pas à trouver comment ecrire ceci :

    Je souhaite insérer dans une table le résultat d'une requête qui me ramène plusieurs résultat.
    J'ai commencer a ecrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    sql_stmt := 'select count(*) from DBDWAUTOUSR.TMP_PURGE_ALL_TABLES';
    		execute immediate sql_stmt into cnt;
     
    		if cnt = 0 then
    			select distinct substr(TABLE_NAME,1,16) as TABLE_NAME from all_tables where (REGEXP_like(TABLE_NAME,'^M[0-9]{6}_S[0-9]{7}$') or TABLE_NAME='MSG') AND OWNER = 'DBDWAUTOUSR' AND TABLE_NAME > null order by 1;
    			execute immediate 'insert /*+append */ into DBDWAUTOUSR.TMP_PURGE_ALL_TABLES ' ;
    		end if;
    En gros si m'a table 1 est vide, j'aimerais insérer le résultat de ma requete dans ma table 1 (La requete me ramène le nom de toute mes table du schéma.
    Mais je n'arrive pas à trouver la syntaxe qui me permet ça.

    Merci d'avance pour votre aide.

  2. #2
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut
    J'ai oublié de préciser que je souhaite insérer les valeurs dans ma colonne "TABLE_NAME"

  3. #3
    Membre très actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2014
    Messages
    260
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2014
    Messages : 260
    Par défaut
    Bonjour,

    C'est toujours bien d'avoir de potentiels messages d'erreurs

    Sinon, ca ne répond pas forcement à votre besoin mais la clause merge ne serait-elle pas plus simple par rapport à ce que je comprends de votre besoin ?

    Bisous bisous

  4. #4
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut
    Effectivement, je ne connaissais pas la clause merge sur plsql, je vais essayer ça.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Pas besoin de execute immediate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into DBDWAUTOUSR.TMP_PURGE_ALL_TABLES
    select distinct substr(TABLE_NAME,1,16) as TABLE_NAME 
      from all_tables 
     where (REGEXP_like(TABLE_NAME,'^M[0-9]{6}_S[0-9]{7}$') or TABLE_NAME='MSG') 
       AND OWNER = 'DBDWAUTOUSR' 
     order by 1;

  6. #6
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Pas besoin de execute immediate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into DBDWAUTOUSR.TMP_PURGE_ALL_TABLES
    select distinct substr(TABLE_NAME,1,16) as TABLE_NAME 
      from all_tables 
     where (REGEXP_like(TABLE_NAME,'^M[0-9]{6}_S[0-9]{7}$') or TABLE_NAME='MSG') 
       AND OWNER = 'DBDWAUTOUSR' 
     order by 1;
    Salut, merci, mais le pb c'est qu'en faisant comme ceci je crois qu'il n'insère que le premier résultat de la requete non? De plus ça ne précise pas sur quel colonne il doit insérer le résultat de la requete.

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    La syntaxe pour insérer dans une table le résultat d'un select c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into la_table (liste,des,colonnes)
    select liste,des,colonnes
      from ...
    Je vous laisse donc adapter à votre code que l'on ne connais pas.
    Ce qui n'est pas clair pour moi, c'est ce que vous souhaitez insérer, la liste des noms de tables ? ou leurs contenus ?

  8. #8
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 200
    Par défaut
    Un insert, ça peut insèrer des millions de lignes ; ce n'est pas limité à une seule ligne.

    Quand on a des doutes sur une question comme ça, on ne touche pas à PLSQL, on ne touche pas à Merge, on lit les manuels de formation.

  9. #9
    Membre confirmé
    Homme Profil pro
    Consultant MOE-MOA Finance
    Inscrit en
    Novembre 2019
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE-MOA Finance
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2019
    Messages : 17
    Par défaut
    Cette requête devrait être très proche de ce que vous attendez:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO DBDWAUTOUSR.TMP_PURGE_ALL_TABLES (TABLE_NAME)
    SELECT distinct substr(TABLE_NAME,1,16) --as TABLE_NAME 
    from   all_tables 
    where  (REGEXP_like(TABLE_NAME,'^M[0-9]{6}_S[0-9]{7}$') or TABLE_NAME='MSG') AND    OWNER = 'DBDWAUTOUSR' AND TABLE_NAME <> null    --C'est votre SELECT
           -- order by 1 (ça sert à rien d'ordonner les données dans un INSERT)
    AND    NOT EXISTS (SELECT 1 FROM DBDWAUTOUSR.TMP_PURGE_ALL_TABLES);  -- On n'insère que si la table est vide comme vous l'avez demandé

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/06/2016, 11h16
  2. Réponses: 4
    Dernier message: 31/05/2012, 12h00
  3. Réponses: 2
    Dernier message: 29/09/2009, 00h50
  4. Insérer dans une table des donnees formatées
    Par lothar59 dans le forum Langage
    Réponses: 1
    Dernier message: 19/09/2006, 18h35
  5. Réponses: 3
    Dernier message: 23/04/2006, 12h14

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