存储过程出现的问题

ypg131 2015-12-22 02:45:31
1 row(s) affected, 1 warning(s): 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave.



很是不解,请求大鸟给予指教,菜鸟诚心学习。以下是我写的存储过程,上边是callback的时候报的错误

CREATE DEFINER=`weshop`@`%` PROCEDURE `p_MDM_divisionDiv`(
IN `i_divcode` Varchar(32)
,IN `i_divname` Varchar(60)
,IN `i_divfullname` Varchar(60)
,IN `i_parentcode` Varchar(32)
,IN `i_ordeNo` int(11)
,IN `i_INSERT_ID` BIGINT(20)
,IN `i_UPDATE_ID` BIGINT(20))
BEGIN
-- --------------------------------------------------------------------------------

#参数注释
/*
i_divcode Varchar(32) 政区代码
i_divname Varchar(60) 名称
i_divfullname Varchar(60) 全称
i_parentcode Varchar(32) 上级政区代码
i_ordeNo int(11) 排序
i_INSERT_ID BIGINT(20) 插入ID
i_UPDATE_ID BIGINT(20) 更新ID
*/
#变量注释
DECLARE v_returncode bigint(20);
DECLARE v_success_msg varchar(1000);
DECLARE v_error_msg varchar(1000);
DECLARE v_paras varchar(1000);
DECLARE v_sql varchar(500); #需要执行的SQL语句
DECLARE v_Id bigint(20);

#异常处理
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
insert into logdbio(SerialKey,log_datetime,log_logger,log_type,log_paras,log_iserror,log_message)
values(uuid(),sysdate(),'p_MDM_divisionDiv','DataHub',v_paras,1,CONCAT('实体类信息异常。'));
SET v_returncode = 99;
#SET o_Ret=v_returncode;

END;

#初始化
#拼接输入参数,用于记录日志
SET v_paras = CONCAT_WS(',',
CONCAT('DivCode=',i_divcode),
CONCAT('DivName=',i_divname),
CONCAT('DivFullName=',i_divfullname),
CONCAT('ParentCode=',i_parentcode),
CONCAT('Order_no',i_ordeNo),
CONCAT('INSERT_ID=',i_INSERT_ID),
CONCAT('UPDATE_ID=',i_UPDATE_ID)
);

#返回码初始值设置为成功
SET v_returncode = 10;
SET v_success_msg = '';
SET v_error_msg = '';
SET v_sql = '';
SET v_Id = NULL;
#校验输入参数
F_CHECK:BEGIN
IF isnull(i_divcode) THEN
SET v_returncode = 11;
SET v_error_msg = '政区代码不能为空:p_MDM_divisionDiv;';
LEAVE F_CHECK;
END IF;
IF isnull(i_divname) THEN
SET v_returncode = 11;
SET v_error_msg = '政区名称不能为空:p_MDM_divisionDiv;';
LEAVE F_CHECK;
END IF;
IF isnull(i_divfullname) THEN
SET v_returncode = 11;
SET v_error_msg = '全称不能为空:p_MDM_divisionDiv;';
LEAVE F_CHECK;
END IF;
END;
#SET AUTOCOMMIT = 0;
START TRANSACTION;
F_TRANS:BEGIN
#如果校验不通过,不做数据同步
IF v_returncode != 10 THEN
LEAVE F_TRANS;
END IF;


#判断 这些值是不是为空 空就插入 否则修改
SELECT
ID
INTO
v_Id
FROM m_division
WHERE 1=1
AND DivCode=i_divcode
AND DivName=i_divname
AND DivFullName=i_divfullname
AND ParentCode=i_parentcode
AND Order_no=i_ordeNo;

IF isnull(v_Id) || v_Id = '' THEN
#数据库处理
#行政区域信息添加
INSERT INTO m_division(
DivCode
,DivName
,DivFullName
,ParentCode
,Order_no
,INSERT_TIME
,UPDATE_TIME
,INSERT_ID
,UPDATE_ID

)VALUES(
`i_divcode`
,`i_divname`
,`i_divfullname`
,`i_parentcode`
,`i_ordeNo`
,now()
,now()
,`i_INSERT_ID`
,`i_UPDATE_ID`
);
ELSE
UPDATE m_division
SET
DivCode=`i_divcode`,
DivName=`i_divname`,
DivFullName=`i_divfullname`,
ParentCode=`i_parentcode`,
Order_no=`i_ordeNo`,
INSERT_TIME=now(),
UPDATE_TIME=now(),
INSERT_ID=`i_INSERT_ID`,
UPDATE_ID=`i_UPDATE_ID`
WHERE ID=v_Id;
END IF;

SET v_success_msg = CONCAT('实体类信息政区代码:',i_divcode,'(名称):',i_divname,'(全称):',i_divfullname,'(排序):',i_ordeNo,';');
END;
COMMIT;

#记录日志
IF v_returncode = 10 THEN
SET v_success_msg = CONCAT(v_success_msg,'返回码:',v_returncode,';');
insert into logdbio(SerialKey,log_datetime,log_logger,log_type,log_paras,log_iserror,log_message)
values(uuid(),sysdate(),'p_MDM_divisionDiv','DataHub',v_paras,0,v_success_msg);
ELSE
SET v_error_msg = CONCAT(v_error_msg,'返回码:',v_returncode,';');
insert into logdbio(SerialKey,log_datetime,log_logger,log_type,log_paras,log_iserror,log_message)
values(uuid(),sysdate(),'p_MDM_divisionDiv','DataHub',v_paras,1,v_error_msg);
END IF;


COMMIT;

/*返回DataHub
10:成功
11:其他错误
*/
#SET o_Ret=v_returncode;
select v_returncode;

END
...全文
145 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你这是mysql的把。 报错信息上; statement format since BINLOG_FORMAT = STATEMENT 建议你修改:BINLOG_FORMAT = mixed
王思明 2015-12-25
  • 打赏
  • 举报
回复
没有看你拙劣的代码,估计是什么操作返回了多个值,而你目前的测试库里面恰好只返回了一条,但这个存储过程是有问题的,你在哪个地方取值应该使用Top 或者是Max 之类的,保证你获取的数据只有一条; 上面是一个问题寻找方向,真正解决问题还是你要自己看一下

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