我有一个修改 SQL 数据的用户定义函数。它插入到一个表中并返回返回行的 ID。尝试像这样使用它
UPDATE table_X SET REV = REVISION(:timestamp, :user) WHERE ...conditions;
DB2 给出了错误:Routine "REDACTED.REVISION" (specific name "REDACTED") is defined with the MODIFIES SQL DATA option, which is not valid in the context where the routine is invoked.
IBM针对此错误的文档明确说明了函数的MODIFIES SQL DATA
使用方法。
这仅仅是 DB2 中的一个错误还是我遗漏了什么?
如果您有 DB2 for LUW(而不是您的链接所指的 DB2 for Z/OS),那么您应该遵循正确的文档。
请参阅CREATE FUNCTION(SQL 标量、表或行)语句链接,其中包含有关该子句的以下注释
MODIFIES SQL DATA
:这意味着它不能在
UPDATE
语句中使用,例如,只能在(BEGIN ... END,而不是BEGIN ... END) 复合SET
语句中使用。compiled
ATOMIC