DB2 FUNCTION TEST ERROR

时间:2017-08-30 15:34:23

标签: db2

如何解决这个问题? :

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,

1 个答案:

答案 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。