oracle触发器 select into,使用“SELECT INTO”时,Oracle PL / SQL – ORA-01403“未找到数据”...

在Oracle中开发触发器时遇到ORA-01403错误,该错误发生在尝试使用'SELECT INTO'且未找到匹配数据时。文章探讨了如何优雅地处理这种错误,同时保持最佳性能和最少的查询次数。通过示例代码展示了一个日期参考表和触发器的情景,讨论了在找不到匹配数据时如何找到最接近的DATE_START记录。
摘要由CSDN通过智能技术生成

我在Oracle中开发触发器时遇到了这个问题:

ORA-01403: no data found.我做了一些研究并理解了问题的根源.尽管如此,

handling the error exception可以防止上述错误,但不能解决我的问题.

我目前正在寻找的是一种最佳的解决方法,可以执行较少的查询量/尽可能获得最佳性能.我将尝试描述为真实结构创建简单示例的场景.

脚本

我有一个“日期参考”表来确定时间段,比如说:

CREATE TABLE DATE_REFERENCE (

DATE_START DATE NOT NULL,

DATE_END DATE NOT NULL,

-- Several other columns here, this is just a silly example

CONSTRAINT PK_DATE_REFERENCE PRIMARY KEY(DATE_START, DATE_END)

);

当触发器被触发时,我将有一个DATE字段 – 例如DATE_GIVEN(例如清酒).我需要的是:

>查找DATE_REFERENCE行DATE_GIVEN BETWEEN DATE_START和DATE_END(简单);要么

>如果前一个选项没有返回数据,我需要找到下一个最接近DATE_START到DATE_GIVEN的数据.

在这两种情况下,我都需要从表DATE_REFERENCE中检索包含所有列的行,无论它是否与Opt 1或2匹配.这正是我遇到所描述问题的地方.

我写了这个测试块来测试并试图找到一个解决方案.我知道,下面的例子不起作用;但这正是我想要完成的(在概念上).我添加了一些评论 – 很多代码,以明确将成为更复杂的触发器的一部分:

DECLARE

DATE_GIVEN DATE;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值