如何使用存储过程获取两个表的总数?

时间:2015-06-26 07:23:10

标签: mysql stored-procedures

  I need to create a stored procedure for getting the count of two table by using where clause condition, but when i try to create procedure it shows error

Query : CREATE PROCEDURE bcp.getTotalCount BEGIN   -- Create two integer values  DECLARE @tableOneCount int, @tableTwoCount int  -- Get ...
Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN
  -- Create two integer values
    DECLARE @tableOneCount int, @tableTwoCount' at line 2

这是我尝试创建的存储过程

DELIMITER $$

DROP PROCEDURE IF EXISTS bcp.getTotalCount $$
CREATE PROCEDURE bcp.getTotalCount
BEGIN
  -- Create two integer values
    DECLARE @tableOneCount INT, @tableTwoCount INT

    -- Get the number of rows from the first table
    SELECT @tableOneCount = (SELECT COUNT(*) FROM candidates WHERE active=1)
    SELECT @tableTwoCount = (SELECT COUNT(*) FROM voters_enrollment WHERE active=1)

    -- Return the sum of the two table sizes
    SELECT TotalCount = @tableOneCount + @tableTwoCount
END $$

DELIMITER ;

为了更好地理解我试过像这样的简单的SQL查询

SELECT (SELECT COUNT(*) FROM candidates WHERE active=1)+ 
       (SELECT COUNT(*) FROM voters_enrollment WHERE active=1) AS Total

我得到结果

Total
10

像这样我需要创建过程并通过使用简单的sql查询调用它来获得相同的结果。任何人都可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:0)

您必须在创建语句后添加AS。

    DELIMITER $$

    DROP PROCEDURE IF EXISTS bcp.getTotalCount $$
    CREATE PROCEDURE bcp.getTotalCount

    AS

    BEGIN

  -- Create two integer values
    DECLARE @tableOneCount INT, @tableTwoCount INT

    -- Get the number of rows from the first table
    SELECT @tableOneCount = (SELECT COUNT(*) FROM candidates WHERE active=1)
    SELECT @tableTwoCount = (SELECT COUNT(*) FROM voters_enrollment WHERE active=1)

    -- Return the sum of the two table sizes
    SELECT TotalCount = @tableOneCount + @tableTwoCount
END $$

DELIMITER ;

答案 1 :(得分:0)

你可以试试这个,交配:

DELIMITER $$
DROP PROCEDURE IF EXISTS bcp_getTotalCount $$
CREATE PROCEDURE bcp_getTotalCount()
BEGIN
    -- clear/initialize session variables
    SET
        @tableOneCount = 0,
        @tableTwoCount = 0;
    START TRANSACTION;
    -- get record count from the source tables
        SELECT COUNT(*) INTO @tableOneCount FROM candidates WHERE active = 1;
        SELECT COUNT(*) INTO @tableOneCount FROM voters_enrollment WHERE active = 1;
    -- return the sum of the two table sizes
        SELECT TotalCount = @tableOneCount + @tableTwoCount;
    COMMIT;
END $$
DELIMITER ;  

原子性的MySQL事务