oracle触发器nvl(),ORACLE触发器异常后insert不执行问题

create or replace trigger HY_住院费用记录_DOCTOR_INSERT

before INSERT

ON 住院费用记录

FOR EACH ROW --说明创建的是行级触发器

DECLARE

v_管床医生 病人变动记录.经治医师%TYPE;

BEGIN

--根据病人ID,主页ID获得最新的管床医生

SELECT d.经治医师 INTO v_管床医生 FROM 病人变动记录 d

WHERE d.病人id=:new.病人id and d.主页id=:new.主页id

AND d.开始时间 = (SELECT MAX(b.开始时间) FROM 病人变动记录 b WHERE b.病人id=:new.病人id and b.主页id=:new.主页id)

AND d.终止时间 IS NULL;

-- AND ROWNUM = 1;

--判断临床是否操作选择了管床医生

/*            If v_管床医生 Is NULL  then

SELECT nvl(a.住院医师,'未选择') INTO v_管床医生 FROM 病案主页 a WHERE a.病人id= :new.病人id and a.主页id=:new.主页id;

END IF;

*/

--异常处理

EXCEPTION

WHEN NO_DATA_FOUND THEN

SELECT nvl(a.住院医师,'未选择') INTO v_管床医生 FROM 病案主页 a WHERE a.病人id=:new.病人id and a.主页id=:new.主页id;

Insert Into HY_住院费用记录

(ID, 记录性质, NO, 记录状态, 序号, 从属父号, 价格父号, 多病人单, 记帐单ID,病人id, 主页id, 医嘱序号, 门诊标志, 记帐费用, 姓名, 性别, 年龄, 标识号, 床号, 病人病区id,

病人科室id, 费别, 收费类别, 收费细目id, 计算单位, 付数, 发药窗口, 数次, 加班标志, 附加标志, 婴儿费, 收入项目id, 收据费目, 标准单价, 应收金额, 实收金额, 划价人,

开单部门id, 开单人, 发生时间,  登记时间, 执行部门id, 执行人, 执行状态, 执行时间, 结论, 操作员编号, 操作员姓名, 结帐ID, 结帐金额, 保险大类id, 保险项目否, 保险编码,

费用类型, 统筹金额, 是否上传,摘要, 是否急诊, 医疗小组id, 缴款组ID, 腔镜, 摘要1, 待转出,管床医生)

Values

(:NEW.ID, :NEW.记录性质, :NEW.NO, :NEW.记录状态, :NEW.序号, :NEW.从属父号,:NEW.价格父号,:NEW.多病人单,:NEW.记帐单ID,:NEW.病人id,:NEW.主页id,

:NEW.医嘱序号, :NEW.门诊标志, :NEW.记帐费用, :NEW.姓名, :NEW.性别, :NEW.年龄, :NEW.标识号, :NEW.床号, :NEW.病人病区id,:NEW.病人科室id,:NEW.费别,

:NEW.收费类别,:NEW.收费细目id,:NEW.计算单位, :NEW.付数,:NEW.发药窗口, :NEW.数次, :NEW.加班标志, :NEW.附加标志, :NEW.婴儿费, :NEW.收入项目id,

:NEW.收据费目, :NEW.标准单价, :NEW.应收金额, :NEW.实收金额, :NEW.划价人, :NEW.开单部门id, :NEW.开单人, :NEW.发生时间, :NEW.登记时间, :NEW.执行部门id,

:NEW.执行人, :NEW.执行状态, :NEW.执行时间, :NEW.结论, :NEW.操作员编号, :NEW.操作员姓名, :NEW.结帐ID, :NEW.结帐金额, :NEW.保险大类id, :NEW.保险项目否,

:NEW.保险编码, :NEW.费用类型, :NEW.统筹金额, :NEW.是否上传, :NEW.摘要, :NEW.是否急诊, :NEW.医疗小组id, :NEW.缴款组ID, :NEW.腔镜, :NEW.摘要1,

:NEW.待转出, v_管床医生);

--其他异常

WHEN OTHERS THEN

--zl_ErrorCenter(SQLCode, SQLErrM);

Raise_application_error (-20221, '未知错误!');

--无异常执行这段

Insert Into HY_住院费用记录

(ID, 记录性质, NO, 记录状态, 序号, 从属父号, 价格父号, 多病人单, 记帐单ID,病人id, 主页id, 医嘱序号, 门诊标志, 记帐费用, 姓名, 性别, 年龄, 标识号, 床号, 病人病区id,

病人科室id, 费别, 收费类别, 收费细目id, 计算单位, 付数, 发药窗口, 数次, 加班标志, 附加标志, 婴儿费, 收入项目id, 收据费目, 标准单价, 应收金额, 实收金额, 划价人,

开单部门id, 开单人, 发生时间,  登记时间, 执行部门id, 执行人, 执行状态, 执行时间, 结论, 操作员编号, 操作员姓名, 结帐ID, 结帐金额, 保险大类id, 保险项目否, 保险编码,

费用类型, 统筹金额, 是否上传,摘要, 是否急诊, 医疗小组id, 缴款组ID, 腔镜, 摘要1, 待转出,管床医生)

