gpt4 book ai didi

mysql - 使用 Slick 3.0 调用简单的数据库过程

转载 作者:行者123 更新时间:2023-11-28 23:33:27 25 4
gpt4 key购买 nike

我在mySQL中写了一个简单的数据库过程如下:

DROP PROCEDURE IF EXISTS sp_doSomething;  
DELIMITER //
CREATE PROCEDURE sp_doSomething
(IN pVal1 varchar(100),
IN pVal2 int(15)
)
BEGIN
DECLARE vCnt int(5) DEFAULT 0;
DECLARE vID int(15) DEFAULT 0;
DECLARE vTempID int(15) DEFAULT 0;

-- get ID
SELECT id INTO vID FROM T1
WHERE name = pVal1;

-- get count
SELECT count(*) INTO vCnt FROM T1
WHERE owner = vID;

-- get the log
INSERT INTO log select CONCAT('-v1-:', pVal1, ':-v2-:', pVal2);

-- Create basic stuff if it doesn't exist
IF vFolderCnt = 0 THEN
INSERT INTO T1 (`id`, `col1`, `col2`, `col3`)
SELECT null, vID, 'some value', CONCAT(vID,'^1') FROM T1
WHERE owner = 0;
END IF;

commit;

END //
DELIMITER ;

现在,我想在使用 Slick 3.0 的 Play Framework 2.4 应用程序中调用此过程。这是一件如此简单的事情,但我真的很挣扎,因为没有合适的文档可用。这非常令人沮丧。

正如在 Google Group 中提到的那样 https://groups.google.com/forum/#!searchin/scalaquery/procedure/scalaquery/BUB2-ryR0bY/EFZGX663tRYJ

我尝试以不同的方式调用该过程。代码编译但过程根本没有被调用。

这个语句给出了一个 Action 错误。

db.run(sql"{call sp_doSomething('${st.val1}', 1)}")

以下语句可以正常编译但不会调用该过程。

db.run(sql"{call sp_doSomething('${st.val1}', 1)}".as[Int])

以下语句可以正常编译但不会调用该过程。

db.run(sqlu"{call sp_doSomething('${st.val1}', 1)}")

或者 db.run(sqlu"{?=call sp_doSomething('${st.val1}', 1)}")

我已将程序的执行权限授予我的数据库用户并进行了验证。

此外,我不确定过程中是否需要 COMMIT?

任何帮助,将不胜感激。

最佳答案

我已经设法使用旧的 prepareCall 方法调用了存储过程。这是我的做法。希望,它可能对某人有所帮助。

db.withSession {
implicit session => {
val cs = session.conn.prepareCall("{call sp_doSomething(?, ?)}")
cs.setString(1, st.val1)
cs.setLong(2, 1L)
val result = cs.executeUpdate()
}
}

但我仍然对使用 sql""或 sqlu""调用过程感兴趣。

关于mysql - 使用 Slick 3.0 调用简单的数据库过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36588863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com