Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/07/2008, 08h42   #1
Invité de passage
 
Inscription : janvier 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 7
Points : 2
Points : 2
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
anjin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 09h02   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
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.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 09h49   #3
Invité de passage
 
Inscription : janvier 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 7
Points : 2
Points : 2
Je me suis mal exprimé ... Je dois faire ça en PL/SQL, c'est une procédure de correction périodique
anjin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 11h05   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 320
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 320
Points : 5 839
Points : 5 839
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.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 15h29   #5
Membre confirmé
 
Avatar de JerryMouse
 
Homme N'Guessan KOUAME
Inscription : avril 2002
Messages : 210
Détails du profil
Informations personnelles :
Nom : Homme N'Guessan KOUAME
Localisation : Côte d'Ivoire

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

Informations forums :
Inscription : avril 2002
Messages : 210
Points : 270
Points : 270
Envoyer un message via MSN à JerryMouse Envoyer un message via Yahoo à JerryMouse
Pourquoi ne pas faire suivre un Update d'un insert?
Code :
1
2
INSERT INTO Table1 SELECT * FROM Table2 WHERE condition;
UPDATE table1 SET col1=val1, Col2=Val2... WHERE condition;
__________________
Très souvent, le plus difficile est de savoir ce que l'on veut.
JerryMouse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 18h15   #6
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
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 :
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...
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2008, 18h51   #7
Membre éclairé
 
Inscription : août 2005
Messages : 316
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : août 2005
Messages : 316
Points : 342
Points : 342
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
c.langlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h40.


 
 
 
 
Partenaires

Hébergement Web