|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 26 ![]() |
Bonjour,
Je suis en train de faire un script en PL/SQL permettant d'alimenter une base de données. Le problème est le suivant : j'ai deux tables que j'alimente grâce au script. Je dois par la suite alimenter une troisième table avec les données des deux tables alimentées auparavant. Si vous avez bien compris le système, je dois faire un select sur les deux tables, et entrer le résultat dans la troisième table et insérant seulement les ID des deux tables. En fait je voudrai savoir comment récupérer les valeurs (select) et les mettre dans une autre table (insert). Je ne sais pas si je me suis bien exprimé, mais si quelqu'un pourrait m'éclairer sur ce problème, ça serait très sympa, merci !!! |
|
|
00
|
|
|
#2 | ||
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 26 ![]() |
Merci de me répondre si vite
Oui, j'avais essayé mais à chaque fois Oracle me balance une exception : SQL Error: ORA-00947: Nombre de valeurs insuffisant Pourtant la troisième table a bien que deux champs à remplir. Je ne vois pas ce qu'il veut dire par là. Alors je ne sais plus trop quoi faire. |
|
|
00
|
|
|
#4 | ||
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 26 ![]() |
Au fait, je sais pourquoi Oracle me met ce message d'erreur. J'ai donc compris pourquoi pas je n'arrive à insérer les valeurs.
En fait, la troisième table comprend deux champs. Un champ pour l'ID de la première table et le deuxième champ pour l'Id de la deuxième table. Je voudrai insérer 50 ID de la deuxième table pour un ID de la première table Exemple : Code :
Merci |
||
|
|
00
|
|
|
#5 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
comment tu couples les id de tab1 et tab2 ?
|
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 26 ![]() |
Bah justement,
C'est ce que je voudrai savoir. Comment faire pour les coupler. En fait, je pensais d'abord faire un select de la table 1 pour récupérer les Id et ensuite faire une boucle pour de 1 à 50 pour insérer les Id de la table 2 pour un id de la table 1. Mais je ne sais pas comment m'y prendre. Si il y a plus simple, je suis preneur... Merci |
|
|
00
|
|
|
#7 | ||||
|
Expert Confirmé
![]() Inscription : septembre 2004 Messages : 2 942 ![]() |
Pour éviter ce genre d'erreurs, on précise systématiquement les colonnes à inserer ou selectionner :
Code :
Code :
|
||||
|
|
00
|
|
|
#8 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
c'est un problème fonctionnel... je vois pas comment on pourrait t'aider
|
|
|
00
|
|
|
#9 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 26 ![]() |
Ok, merci Leo et Fred.
Dans un premier temps je voulais savoir comment insérer des données dans une table à partir d'un select d'une autre table. Maintenant, que j'ai la solution avec notamment le UNION ALL ou UNION ca devrait aller. Je posterai la réponse lorsque j'aurai trouver la réponse. Merci pour les réponses rapides A+ |
|
|
00
|
|
|
#10 | ||||
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 26 ![]() |
Bon, je n'ai toujours pas réussi ce que je voulais faire.
Je vais récapituler ce que je veux. J'ai deux tables alimentées. t1 et t2 pour donner un exemple. Et je voudrai insérer les id de t1 et t2 dans une troisième table t3. La table t3 comprend deux champs. Au final, je veux que cela donne ça dans t3 Code :
Code :
Merci d'avance |
||||
|
|
00
|
|
|
#11 | ||||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Est-ce que c'est important à l'arrivée tu as:
Code :
Code :
si règle il y a, il faut commencer par l'énoncer puis la donner à oracle, sinon y'a peu de chance qu'il devine tout seul...
|
||||
|
|
00
|
|
|
#12 | |||
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Citation:
Code :
|
|||
|
|
00
|
|
|
#13 | |||||
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 26 ![]() |
Citation:
Sinon, je vais utiliser la solution de pifor. Merci de me répondre aussi vite |
|||||
|
|
00
|
|
|
#14 | |||||
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
Tu peux aussi faire en une seule requête en utilisant une colonne de jointure arbitraire définie par le rownum: Code :
Si tu veux que ta table3 se remplisse comme la table la plus peuplée et que tu ne sait pas à priori qui de T1 ou T2 contient le plus de monde, il faut un peu "bricoler" car la notion de "jointure externe double" n'existe pas sous oracle. Par exemple en faisant une union / regroupement: Code :
|
|||||
|
|
00
|
|
|
#15 | ||||
|
Membre régulier
![]() Inscription : octobre 2006 Messages : 77 ![]() |
Mais si, le full outer join existe avec Oracle
Tu peux le faire avec la syntaxe suivante : Code :
L'exemple de Rémi devient alors Code :
Un conseil : oubli le PL/SQL quand tu peut faire la même chose en SQL. Tout se qui se fait au niveau du noyau sera toujours bcp plus performant. J'ai testé la requête sans mettre mes filtres : 18s pour créer/remplir la table t3 avec en sources t1 = 100Mo / 150 000 lignes et t2=3Mo / 10000 lignes, le tout sur un serveur qui n'a rien d'extraordinaire. Cdlt |
||||
|
|
00
|
|
|
#16 | |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
Super, je savais pas! depuis quelle version ça existe ?
|
|
|
|
00
|
|
|
#17 |
|
Membre régulier
![]() Inscription : octobre 2006 Messages : 77 ![]() |
Ca existe depuis la 9i je crois... la toute premiere 9
En 8i, c'est possible mais il faut vérifier |
|
|
00
|
|
|
#18 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
un FULL OUTER ne peut-il être fait en faisant un produit cartésien ?
|
|
|
00
|
|
|
#19 | |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
|
|
|
|
00
|
|
|
#20 |
|
Invité régulier
![]() Inscription : juillet 2006 Messages : 26 ![]() |
Super les gars. Je m'y attèle en fin de journée. Merci pour toutes ces infos, Je vous tiens au courant!!! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com