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 01/01/2008, 14h19   #1
Invité régulier
 
Inscription : décembre 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 12
Points : 5
Points : 5
Par défaut insert ds une table seulement si la ligne n'existe pas deja, c'est possible?

bonjour,

Jai une table (la cle est sur les 2 premiers champs)
- announcement_id
- user_id
- is_deleted
- .....

je veux faire un insert dedans uniquement si la ligne n'existe pas deja...

insert into announcement_user
(select announcement_id, 735, 1, 0
from announcements a
where date_begin <= sysdate
and sysdate <= date_exp)
where not exists announcement_id = a.announcement_id
and not exists user_id = 735

Bon evidemment ca marche pas, quelau'un a une idee pls??????????

Merci beaucoup
lety247 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2008, 15h40   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Bonjour et merci d'appliquer un tant soi peu de règles, notament celle demandant d'indiquer la version des outils utilisés.

La clause (NOT) EXIST ne fonctionne pas de cette façon. Elle est constitué d'un sous-select qui retourne un boolean

Code :
... WHERE NOT EXIST ( SELECT ... FROM ... WHERE ...) ...
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/01/2008, 18h12   #3
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Dans 10g, il est possible de faire (non testé)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
merge INTO announcement_user u
USING
(
  SELECT announcement_id, 735 user_id, 1 x, 0 y
  FROM annoucements
  WHERE sysdate BETWEEN date_begin AND date_exp
) a
ON
(
  a.announcement_id = u.announcement_id
  AND
  a.user_id = u.user_id
)
WHEN NOT MATCHED THEN
INSERT
  VALUES (a.announcement_id, a.user_id, a.x, a.y)
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2008, 13h02   #4
Invité régulier
 
Inscription : décembre 2007
Messages : 12
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 12
Points : 5
Points : 5
Par défaut C'est Magique

Michel, merci beaucoup

Je viens seulement de voir votre reponse, et elle repond totalement a ce que j'avais besoin.
Pour moi c'est juste magique, ca marche :-)

Je vais me pencher sur toutes les docs que je peux trouver pour juste comprendre tout ca ;-)

Merci encore
lety247 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 03h08.


 
 
 
 
Partenaires

Hébergement Web