8 votes

Comment insérer de manière conditionnelle dans Oracle ?

J'ai lu aquí que la syntaxe ressemble à ça :

INSERT
WHEN ([Condition]) THEN
INTO [TableName] ([ColumnName])
VALUES ([VALUES])
ELSE
INTO [TableName] ([ColumnName])
VALUES ([VALUES])
SELECT [ColumnName] FROM [TableName];

Mais je ne veux pas fournir de valeurs provenant d'une autre table. Je veux juste les taper, donc j'ai :

INSERT 
WHEN EXISTS (SELECT 1 FROM FOO WHERE NAME = 'JOE') 
THEN
INTO BAR (NAME, AGE) 
VALUES ('JOE', 50)

et cela produit une exception : ORA-00928 : mot-clé SELECT manquant.

Je veux effectuer une insertion si une valeur donnée est trouvée dans une autre table.

6voto

hkutluay Points 3248

Avec select fonctionne également. mais il y a un problème avec le mot clé values

INSERT 
WHEN EXISTS (SELECT 1 FROM FOO WHERE NAME = 'JOE') 
THEN
INTO BAR (NAME, AGE) 
SELECT 'JOE', 50 FROM DUAL

1voto

Kamil Points 577

Donc, j'ai trouvé un moyen indirect aquí et la solution à ma question serait :

INSERT INTO BAR (NAME, AGE) 
SELECT 'JOE', 50
  FROM DUAL
 WHERE EXISTS (SELECT 1 FROM FOO WHERE NAME = 'JOE')

mais cela n'explique pas pourquoi je dois utiliser SELECT déclaration dans INSERT WHEN

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X