2011-05-13 184 views
7

Me pregunto si es posible tener una instrucción INSERT INTO dentro de una sentencia CASE en código SQL.INSERT INTO en una instrucción CASE

Aquí está un pseudocódigo aproximada de lo que estoy tratando de hacer:

SELECT (CASE (SELECT SomeValue FROM SomeTable) 
      WHEN NULL THEN 
       INSERT INTO OtherTable VALUES (1, 2, 3) 
       (SELECT NewlyInsertedValue FROM OtherTable) 
      ELSE 
       (SELECT SomeOtherValue FROM WeirdTable) 
     END), 
     Column1, 
     Column2 
FROM BigTable 

Respuesta

9

Usted tendrá que lograr con IF...THEN declaraciones lugar. Algo más o menos así (no estoy seguro acerca de la sintaxis para DB2):

SELECT @SomeValue = SomeValue FROM SomeTable 

IF @SomeValue IS NULL 
    INSERT INTO OtherTable VALUES (1, 2, 3) 
    SELECT NewlyInsertedValue FROM OtherTable; 
ELSE 
    INSERT INTO OtherTable VALUES (1, 2, 3) 
    SELECT SomeOtherValue FROM WeirdTable; 
END IF; 
+0

Ese es el problema. No estoy seguro de cómo replicar algo así en DB2 – Connection

+0

Um .. Comience con la documentación? Te di una estructura plausible para que tu código haga lo que intentas hacer. Puede profundizar en los detalles de la sintaxis exacta. Sé que esta estructura funcionaría en SQL Server o MySql. – mellamokb

0

que podría hacerlo dos declaraciones como tal.

primer inserto en other cuando somevalue is null

INSERT INTO othertable 
SELECT 1, 
     2, 
     3 
FROM bigtable 
WHERE somevalue IS NULL; 

luego a la izquierda se unen a ambas tablas de Somevalue siendo null o not null

SELECT Coalesce(othertable.newlyinsertedvalue, weirdtable.someothervalue) foo, 
     column1, 
     column2 
FROM bigtable 
     LEFT OUTER JOIN othertable 
     ON somevalue IS NULL 
     LEFT OUTER JOIN weirdtable 
     ON somevalue IS NOT NULL 

Mi conjetura es que usted realmente va a tener que modificar los puntos de unión para ser algo así como

 LEFT OUTER JOIN othertable 
     ON somevalue IS NULL 
      and bigtable.id = othertable.id 
     LEFT OUTER JOIN weirdtable 
     ON somevalue IS NOT NULL 
      and bigtable.id = weirdtable .id 

Nota: No estoy seguro de cuál es el equivalente de DB2 de Coalesce en

Cuestiones relacionadas