我必须删除表格中的行(包含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
答案 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;
/
然后你可以调用这个程序。