存储过程的 MySQL 语法错误

标签 mysql sql stored-procedures

#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 = -1 else SELECT audit_id INTO t_new_id FROM a_audit_reg at line 11



delimiter //
CREATE  FUNCTION get_audit_id (p_pubco_id int(10),
                              p_audit_id int(10),
                              p_fiscal_date date) 
       RETURNS int(10) 
BEGIN 

   DECLARE t_new_id int(10);

#check paremeters here
if p_pubco_id = 0 or p_audit_id = 0
then set t_new_id = -1
else
   set t_new_id = (SELECT audit_id
     FROM a_audit_reg 
    WHERE p_pubco_id = a_audit_reg.pubco_id
      and p_audit_id = a_audit_reg.audit_id
      and p_fiscal_period = a_audit_reg.fiscal_period_date);

   if found_rows() = 0
   then
        insert into a_audit_reg (pubco_id, audit_id, fiscal_period_date)
               values (p_pubco_id, p_audit_id, p_fiscal_date);
        set t_new_id = last_insert_id();
   end if;
end if;
   return t_new_id;

END //
delimiter ;

最佳答案

  • 更改DELIMITER
  • 使用SET

查询,

DELIMITER //
CREATE  FUNCTION get_audit_id
(
    p_pubco_id INT, 
    p_audit_id INT, 
    p_fiscal_date DATE
) 
RETURNS INT
BEGIN 
    DECLARE t_new_id INT;

    IF p_pubco_id = 0 or p_audit_id = 0 THEN    
        SET t_new_id = -1;
    ELSE
        SET t_new_id = (SELECT audit_id
                        FROM a_audit_reg 
                        WHERE p_pubco_id = a_audit_reg.pubco_id
                            and p_audit_id = a_audit_reg.audit_id
                            and p_fiscal_period = a_audit_reg.fiscal_period_date);

        IF found_rows() = 0 then
            insert into a_audit_reg (pubco_id, audit_id, fiscal_period_date)
            values (p_pubco_id, p_audit_id, p_fiscal_date);

            SET t_new_id = last_insert_id();
        end if;
    end if;
    return t_new_id;
END //
DELIMITER ;

关于存储过程的 MySQL 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250366/

相关文章:

php - 数据库中用户数据更改后如何用php刷新页面?

mysql - 将 scrumler 插件安装到 redmine 时出现内部错误

mysql - 在 Maria DB 中,我可以将 CASE 与表一起使用吗?

MySQL 错误 : PROCEDURE can't return a result set in the given context

mysql - 如何修复我的 MySQL select 语句以获得正确的结果

mysql - iOS - 将从 mySQL 服务器接收到的日期转换为用户本地时间

sql - 如何解释 Postgresql rank() 关系

mysql - 如何在此查询中也包含当前提供的日期信息

sql - 如何从 SQL 表中获取从现在开始的 30 天

mysql - MYSQL 上的事件不适用于 phpmyadmin