DB2创建带MODIFIES SQL DATA的函数报错SQLCODE=-628如何解决
DB2自定义函数
MODIFIES SQL DATA报错-628修复方案 你遇到的报错:
[42613][-628] 与“MODIFIES SQL DATA”子句相关的关键字存在多个或冲突。SQLCODE=-628,SQLSTATE=42613,DRIVER=4.26.14
核心原因是DB2的语法限制:返回结果集的表函数(Table UDF)不支持MODIFIES SQL DATA子句,二者互斥。根据你的业务场景选择对应方案修复即可:
场景1:逻辑确实需要修改SQL数据
如果函数内包含对表的增删改、修改会话配置等修改数据的逻辑,需要把表函数替换为存储过程实现,存储过程支持MODIFIES SQL DATA,同时也可以返回结果集,示例代码如下:
create procedure n1n2n3ToCityName() modifies sql data language sql dynamic result sets 1 -- 声明返回1个结果集 begin declare tempCityName varchar(40); -- 此处补充你的业务逻辑 -- 返回结果集示例 declare cur cursor with return for select cityname, name1, name2, name3 from 你的业务表; open cur; end
场景2:逻辑不需要修改SQL数据
如果只是误加了MODIFIES SQL DATA子句,直接删除该子句即可,表函数默认是READS SQL DATA权限,符合只读查询的需求,修改后的函数代码如下:
create function n1n2n3ToCityName() returns table (cityname varchar(40),name1 varchar(40),name2 varchar(40),name3 varchar(40)) language sql begin declare tempCityName varchar(40); -- 此处补充你的业务逻辑,仅支持读操作,不能包含增删改语句 end;
内容的提问来源于stack exchange,提问作者Максим Адищев
相关产品推荐
相关产品推荐

