【发布时间】:2016-04-13 04:51:53
【问题描述】:
我在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
我尝试以不同的方式调用该过程。代码编译,但过程根本没有被调用。
这个语句给出了一个动作错误。
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?
任何帮助,将不胜感激。
【问题讨论】:
-
COMMIT仅在START TRANSACTION块的末尾需要,而您没有。
标签: mysql scala stored-procedures playframework slick-3.0