提交 56d502ff authored 作者: Leon de Rooij's avatar Leon de Rooij

Stored procedure seems to work - need to verify still

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk/contrib@15296 d0543943-73ff-0310-b7d9-9358b9ac24b2
上级 05b1ac74
-- TODO: SEEMS TO WORK, BUT VERIFY STILL !
CREATE TABLE IF NOT EXISTS `pcli` (
`ini_id` varchar(255) NOT NULL,
`count` int(11) NOT NULL
`ini_id` varchar(255) NOT NULL,
`count` int(11) NOT NULL,
UNIQUE KEY `ini_id` (`ini_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
#### FUNCTIONS CAN'T SUPPORT TRANSACTIONS ?!
DROP FUNCTION IF EXISTS test;
delimiter $$
CREATE FUNCTION test(i VARCHAR(255)) RETURNS INT
BEGIN
declare c int;
SELECT `count` INTO c FROM `pcli` WHERE `ini_id` = i;
IF (c >= 0) THEN
SET c = c + 1;
UPDATE `pcli` SET `count` = c WHERE `ini_id` = i;
ELSE
SET c = 0;
INSERT INTO `pcli` (`ini_id`, `count`) VALUES (i, c);
END IF;
return c;
END $$
delimiter ;
DROP PROCEDURE IF EXISTS test;
DROP PROCEDURE IF EXISTS get_and_incr_pcli_count;
delimiter $$
CREATE PROCEDURE test(i VARCHAR(255), OUT c INT)
CREATE PROCEDURE get_and_incr_pcli_count(i VARCHAR(255), OUT c INT)
BEGIN
SELECT `count` INTO c FROM `pcli` WHERE `ini_id` = i;
SET AUTOCOMMIT = 0;
START TRANSACTION;
SELECT `count` INTO c FROM `pcli` WHERE `ini_id` = i FOR UPDATE;
IF (c >= 0) THEN
SET c = c + 1;
UPDATE `pcli` SET `count` = c WHERE `ini_id` = i;
......@@ -36,17 +21,10 @@ BEGIN
SET c = 0;
INSERT INTO `pcli` (`ini_id`, `count`) VALUES (i, c);
END IF;
COMMIT;
END $$
delimiter ;
DROP FUNCTION IF EXISTS test;
delimiter $$
CREATE FUNCTION test(i VARCHAR(255)) RETURNS INT
BEGIN
declare c int;
CALL test(i, @c);
SELECT (@c) into c;
return c;
END $$
delimiter $$
-- test with:
CALL get_and_incr_pcli_count('test', @c);
SELECT @c AS `count`;
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论