mysql - 我的程序查询

标签 mysql sql stored-procedures

CREATE PROCEDURE driver_report (IN arg_year INT, IN arg_month INT)
    BEGIN
        DECLARE done INT DEFAULT 0;
        DECLARE driver_iden INT DEFAULT 0
        DECLARE M_o_w INT DEFAULT 0
        DECLARE C1 CURSOR FOR
            SELECT D_id, MonthR
            FROM driver
            JOIN report USING (D_id)
            WHERE MonthR = arg_month
            AND YearR  = arg_year
            GROUP BY D_id

        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1

        OPEN C1 cursor

        WHILE (done = 0) DO
            FETCH C1 INTO driver_iden, M_o_w
            INSERT INTO Report3 ('R3_id', 'Driver_identification', 'Month_of_workD', 'Year_of_workD') 
            VALUES (NULL, d_id, arg_month, arg_year)
        END WHILE

        CLOSE C1 cursor
    END;

当我尝试执行它时,它会提示这个 done INT DEFAULT 0 和这个 DECLARE driver_iden INT DEFAULT 0

它说是语法问题,但我不确定到底是哪里出了问题

CREATE PROCEDURE driver_report (IN arg_year INT, IN arg_month INT) BEGIN DECLARE done INT DEFAULT 0 错误代码:1064。您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在第 3 行的 '' 附近使用的正确语法

我需要在这个过程中使用光标

最佳答案

看起来你可以用一个查询来完成这项工作而不是序列化它:

CREATE PROCEDURE driver_report (IN arg_year INT, IN arg_month INT)
BEGIN
  INSERT INTO Report3 ('R3_id', 'Driver_identification', 'Month_of_workD', 'Year_of_workD') 
  SELECT DISTINCT driver.D_id, MonthR
  FROM driver
    JOIN report USING (D_id)
  WHERE MonthR = arg_month AND YearR  = arg_year;
END

关于mysql - 我的程序查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49906887/

相关文章:

mysql - 数据表 JSON 解析错误 - 访问被拒绝

python - 如何在搜索中包含多个单词

mysql - 如何使用mysql中的存储过程输出参数?

防止 SQL 注入(inject)的 PostgreSQL 美元引号字符串常量

c# - SQL 过滤查询

mysql - 从mysql计算最畅销的产品

php - 如何使两个开发数据库与 Doctrine 保持同步?

mysql - 在ansible中创建具有mysql角色的复制用户时出错

sql - 如何比较两个表并返回与 HIVE 不同的行

sql - 我可以在 mariaDB 的 View 上添加索引吗