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。