2014-10-31 34 views
0

在ebean中使用mysql函數查詢時會出現什麼問題?Ebean在Play Framework中的MySQL存儲函數錯誤

與Ebean在Play框架中的mysql函數。

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

- 播放的版本:在遊戲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 SRC ebean

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

總是'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

相關問題