更新基于Oracle中的rowid

时间:2016-11-07 15:28:08

标签: java mysql database oracle oracle11g

我想使用oracle(11g)中的join更新表值, 我已经使用rowid作为同一个表的连接参数,使用rowid作为连接参数是否安全。 以下是我用于更新的查询,我在本地数据库上测试了相同它工作正常,但有没有可能有rowid不匹配的情况?

MERGE 
INTO    GEOTAG g 
USING   (SELECT  g2.rowid AS rid, um.RETAILER_CODE
FROM    GEOTAG g2 
JOIN    RETAILER_AD_DSE b 
ON      b.CODE = g2.RETAILER_CODE
JOIN USER_HIERARCHY_MASTER um
ON um.RETAILER_PRIMARY_ETOPUP = b.RETAILER_PRIMARY_ETOPUP) src 
ON      (g.rowid = src.rid) 
WHEN MATCHED THEN UPDATE 
SET g.RETAILER_CODE = src.RETAILER_CODE;

1 个答案:

答案 0 :(得分:2)

rowid在表格中是唯一的,所以如果“安全”只是意味着你将加入一行,那么,是的,这是安全的。

另一方面,您的代码似乎是一种相当复杂的相关更新方式。我怀疑你只是想要这个(如果WHERE EXISTSretailer_ad_dse中总会有匹配的行,你可以省略user_hierarchy_master

UPDATE geotag g
   SET g.retailer_code = (SELECT code
                            FROM retailer_ad_dse rad
                                 JOIN user_hierarchy_master uhm
                                   ON uhm.retailer_primary_etopup = rad.retailer_primary_etopup
                           WHERE g.retailer_code = rad.code)
 WHERE EXISTS (SELECT code
                 FROM retailer_ad_dse rad
                      JOIN user_hierarchy_master uhm
                        ON uhm.retailer_primary_etopup = rad.retailer_primary_etopup
                 WHERE g.retailer_code = rad.code)