I have a Mybatis mapper which is supposed to create an entry in Database table. The mapper is defined below-
<select id="saveUser" parameterType="User" resultMap="UserResultMap">
DROP TEMPORARY TABLE IF EXISTS temp_role_id;
CREATE TEMPORARY TABLE temp_role_id(id int);
INSERT INTO temp_role_id VALUES
<foreach collection="roles" item="role" separator=",">
(${role.id})
</foreach>;
call insert_user_sp('${name}', '${username}', '${email}', '${password}');
</select>
The stored procedure is defined below-
DELIMITER //
CREATE PROCEDURE insert_user_sp(
u_name VARCHAR(40),
u_username VARCHAR(20),
u_email VARCHAR(40),
u_password VARCHAR(100)
)
BEGIN
INSERT INTO users(name, username, email, password)
VALUES(u_name, u_username, u_email, u_password);
SET @v_user_id = last_insert_id();
INSERT INTO user_roles(user_id, role_id)
SELECT @v_user_id, id from temp_role_id;
DROP TEMPORARY TABLE IF EXISTS temp_role_id;
SELECT id, name, username, email, password, created_at, modified_at
FROM users where id = @v_user_id;
END //
DELIMITER ;
The error statement given by mybatis is below-
### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TEMPORARY TABLE temp_role_id(id int);
INSERT INTO temp_role_id VA' at line 2
### The error may exist in mybatis/mappers/UserMapper.xml
### The error may involve UserMapper.saveUser-Inline
### The error occurred while setting parameters
### SQL: DROP TEMPORARY TABLE IF EXISTS temp_role_id; CREATE TEMPORARY TABLE temp_role_id(id int); INSERT INTO temp_role_id VALUES (4) ; call insert_user_sp('Ujjal Das', 'ujjaldas223', 'ujjaldas223@gmail.com', '$2a$10$JlIb3BRXffYhMV8j9Wy2OuG2Wu53lGrHKexKspErzhi/JGwMhsvoO');
But when I execute the same query in mysql, it executes happily.
If mysql doesn't have any problem in executing the same query, why is mybatis complaining about the same?
Oops, it's a hell lot of a searching.
As @Akina pointed it out, jdbc mysql out didn't support multiqueries.
In case if anyone faces the same problem, have a look at this solution.