SQL从Oracle中的两个表中删除

时间:2016-03-16 09:54:26

标签: java oracle sql-update sql-delete rdbms

我必须删除表格中的行(包含userId)" USERS"。这是我的问题:

@SqlUpdate("delete from USERS where userId = :userId ")
void removeUser(@Bind("userId") String userId);

但首先我要从表格中删除该用户" USERS_DATA" (这是USERS的女儿),其中也包含" userId"。我能怎么做?我试过这个:

@SqlUpdate("delete from USERS_DATA where userId = :userId " +
      " and delete from USERS where userId = :userId")
void removeUser(@Bind("userId") String userId);

但是控制台告诉我:java.sql.SQLSyntaxErrorException: ORA-00936: missing expression

1 个答案:

答案 0 :(得分:0)

与其他一些RDBMS不同,Oracle不允许您在同一SQL命令中传递两个语句(这有助于防止SQL注入)。

您可以尝试在匿名PL / SLQ块中包装两个查询:

BEGIN
  delete from USERS_DATA where userId = :userId;
  delete from USERS      where userId = :userId;
END;
/

这将允许您同时执行两个DML语句,因为它们是包含PL / SQL块的单数的一部分。

不幸的是,我不熟悉Java中的注释语法,因此我无法帮助您将其转换为Java,但我猜:

@SqlUpdate("BEGIN " +
  "delete from USERS_DATA where userId = :userId; " +
  "delete from USERS      where userId = :userId; " +
"END;")
void removeUser(@Bind("userId") String userId);

或者,您可以在Oracle中创建一个过程:

CREATE OR REPLACE PROCEDURE delete_user(
  in_userID  USERS_DATA.USERID%TYPE
)
AS
BEGIN
  DELETE FROM USERS_DATA WHERE userId = in_userId;
  DELETE FROM USERS      WHERE userId = in_userId;
END;
/

然后你可以调用这个程序。