2014-10-31 2 views
0

В чем проблема при использовании запроса функции mysql с ebean?MySQL хранит функцию с Ebean в ошибке Play Framework

mysql function with Ebean in Play Framework.

-mysql версия: 5.5.25a (JDBC: 5.1.29)

-Play версия: 2.3.4

-config ebean в игре

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 ЦСИ ebean в игре

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

always 'int n' - это то же самое число.

ответ

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