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 17/06/2011, 09h46   #1
Membre régulier
 
Avatar de Tora21
 
Homme
Développeur("Java"); //Débutant
Inscription : mai 2011
Messages : 140
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur("Java"); //Débutant

Informations forums :
Inscription : mai 2011
Messages : 140
Points : 85
Points : 85
Par défaut Problème sur un update

Bonjour j'ai un petit soucis avec un de mes update, et je ne vois pas où il est, j'ai besoin d'un œil externe pour ce coup-ci.

Code :
1
2
3
UPDATE schema.TABLE
   SET (col1, col2,col3) = ('a','b','c')
 WHERE truc = machin
La formule est-elle exacte ?

erreur déclenchée :
Citation:
ORA-01767: UPDATE ... SET expression must be a subquery
__________________
Ah ça y’est, j’viens de comprendre à quoi ça sert la canne. En fait ça sert à rien… Du coup ça nous renvoie à notre propre utilité : l’Homme face à l’Absurde !

-Perceval-
Tora21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 09h56   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
Cela ressemble à du Oracle ?

mais un update standard s'écrit :

Code sql :
1
2
3
4
5
UPDATE schema.TABLE
SET Col1 = 'a',
      Col2 = 'b',
      Col3 = 'c' 
WHERE truc = machin
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/06/2011, 10h04   #3
Membre régulier
 
Avatar de Tora21
 
Homme
Développeur("Java"); //Débutant
Inscription : mai 2011
Messages : 140
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur("Java"); //Débutant

Informations forums :
Inscription : mai 2011
Messages : 140
Points : 85
Points : 85
Merci problème résolu.

C'est bien du Oracle, après je me demande bien avec quoi j'ai pu confondre pour mettre cette syntaxe.
__________________
Ah ça y’est, j’viens de comprendre à quoi ça sert la canne. En fait ça sert à rien… Du coup ça nous renvoie à notre propre utilité : l’Homme face à l’Absurde !

-Perceval-
Tora21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 10h45   #4
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 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Si vous voulez utiliser le constructeur de lignes valuées (row value constructor en anglais), la syntaxe est la suivante :
Code :
1
2
3
UPDATE schema.TABLE
   SET (col1, col2, col3) = (SELECT 'a','b','c' FROM dual)
 WHERE truc = machin;
C'est ce que vous dit le message d'erreur, avec cette syntaxe la mise à jour doit passer par une sous-requête.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 14h25   #5
Membre régulier
 
Avatar de Tora21
 
Homme
Développeur("Java"); //Débutant
Inscription : mai 2011
Messages : 140
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur("Java"); //Débutant

Informations forums :
Inscription : mai 2011
Messages : 140
Points : 85
Points : 85
Oui mais j'avais les donnée en direct elle n'existait pas dans aucune table de la base de données.

Par conter je ne connais pas le DUAL, c'est quoi?
__________________
Ah ça y’est, j’viens de comprendre à quoi ça sert la canne. En fait ça sert à rien… Du coup ça nous renvoie à notre propre utilité : l’Homme face à l’Absurde !

-Perceval-
Tora21 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 15h17   #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 !

DUAL est une table spéciale, à une seule colonne :
Code :
1
2
3
4
5
 
SQL> DESC DUAL
 Nom                                                                      NULL ?   Type
 ------------------------------------------------------------------------ -------- -------------------------------------------------
 DUMMY                                                                             VARCHAR2(1)
Elle appartient à SYS, et on ne peut y accéder qu'en SELECT.

Elle contient une seule ligne :
Code :
1
2
3
4
5
6
7
 
SQL> SELECT * FROM DUAL
  2  /
 
D
-
X
Elle permet de faire générer une ligne, très souvent pour des exemples...

Genre quand je veux faire un calcul et que j'ai la flemme de lancer calc, je fais :
Code :
1
2
3
4
5
6
 
SQL> SELECT 2500 * 0.196 FROM DUAL;
 
2500*0.196
----------
       490
__________________

(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 10
Vieux 17/06/2011, 15h19   #7
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 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
C'est une table avec une ligne et une colonne, utile pour exécuter des requêtes sur des constantes ou des variables systèmes, comme par exemple la date :
Code :
SELECT sysdate FROM dual;
Plus de détail dans la documentation Oracle :
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 15h31   #8
Membre régulier
 
Avatar de Tora21
 
Homme
Développeur("Java"); //Débutant
Inscription : mai 2011
Messages : 140
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur("Java"); //Débutant

Informations forums :
Inscription : mai 2011
Messages : 140
Points : 85
Points : 85
Ok merci bien pour ces infos
__________________
Ah ça y’est, j’viens de comprendre à quoi ça sert la canne. En fait ça sert à rien… Du coup ça nous renvoie à notre propre utilité : l’Homme face à l’Absurde !

-Perceval-
Tora21 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 19h25.


 
 
 
 
Partenaires

Hébergement Web