MySQL在Play Framework中存储了与Ebean错误的函数

时间:2014-10-31 00:42:02

标签: mysql playframework ebean

使用ebean的mysql函数查询时出现的问题是什么?

在Play Framework中使用Ebean的

mysql函数。

-mysql版本:5.5.25a(jdbc:5.1.29)

- 播放版本:2.3.4

-config ebean in play

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://ip:3306/db?characterEncoding=UTF-8"
db.default.user="id"
db.default.password="pass"
db.default.logStatements=true
evolutionplugin=disabled

-mysql函数

CREATE FUNCTION `get_next_seq_val`() RETURNS BIGINT(20)
BEGIN

    DECLARE reslutval BIGINT;
    SET reslutval := 0;   

    UPDATE t_mas_seq 
         SET last_cached_val = last_cached_val+1
     WHERE seq_nm = 'p_seq_nm';

    SELECT last_cached_val INTO reslutval FROM t_mas_seq
    WHERE seq_nm = 'p_seq_nm';

    RETURN reslutval;

END$$

-java src ebean in play

int n = Ebean.createSqlQuery("SELECT get_next_seq_val() seq").findUnique().getInteger("seq");

始终' int n'是相同的数字。

1 个答案:

答案 0 :(得分:0)

每次有一个分号时,Ebean都会拆分你的文件,因此除了简单的半冒号外,不需要用其他任何东西来分隔查询。 为了防止ebean在每次内部都有一个分号时拆分你的函数代码,你必须用双分号来转义半冒号:

CREATE FUNCTION `get_next_seq_val`() RETURNS BIGINT(20)
BEGIN

    DECLARE reslutval BIGINT;;
    SET reslutval := 0;;

    UPDATE t_mas_seq 
         SET last_cached_val = last_cached_val+1
     WHERE seq_nm = 'p_seq_nm';;

    SELECT last_cached_val INTO reslutval FROM t_mas_seq
    WHERE seq_nm = 'p_seq_nm';;

    RETURN reslutval;;

END;

另请参阅:MySQL delimiter statement error