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 :

Créer un enregistrement à partir d'un autre


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut Créer un enregistrement à partir d'un autre
    Bonjour

    J'ai un petit problème auquel je vois deux solutions, mais je ne sais pas trop ce qui est le mieux

    Je dois créer 1 (n) enregistrements à partir d'enregistrement existants dans deux tables de 300+ et 900+ champs. je me vois donc mal fair un select t.C1, T.C2 ......T.c900 from T en modifiant poncteullement une 10aine de champs.

    Je pensais donc faire un curseur en PL/SQL à partir d'un select * le fetcher dans une variable%ROWTYPE, modifier ponctuellement les champs (notament PK et d'autres) et réinjecter la nouvelle ligne. Problème : je ne vois pas comment insérer le contenu de ma variable%ROWTYPE sans énumérer tous les champs.

    Deuxième solution un peu plus lourde, faire un create like de ma table en table tmp, copier l'enregistrement, le modifier et faire un INSERT.

    La première solution me semnle plus élégante mais peu^t être pas possible.

    Quelqu'un a t'il une réponse ou une autre solution?

    Merci d'avance

  2. #2
    Expert confirmé 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
    Par défaut
    Citation Envoyé par anjin Voir le message
    ...
    je me vois donc mal fair un select t.C1, T.C2 ......T.c900 from T en modifiant poncteullement une 10aine de champs.
    ...
    SQL Developper, Pl/SQL Developper, probablement TOAD et autres applications similaires sont capables de générer le select de 900 zones bien plus vite que tu écriras ton code.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    Je me suis mal exprimé ... Je dois faire ça en PL/SQL, c'est une procédure de correction périodique

  4. #4
    Expert confirmé 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
    Par défaut
    Citation Envoyé par anjin Voir le message
    Je me suis mal exprimé ... Je dois faire ça en PL/SQL, c'est une procédure de correction périodique
    Si ta « 10aine » des champs à modifier est toujours la même je ne vois pas en quoi ça change la donne.

  5. #5
    Membre expérimenté Avatar de JerryMouse
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 215
    Par défaut
    Pourquoi ne pas faire suivre un Update d'un insert?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Insert into Table1 Select * from Table2 where condition;
    update table1 set col1=val1, Col2=Val2... where condition;

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Ce que te dis mnitu, c'est que TOAD peut te générer la requête, que tu vas pouvoir ensuite copier coller dans ton code :
    Browse schema -> clic droit sur ta table -> generate statement -> select
    Là Oracle te dit "Script copied to the clipboard".
    Tu vas dans ton éditeur de code PL SQL, et tu fais "CTRL - V".
    Puis tu remplace ce que tu veux par des variables...

    Bon, si tu y tiens vraiment, tu peux t'ouvrir un curseur sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select column_name
    from all_tab_cols
    where table_name = 'TaTableA900Colonnes'
    Tu boucles deçu pour générer ta requête insert, et tu fais un replace dans la chaîne des colonnes que tu dois modifier par tes paramètres...

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Par défaut
    si la table destination est la même (je n'ai pas compris si du faisait lecture d'une table de 900 colonne et insert dans une table de 300, ou si tu devais faire le même genre de traitement sur les deux tables)

    normalement tu peut faire un insert avec ton enregistrement modifié:
    insert into ta_table values(enrg_rowtype);

    je ne sais plus s'il il faut des parenthese et a partir de quel version d'oracle c'est dispo

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/01/2007, 09h02
  2. Créer un tableau à partir d'un autre tableau
    Par mariemor64 dans le forum ASP
    Réponses: 5
    Dernier message: 20/06/2006, 14h50
  3. Créer un bitmap à partir de plusieurs autres
    Par MiJack dans le forum Delphi
    Réponses: 4
    Dernier message: 08/06/2006, 13h47
  4. [Excel] Créer un tableau à partir d'un autre
    Par Ouguiya dans le forum Excel
    Réponses: 3
    Dernier message: 30/03/2006, 10h34
  5. Créer une table à partir d'une autre dans un script
    Par Dam)rpgheaven dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 24/06/2005, 10h55

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