DB2 LUW创建返回表函数时遇SQLCODE=-104错误求助
解决DB2 LUW创建返回表函数的SQLCODE=-104错误
错误原因
SQLCODE=-104、SQLSTATE=42601的语法错误,根源是你编写的函数不符合DB2 LUW对返回表类型SQL函数的语法规范:在BEGIN ATOMIC块中直接用RETURN + SELECT语句的写法不被支持,DB2无法识别该语法结构,因此抛出意外结束标记的错误。
修正方案
以下两种写法均可正确创建该返回表函数:
方案1:省略BEGIN ATOMIC块,直接返回查询结果
适用于逻辑简单的场景,直接将SELECT语句作为函数体:
CREATE OR REPLACE FUNCTION FUNC_TT () RETURNS TABLE (ID CHAR(1)) LANGUAGE SQL READS SQL DATA NO EXTERNAL ACTION DETERMINISTIC RETURN SELECT '1' FROM SYSIBM.SYSDUMMY1;
方案2:在BEGIN ATOMIC块中用RETURN TABLE()包裹查询
如果后续需要扩展复杂逻辑(如变量定义、条件判断),可保留BEGIN ATOMIC块,但必须用RETURN TABLE()包裹查询语句:
CREATE OR REPLACE FUNCTION FUNC_TT () RETURNS TABLE (ID CHAR(1)) LANGUAGE SQL READS SQL DATA NO EXTERNAL ACTION DETERMINISTIC BEGIN ATOMIC RETURN TABLE( SELECT '1' FROM SYSIBM.SYSDUMMY1 ); END
验证方法
函数创建成功后,可通过以下语句调用并查看结果:
SELECT * FROM TABLE(FUNC_TT());
内容的提问来源于stack exchange,提问作者sensen ol
相关产品推荐
相关产品推荐

