Oracle function函数中无法使用update更新

CREATE OR REPLACE FUNCTION changePY 
  RETURN VARCHAR2
as
PRAGMA AUTONOMOUS_TRANSACTION;  --as 或者 is 后边 加上这句  PRAGMA AUTONOMOUS_TRANSACTION “自治事务”
  v_length INT := 0;
  T_ICD10VALUE  varchar2(1000);
  T_ICD10code  varchar2(1000);
  T_ICDTYPE  varchar2(1000);
  T_ICDBM  varchar2(1000);
  T_ICDSAU  varchar2(1000);
  T_ICDOLDCODE  varchar2(1000);
  T_ICDOLDVALUE  varchar2(0100);
  T_REMARK  varchar2(1000);
  T_PYM  varchar2(1000);
  T_PYMA  varchar2(1000);
      CURSOR DataTable IS select * from  icd10v2;
   begin
   select count(*) into v_length  from icd10v2;
   open DataTable;
   loop
     FETCH  DataTable into T_ICD10code, T_ICD10VALUE, T_ICDTYPE, T_ICDBM, T_ICDSAU,T_ICDOLDCODE, T_ICDOLDVALUE, T_REMARK, T_PYM;
      exit when DataTable%notfound;   
        T_PYMA:=fn_getpy(T_ICD10VALUE,4) ;
        update icd10v2 set PYM=T_PYMA  where ICD10CODE=T_ICD10code and  ICD10VALUE=T_ICD10VALUE;
        COMMIT; -- 在更新语句执行之后提交
  end loop;
  CLOSE DataTable;
  return '更新成功';  
end changePY;

 无法在查询中执行 DML 操作。

自治事务的特点

第一,这段程序不依赖于原有Main程序,比如Main程序中有未提交的数据,那么在自治事务中是查找不到的。

第二,在自治事务中,commit或者rollback只会提交或回滚当前自治事务中的DML,不会影响到Main程序中的DML。

 

posted @ 2021-01-19 10:05  Sumi-eCrow  阅读(850)  评论(0编辑  收藏  举报