|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 5 ![]() |
Bonjour
Je cherche à faire une insertion de plusieurs lignes avec plusieurs valeurs dans une table. Voici le code : Code :
Cette syntaxe supporte-t-elle les fonctions (style to_number) ? Les tutoriels n'utilisent que des valeurs littérales. Avez-vous des pistes de réflexion ? Par avance, merci de votre aide. Hervé |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
C'est un INSERT ALL que vous cherchez à faire ?
http://techonthenet.com/oracle/quest...nsert_rows.php
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
|
|
00
|
|
|
#3 | |||
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 5 ![]() |
Citation:
J'ai omis de signaler que je travaille avec Oracle 9. La table "lien" que je cherche à modifier contient plus de champs (35) que le nombre de champs de la reqête (11). Je ne fournis que les champs dont la valeur doit être non nulle, et ceux dont j'ai besoin pour travailler. Si la commande INSERT ALL indique que tous les champs de la table doivent être complétés, ce n'est pas ce que je cherche à faire. Cela veut-il dire que la syntaxe de la requête Code :
Les valeurs à insérer doivent-elles être obligatoirement littérales, ou peuvent-elles le résultat de fonctions (style to_number ou to_date) ? Une solution pourrait être de compléter le requête avec les champs manquants à "null" dans une requête INSERT ALL. A défaut d'élégance, cela pourrait être efficace. Merci par avance de votre aide. Hervé |
|||
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
Il me semble que INSERT ALL existe en 9i.
Tu n'as pas à remplir tous les champs, au contraire, c'est une commande qui sert à l'origine à remplir plusieurs tables différentes en 1 seul ordre INSERT. Par exemple si j'ai une table MA_TABLE(ID, THEVALUE, COMMENTS): Code :
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
||
|
|
00
|
|
|
#5 | ||||
![]() ![]() |
Votre syntaxe n'est pas bonne.
INSERT INTO TABLE VALUES (...) ne sert à insérer qu'une seule ligne. En aparté :
Donc soit vous construisez une requête depuis DUAL, soit vous répétez votre commande INSERT autant de fois que nécessaire : Code :
Code :
__________________
Email : http://scr.im/waldar |
||||
|
10
|
|
|
#6 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
Bien vu l'UNION de requêtes unitaires sur DUAL
![]() J'ai toujours pas compris pourquoi il voulait faire ça mais c'est plus propre que de détourner l'INSERT ALL.
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
|
|
00
|
|
|
#7 |
![]() ![]() |
D'autres SGBD (SQL-Server 2008 au moins) permettent la syntaxe proposée initialement (à quelques parenthèses près).
__________________
Email : http://scr.im/waldar |
|
00
|
|
|
#8 | |
|
Invité de passage
![]() Inscription : janvier 2008 Messages : 5 ![]() |
Citation:
Je note la syntaxe que vous proposez plus haut. Et pour la date, je veux bien "mea culper". Bon courage à tous Hervé |
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Sinon, un truc simple quand on fait des milliers d'insert avec des variables non bindées est de se servir du paramètre session "CURSOR_SHARING"
Avant la série d'insert, mettre dans la connexion: Code :
ALTER session SET cursor_sharing = FORCE J'ai déjà vu des temps divisés par 3 rien qu'avec ça... donc ça ne mange pas de pain d'essayer. |
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 307 ![]() |
Citation:
|
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : mai 2004 Messages : 1 812 ![]() |
Merci de marquer la discussion en résolu.
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes. Mon combat pour les droits des consommateurs face aux abus des grandes marques. |
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Inscription : avril 2006 Messages : 1 024 ![]() |
Citation:
![]() Plus sérieusement, je suis d'accord avec toi, la solution idéale est de faire les chose bien, bien écrites, bien bindées, bien prévues pour le traitement par lot etc... Je donnais juste un simple petit renseignement, un simple petit paramètre à tester qui d'expérience, peu répondre ponctuellement à un problème pour un cout très minime. Après, à chacun de prendre ses responsabilités en fonction de ses contraintes... |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com