如何解决这个问题? :
CREATE OR REPLACE FUNCTION "BADIL_PROD"."FCT_UPDATE_POINTAGE" (id_projet in NUMBER)
return NUMBER
is
Results NUMBER;
CURSOR cur_update IS
SELECT distinct t.ID_TACHE,t.id_collaborateur,t.id_ref_rubrique_activite
FROM TACHES t
where t.ID_PROJET =id_projet ;
begin
dbms_output.enable(200000);
FOR cur in cur_update
LOOP
BEGIN
dbms_output.put_line(cur.ID_TACHE || '--' || cur.ID_COLLABORATEUR || '--' || cur.ID_REF_RUBRIQUE_ACTIVITE);
UPDATE POINTAGES p SET p.ID_TACHE_INCIDENT = cur.ID_TACHE
where p.id_projet_tma=id_projet
and p.ID_COLLABORATEUR = cur.ID_COLLABORATEUR
AND p.ID_REF_RUBRIQUE_ACTIVITE = cur.ID_REF_RUBRIQUE_ACTIVITE;
END;
END LOOP;
results:=0;
return(results);
end fct_update_pointage;
所以当我想测试这个函数时,我在data studio中得到了这个错误:
(具体名称" FCT_UPDATE_POINTAGE")尝试修改数据但是 未定义为MODIFIES SQL DATA .. SQLCODE = -577,
答案 0 :(得分:0)
这适用于Linux上的DB2 V11:
<%= link_to(t('email.edit_cancel_link'),edit_sub_url(key: @subscriber.ticketcode))%>
(其中FCT_UPDATE_POINTAGE.sql包含您的函数定义)
但是,请注意文档中的文档限制“编译的SQL函数(包括PL / SQL函数),MODIFY SQL DATA只能用作复合SQL中赋值语句右侧的唯一元素(编译)声明。“
DB2 Version 9.7在定义PL / SQL用户定义函数时允许“修改sql data”子句,但IBM在DB2 Version 10.1及更高版本中删除了该功能。也许你需要转换成一个sproc。