作者:漂亮女人群 | 来源:互联网 | 2022-10-21 17:55
我正在尝试使用文本文件的内容在MySQL数据库中创建存储过程:
USE myDatabase;
DROP PROCEDURE IF EXISTS myStoredProcedure;
DELIMITER $$
CREATE PROCEDURE myStoredProcedure
(
_description VARCHAR(50),
_value INT
)
BEGIN
INSERT INTO myTable
(
description,
value
) VALUES (
_description,
_value
);
SELECT
id,
description,
value
FROM myTable
WHERE id = LAST_INSERT_ID();
END;
$$
DELIMITER ;
我使用本机查询执行SQL:
Query query = entityManager.createNativeQuery(queryText);
...
query.executeUpdate();
但是它在DROP PROCEDURE上出错,我注释掉了DROP PROCEDURE,然后在DELIMITER上出错,基本上,在第一个分号之后的任何行都出错了。
似乎JPA休眠正在解析我的查询并告诉我它有问题,而不是将纯文本传递给MySQL。
sql在MySQL中运行时没有错误。
我在Google中找不到关于使用JPA创建存储过程的任何信息,仅调用了一个。
有人对我可能做错的事情有任何见解吗?或者,即使有可能。
1> user06062019..:
如果您在url中提到以下属性,则有可能
spring.datasource.url=jdbc:mysql://localhost:3306/test?allowMultiQueries=true
allowMultiQueries将指示驱动程序将定界查询发送到数据库。
请注意,如果您使用本机查询,请注意sql注入攻击。您不需要显式放置定界符(DELIMITER).sql语句以下查询有效
SET myDatabase;
DROP PROCEDURE IF EXISTS myStoredProcedure;
CREATE PROCEDURE myStoredProcedure ( _description VARCHAR(50), _value INT )
BEGIN
INSERT INTO
myTable ( description, value )
VALUES ( _description, _value );
SELECT id, description, value
FROM myTable
WHERE id = LAST_INSERT_ID();
END;