【发布时间】:2011-06-15 00:21:34
【问题描述】:
我正在尝试制作一个 DB2 UDF,它接受输入日期并返回添加了几个月的新日期。这一步的查询语法是使用
select date + 12 months from sysibm.sysdummy1;
在 UDF 内部我无法让它工作
monthsToAdd INTEGER;
SET monthsToAdd=4;
set result= inputDate + monthsToAdd + MONTHS;
return result;
上面写着
SQL 状态:42816 供应商代码:-182 消息:[SQL0182] 日期、时间或时间戳表达式无效。原因 。 . . . . : 发生以下情况之一: -- 加法操作数是日期,另一个不是日期持续时间。 -- 加法的一个操作数是时间,另一个不是持续时间。 -- 加法的一个操作数是时间戳,另一个不是持续时间。 -- 减法操作数是日期,另一个不是日期、字符或日期持续时间。 -- 减法操作数是一个时间,另一个不是时间、字符或持续时间。 -- 减法操作数是时间戳,另一个不是时间戳、字符或持续时间。恢复 。 . . :更正算术表达式,使其包含有效的日期、时间或时间戳表达式。再次尝试请求。
【问题讨论】:
-
该错误是编译时错误(您可以创建过程吗?)还是运行时错误?你能发布整个 Create Procedure stmt 吗?
-
任何理由不只使用 DB2 标量函数 ADD_MONTHS,自 2008 年 1 月的 DB2 for IBM i 6.1 起可用;也许当时还在 v5r4 上?供参考:IBM i 7.2->Database->Reference->SQL reference->Built-in functions->Scalar functions->ADD_MONTHS 的最新发布文档
标签: sql stored-procedures db2 user-defined-functions ibm-midrange