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