DB2oC(云上的DB2):面向;试图修改数据,但未定义为“修改SQL数据”;错误

DB2oC(云上的DB2):面向;试图修改数据,但未定义为“修改SQL数据”;错误,db2,db2-luw,Db2,Db2 Luw,我在DB2oC中创建了非常简单的函数,如下所示,它有一条updatesql语句和一条selectsql语句以及modifiessql数据。但是我仍然得到下面的错误,尽管我已经指定了修改SQL数据。我确实将那个测试表上的所有内容都授予了我的用户id,并且在安全方面也将executeon函数授予了我的用户id。你能帮我解释一下这个问题吗 我只是使用SELECT语句调用了函数,如下所示: SELECT TESTSCHEMA.MAIN_FUNCTION() FROM TABLE(VALUES(1));

我在DB2oC中创建了非常简单的函数,如下所示,它有一条updatesql语句和一条selectsql语句以及modifiessql数据。但是我仍然得到下面的错误,尽管我已经指定了修改SQL数据。我确实将那个测试表上的所有内容都授予了我的用户id,并且在安全方面也将executeon函数授予了我的用户id。你能帮我解释一下这个问题吗

我只是使用SELECT语句调用了函数,如下所示:

SELECT TESTSCHEMA.MAIN_FUNCTION() FROM TABLE(VALUES(1));
SQL错误[38002]:用户定义例程“TESTSCHEMA.MAIN\u函数” (特定名称“SQL2012110103006981”)试图修改数据,但被拒绝 未定义为修改SQL数据。。SQLCODE=-577,SQLSTATE=38002, 驾驶员=4.27.25


感谢您的帮助。

对于
修改SQL数据
子句,该函数的使用仅限于Db2 LUW

这些限制不适用于不修改数据的用户定义函数

对于您的特定示例,当在复合SQL编译语句中用作赋值语句右侧的唯一表达式时,该UDF将运行

例如:

create or replace variable my_result varchar(20) default null;

begin
    set my_result = main_function();
end@

考虑使用存储过程来修改表内容,而不是用户定义的函数。

您可以避免使用函数,而只使用一个


很可能是不正确的用法。请编辑您的问题以显示如何调用函数。请注意,该函数只能出现在复合SQL编译语句中赋值语句的右侧。谢谢@mao的回复。我编辑了关于如何使用SELECT语句调用的问题,该语句通常在我测试其他函数时起作用。
create or replace variable my_result varchar(20) default null;

begin
    set my_result = main_function();
end@
SELECT CONTENT_TEXT
FROM NEW TABLE(
    UPDATE TEST t
    SET t.CONTENT_TEXT = 'test value'
    WHERE t.ID = 1
)