2017-01-04 27 views
0

我有以下表格查询DELETE:多个条款在MERGE用于Oracle SQL:UPSERT,并在单个语句

public static final String CLASS_UPSERT_QUERY = Joiner.on(" ").join(
    "MERGE INTO CLASS USING DUAL ON", 
    "(<condition1>)", 
    "WHEN MATCHED THEN", 
    "UPDATE SET()", 
    "WHEN NOT MATCHED THEN", 
    "INSERT() VALUES()" 
); 

我的疑问是,是否有可能在同一个语句多个条件。我需要根据一定的条件进行插入,并删除另一个条目。根据病情

public static final String CLASS_UPSERT_QUERY = Joiner.on(" ").join(
    "MERGE INTO CLASS USING DUAL ON", 
    "(<condition1>)", 
    "WHEN MATCHED THEN", 
    "UPDATE SET()", 
    "WHEN NOT MATCHED THEN", 
    "(", 
    "MERGE INTO CLASS USING DUAL ON(<condition2>)", 
    "WHEN MATCHED THEN", 
    "DELETE()", 
    "WHEN NOT MATCHED THEN", 
    "INSERT() VALUES()", 
    ")" 
); 
+0

不能改用用例吗?您能否向我们提供您正在工作的样本数据,以便我们能够相应地构建查询并为您提供帮助。因为你的语法和你的想法并没有帮助我们解决问题。 –

回答

0

如果你把java的部分来自这个问题,这似乎是在Oracle中简单的MERGE语句,在那里你可以做插入或更新:对下面的线

东西如下:

MERGE INTO tgt_tbl a 
    USING src_tbl b 
    ON (a.id = b.id) 
    WHEN MATCHED THEN 
    UPDATE SET a.status = b.status 
    WHERE b.status != 'VALID' 
    WHEN NOT MATCHED THEN 
    INSERT (id, status) 
    VALUES (b.id, b.status) 
    WHERE b.status != 'VALID'; 
+0

感谢@GCM的回应,但是我正在寻找嵌套的MERGE语句(相应地更新了问题)。 –

+0

不能改用用例吗?您能否向我们提供您正在工作的样本数据,以便我们能够相应地构建查询并为您提供帮助。因为你的语法和你的想法并没有帮助我们解决问题。 –

0

我会根据oracle的观点来回答。

何时使用合并语句:从一个或多个源中选择行以更新或插入到表或视图中。或者在一个语句中结合insert/update/Delete。

语法:

MERGE 
INTO target_table tgt 
USING source_table src 
ON (src.object_id = tgt.object_id) 
WHEN MATCHED 
THEN 
UPDATE 
SET tgt.object_name = src.object_name,tgt.object_type = src.object_type 
WHEN NOT MATCHED 
THEN 
INSERT (tgt.object_id 
    , tgt.object_name 
    , tgt.object_type) 
    VALUES (src.object_id 
    , src.object_name 
    , src.object_type); 

请提供您的表和样本数据,我们做出你更好地理解这个问题。您没有向我们提供任何样本数据或表格。