SQL 查询返回已删除的行

SQL Query Returning Deleted Rows

目前我的数据库中有以下 table,其中包含规定的数据:

SUPPORT_USER_ROLES TABLE:

USER_ID  |   ROLE_ID
1        |   1
1        |   2
2        |   2
*2*      |   *1*

底部一行,用'*'标记的已经被删除,在SQL开发者中没有它的迹象。

我现在运行以下查询:

SELECT su.USER_ID
     , su.USERNAME
     , sur.ROLE_ID
     , sr.ROLE_NAME 
  FROM support_users su
     , support_users_roles sur
     , support_roles sr 
 WHERE su.USER_ID = sur.USER_ID 
   AND su.IS_ACTIVE != ‘N’ 
   AND sr.ROLE_ID = sur.ROLE_ID 
   AND sr.IS_ACTIVE != ‘N’

它返回以下内容:

{  (USER_ID : 1, ROLE_ID : 1),  
   (USER_ID : 1, ROLE_ID : 2), 
   (USER_ID : 2, ROLE_ID : 1),  
   (USER_ID : 2, ROLE_ID : 2)  }

如你所见,它仍然给我:

(USER_ID : 2, ROLE_ID : 1) 

即使它不再存在于任何地方。

我正在使用 Java、JSF、PrimeFaces、SQL Developer、Hibernate、Weblogic 和 Eclipse IDE。我不确定我是否在这里遗漏了很多东西并且需要 refresh/update 某处的东西。

我以前没有这个所以我现在很困惑:S

非常感谢任何帮助!

James,如果该行在 SQL 开发人员中被删除但未提交,它可能在 SQL 开发人员界面中显示为不存在,但实际上仍然存在于 table 直到明确提交删除命令。

这可以通过单击 SQL Developer 中的提交图标或简单地执行以下命令来实现:-

commit;

了解问题后发表评论作为答案

请确保使用 commit 来自与您 运行 delete 语句所在的程序相同的连接。从应用程序中删除并在 SQL 开发人员上提交将不起作用。

现在您可以做以下两件事之一

(1) 更改您的代码,只需 运行 commit 一次,然后确保在每个 DML statement 之后使用 commit

(2) deletecommit一起使用。如果数据已经是deleted,则不会再次删除,之后会发生commit。如果它没有被删除,那么 if 将被删除并提交。