Oracle MERGE不会仅插入更新

时间:2015-08-05 08:41:25

标签: oracle

我试图将webform中的值插入/更新到我的oracle数据库中。

这是我的查询

MERGE INTO myTable myTarget 
USING (SELECT * FROM myTable WHERE ID = 0) mySource
     ON (mySource.ID = myTarget.ID)
WHEN MATCHED THEN UPDATE SET 
    LOC_ID = 1,
    AUTHOR = 'Lee'
WHEN NOT MATCHED THEN INSERT
    (
        LOC_ID, 
        AUTHOR
    )
    VALUES (
        1, 
        'lee'
    )

出于某种原因,只有UPDATE可以使用。

因此,如果我有ID = 0的记录,则值会更新,但如果我没有ID = 0的记录,则不会插入值。 0 rows merged.有什么想法吗?

3 个答案:

答案 0 :(得分:5)

我认为您误解了合并是如何运作的。源查询(您的Object o = object(intOf(co."Absolute Number" "")) )用于确定要更新或插入的数据。

如果您在mytable中没有id = 0的任何记录,则无法插入或更新任何内容。

我认为你的想法是:

select * from mytable where id = 0

答案 1 :(得分:1)

这里的主要罪魁祸首是你的加入条件。假设您有两行分别具有ID 1和ID。因此,在这种情况下,连接条件本身将失败。 情况2我们分别有0和1作为ID,现在这里只有ID = 0才会符合条件并且会直接执行Update语句。因此,无论如何,您都无法在表格中插入新行。您必须使用PseudoTable或其他工作表来插入新行。

答案 2 :(得分:0)

如果你说:

SELECT * FROM myTable WHERE ID = 0

您只能使用ID = 0

抓取所有记录

您应该删除where子句以从表中获取所有其他记录。