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。