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 22/02/2011, 14h18   #1
Membre éprouvé
 
Inscription : septembre 2004
Messages : 465
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 465
Points : 412
Points : 412
Par défaut Utiliser WITH dans un INSERT / UPDATE

Bonjour.

J'ai une table créée de la façon suivante:
Code :
1
2
3
4
5
CREATE TABLE toto
AS
WITH vt AS (SELECT....FROM toto2 WHERE ....)
SELECT ... FROM vt
WHERE....
Je dois régulièrement mettre à jour cette table sans avoir le droit de la supprimer/recréer. Je voudrais donc faire ceci:
Code :
1
2
3
4
5
6
TRUNCATE TABLE toto;
 
INSERT INTO TOTO
WITH vt AS (SELECT....FROM toto2 WHERE ....)
SELECT ... FROM vt
WHERE....
En reprenant exactement la même requête qu'à la création.

Sauf que INSERT...WITH ne fonctionne pas. Y a-t-il un moyen de contourner cela? Je ne peux/veux réécrire la requête, déjà complexe avec des PARTITION BY etc...

Merci.
GoLDoZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 16h20   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 311
Points : 5 808
Points : 5 808
Chez mois ça fonctionne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> INSERT INTO hr.departments (department_id, department_name)
  2  WITH DATA AS(SELECT 101 AS dept_id, 'test' AS dept_name FROM dual)
  3  SELECT dept_id, dept_name
  4    FROM DATA
  5  /
 
1 row inserted
 
SQL> rollback;
 
Rollback complete
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 17h01   #3
Membre éprouvé
 
Inscription : septembre 2004
Messages : 465
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 465
Points : 412
Points : 412
Euh... oui, ça marche. J'ai dû faire une erreur quelque part...

Merci!
GoLDoZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 12h01   #4
Membre éprouvé
 
Inscription : septembre 2004
Messages : 465
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 465
Points : 412
Points : 412
Même question avec un UPDATE. Ca fonctionne avec une donnée:
Code :
1
2
3
4
5
6
7
8
UPDATE matable
  SET col1=(
     WITH toto AS(
         SELECT 1 AS c1, 2 AS c2 FROM dual union ALL
         SELECT 3 AS c1, 4 AS c2 FROM dual)
     SELECT c2 FROM toto
      WHERE c1 = 3)
;
Mais pour updater 2 colonnes, ça môrche pô
Code :
1
2
3
4
5
6
7
8
UPDATE matable
  SET (col1, col2) =(
     WITH toto AS(
         SELECT 1 AS c1, 2 AS c2 FROM dual union ALL
         SELECT 3 AS c1, 4 AS c2 FROM dual)
     SELECT c1, c2 FROM toto
      WHERE c1 = 3)
;
J'ai pas trouvé le truc. Merci d'avance!
GoLDoZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 19h20   #5
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Essayez avec un MERGE !
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2011, 10h38   #6
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
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 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par GoLDoZ Voir le message
Même question avec un UPDATE. Ca fonctionne avec une donnée:
...
Mais pour updater 2 colonnes, ça môrche pô
...
J'ai pas trouvé le truc. Merci d'avance!
Ca à l'air d'un bug. Des contournements existent mais ...
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h20.


 
 
 
 
Partenaires

Hébergement Web