2014-02-10 208 views
0

我有这样SQL服务器到Oracle查询转换

IF EXISTS (SELECT * FROM address WHERE new_add=new_add) 
    UPDATE address set old_add=old_add); 
ELSE 
    UPDATE address set old_add=new_add); 

它在SQL Server正常工作在SQL Server中的代码。但它不在oracle中工作。它显示

SP2-0734: unknown command beginning "IF EXISTS ..." - rest of line ignored. 

Plese帮助我将此查询从SQL更改为Oracle。由于

+3

我怀疑你过分简化了你的查询。但是你已经做到了查询没有意义的地步。为什么查询将同一列与自己进行比较?为什么它将自己的列设置为同一列? 'update'是一个no-op。 –

+0

你能解释一下'old_add'和'new_add'是什么? – Hamidreza

回答

0
SELECT 1 FROM address WHERE new_add=new_add 

if @@RowCount > 0 
UPDATE address set old_add=old_add 
0

在这两个数据库,你可以写的查询:

update address 
    set old_add = old_add 
    where exists (SELECT * FROM address WHERE new_add = new_add); 

是不需要的if可言。

但是,这个查询是非感性的。它会在所有行中为其自身设置一列(如果where中的条件至少匹配一行)。或者,它不更新行(如果where中的条件没有匹配的行)。无论哪种情况,都没有真正发生。

+0

嘿!谢谢。它在oracle中工作。非常感谢你。我还有一个疑问!如何在此查询中添加其他部分。? – Sesuraj

+0

使用'not'存在。 @Sesuraj。 。 。您的查询使*无意义*。请提出另一个问题,提供样本数据和期望的输出。 –