Values

(:NEW.ID, :NEW.记录性质, :NEW.NO, :NEW.记录状态, :NEW.序号, :NEW.从属父号,:NEW.价格父号,:NEW.多病人单,:NEW.记帐单ID,:NEW.病人id,:NEW.主页id,

:NEW.医嘱序号, :NEW.门诊标志, :NEW.记帐费用, :NEW.姓名, :NEW.性别, :NEW.年龄, :NEW.标识号, :NEW.床号, :NEW.病人病区id,:NEW.病人科室id,:NEW.费别,

:NEW.收费类别,:NEW.收费细目id,:NEW.计算单位, :NEW.付数,:NEW.发药窗口, :NEW.数次, :NEW.加班标志, :NEW.附加标志, :NEW.婴儿费, :NEW.收入项目id,

:NEW.收据费目, :NEW.标准单价, :NEW.应收金额, :NEW.实收金额, :NEW.划价人, :NEW.开单部门id, :NEW.开单人, :NEW.发生时间, :NEW.登记时间, :NEW.执行部门id,

:NEW.执行人, :NEW.执行状态, :NEW.执行时间, :NEW.结论, :NEW.操作员编号, :NEW.操作员姓名, :NEW.结帐ID, :NEW.结帐金额, :NEW.保险大类id, :NEW.保险项目否,

:NEW.保险编码, :NEW.费用类型, :NEW.统筹金额, :NEW.是否上传, :NEW.摘要, :NEW.是否急诊, :NEW.医疗小组id, :NEW.缴款组ID, :NEW.腔镜, :NEW.摘要1,

:NEW.待转出, v_管床医生);

END HY_住院费用记录_DOCTOR_INSERT;

如果--根据病人ID,主页ID获得最新的管床医生

SELECT d.经治医师 INTO v_管床医生 FROM 病人变动记录 d

WHERE d.病人id=:new.病人id and d.主页id=:new.主页id

AND d.开始时间 = (SELECT MAX(b.开始时间) FROM 病人变动记录 b WHERE b.病人id=:new.病人id and b.主页id=:new.主页id)

AND d.终止时间 IS NULL;

这段sql查询不到数据触发NO_DATA_FOUND异常

查询到数据则执行

--无异常执行这段

Insert Into HY_住院费用记录

(ID, 记录性质, NO, 记录状态, 序号, 从属父号, 价格父号, 多病人单, 记帐单ID,病人id, 主页id, 医嘱序号, 门诊标志, 记帐费用, 姓名, 性别, 年龄, 标识号, 床号, 病人病区id,

病人科室id, 费别, 收费类别, 收费细目id, 计算单位, 付数, 发药窗口, 数次, 加班标志, 附加标志, 婴儿费, 收入项目id, 收据费目, 标准单价, 应收金额, 实收金额, 划价人,

开单部门id, 开单人, 发生时间,  登记时间, 执行部门id, 执行人, 执行状态, 执行时间, 结论, 操作员编号, 操作员姓名, 结帐ID, 结帐金额, 保险大类id, 保险项目否, 保险编码,

费用类型, 统筹金额, 是否上传,摘要, 是否急诊, 医疗小组id, 缴款组ID, 腔镜, 摘要1, 待转出,管床医生)

Values

(:NEW.ID, :NEW.记录性质, :NEW.NO, :NEW.记录状态, :NEW.序号, :NEW.从属父号,:NEW.价格父号,:NEW.多病人单,:NEW.记帐单ID,:NEW.病人id,:NEW.主页id,

:NEW.医嘱序号, :NEW.门诊标志, :NEW.记帐费用, :NEW.姓名, :NEW.性别, :NEW.年龄, :NEW.标识号, :NEW.床号, :NEW.病人病区id,:NEW.病人科室id,:NEW.费别,

:NEW.收费类别,:NEW.收费细目id,:NEW.计算单位, :NEW.付数,:NEW.发药窗口, :NEW.数次, :NEW.加班标志, :NEW.附加标志, :NEW.婴儿费, :NEW.收入项目id,

:NEW.收据费目, :NEW.标准单价, :NEW.应收金额, :NEW.实收金额, :NEW.划价人, :NEW.开单部门id, :NEW.开单人, :NEW.发生时间, :NEW.登记时间, :NEW.执行部门id,

:NEW.执行人, :NEW.执行状态, :NEW.执行时间, :NEW.结论, :NEW.操作员编号, :NEW.操作员姓名, :NEW.结帐ID, :NEW.结帐金额, :NEW.保险大类id, :NEW.保险项目否,

:NEW.保险编码, :NEW.费用类型, :NEW.统筹金额, :NEW.是否上传, :NEW.摘要, :NEW.是否急诊, :NEW.医疗小组id, :NEW.缴款组ID, :NEW.腔镜, :NEW.摘要1,

:NEW.待转出, v_管床医生);

现在的问题是编译通过了,但是HY_住院费用记录中就是没有同步过来数据,请前辈给分析下问题在哪里。

万分感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值