2011-09-15 51 views
1
DELETE UserDB..UserAccount 
    FROM UserDB..UserAccount A, CustDB..ETS_Profile B 
WHERE A.UserId = B.User_Id 
    and B.Category = 'Customer' 
    AND B.Sub_Category = 'Teir' 
    and B.Item_Name = 'CUSTODIAN' 

上面是一个Sybase查询,效果很好。我创建了userDB的处理程序和甲骨文Sybase查询在Oracle中不起作用

执行这个查询在oracle中我得到的错误,如果我给查询如下

DELETE UserAccount 
    FROM UserAccount A,CustDB.ETS_Profile B 
where A.UserId = B.User_Id 
    and B.Category = 'Customer' 
    and B.Sub_Category = 'Teir' 
    and B.Item_Name = 'CUSTODIAN'; 
+0

这里有一些语法错误(非闭字符串文字,名称解析中的双点... – Benoit

+0

..在Sybase中是从DB引用表的方式。但在Oracle中,我只给出了单点 – user472625

+0

啊,好的。不知道。 – Benoit

回答

4

你或许应该制定如下查询:

DELETE FROM UserAccount A 
WHERE EXISTS 
     (SELECT NULL 
      FROM CustDB.Ets_Profile B 
      WHERE B.user_id = A.UserId 
      AND B.Category = 'Customer' 
      AND B.Sub_Category = 'Teir' 
      AND B.Item_Name = 'CUSTODIAN' 
     ); 
+0

谢谢。SELECT NULL暗示 – user472625

+0

@peter:谢谢你的回复。请给我解释一下这个问题。 – user472625

+0

@ user472625:当你使用'WHERE EXISTS'时,检查一行是否存在,内容无关紧要。因此,无论你在子查询中选择什么都不重要,“SELECT NULL”是一种常用的方法,但你可以使用'SELECT B. *'或'SELECT Category,'hello world',SYSDATE FROM CustDB.Ets_profile B '... – Benoit