【问题标题】:MySQL stored function with Ebean in Play Framework error在 Play Framework 中使用 Ebean 存储的 MySQL 函数错误
【发布时间】:2014-10-31 00:42:02
【问题描述】:

用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 在玩

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

'int n' 总是相同的数字。

【问题讨论】:

    标签: mysql playframework ebean


    【解决方案1】:

    每次有分号时,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

    【讨论】:

      猜你喜欢
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 2021-06-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多