为什么IBM i DB2的函数无法在DB2 LUW上使用相同关键字
报错原因
该报错是IBM i DB2与DB2 LUW平台的自定义函数语法差异导致,核心冲突点如下:
- DB2 LUW将自定义函数分为两类:纯SQL逻辑实现的SQL自定义函数、调用C/Java等外部程序的外部自定义函数,两类函数支持的声明属性完全互斥
NO EXTERNAL ACTION是仅适用于外部自定义函数的属性,你编写的是纯SQL实现的函数,不需要也不能显式声明该关键字- 当你在SQL函数声明中加入
NO EXTERNAL ACTION时,DB2 LUW会自动判定你要创建外部函数,开始校验外部函数必填的FENCED/NOT FENCED、EXTERNAL等关键字,你未提供对应声明,就会触发FENCED子句相关的关键字冲突报错
修复方案
删除NO EXTERNAL ACTION声明即可,DB2 LUW中所有纯SQL实现的自定义函数默认隐含NO EXTERNAL ACTION属性,无需额外声明。其余DETERMINISTIC、RETURNS NULL ON NULL INPUT关键字在DB2 LUW的SQL函数中均可正常使用。
修复后代码如下:
CREATE OR REPLACE FUNCTION getHex2Char(IN_HEXCHAR VARCHAR(8)) RETURNS INT DETERMINISTIC RETURNS NULL ON NULL INPUT BEGIN -- Do some SQL stuff and return result END
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

