Tenho uma função definida pelo usuário que modifica dados sql. Ela insere em uma tabela e retorna o ID da linha retornada. Tentando usá-la assim
UPDATE table_X SET REV = REVISION(:timestamp, :user) WHERE ...conditions;
O DB2 me dá o erro: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.
A documentação da IBM para esse erro diz especificamente que é assim que uma função MODIFIES SQL DATA
deve ser usada.
Isso é apenas um bug no DB2 ou estou esquecendo de alguma coisa?
Se você tiver o DB2 para LUW (e não o DB2 para Z/OS ao qual seu link se refere), então você deve seguir a documentação correta.
Consulte o link da instrução CREATE FUNCTION (escalar SQL, tabela ou linha) com a seguinte nota sobre a
MODIFIES SQL DATA
cláusula:Isto significa que ele não pode ser usado na
UPDATE
declaração, por exemplo. Somente naSET
declaração de uma declaração compostacompiled
(BEGIN ... END, não BEGIN ... END).ATOMIC