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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM