ORA-01403未找到任何数据select into

问题:

执行SQL,当无返回值时,会提示“ORA-01403未找到任何数据”。

复制代码
create or replace trigger tri_kf_trial 
before insert on kf_trial 
for each row 
declare
  v_id    varchar2(25);
begin
    SELECT id INTO v_id FROM HI_PSNDOC_BAD WHERE id = :new.id;
    if (v_id IS NOT NULL) then
      raise_application_error(-20101, '该员工处在黑名单之中!');
    end if;end;
复制代码

解决办法:

方法一:先判断结果是否存在

复制代码
create or replace trigger tri_kf_trial 
before insert on kf_trial 
for each row 
declare
  v_count NUMBER;
  v_id    varchar2(25);
begin
  SELECT count(id) INTO v_count FROM HI_PSNDOC_BAD WHERE id = :new.id;
  if v_count > 0 then
    SELECT id INTO v_id FROM HI_PSNDOC_BAD WHERE id = :new.id;
    if (v_id IS NOT NULL) then
      raise_application_error(-20101, '该员工处在黑名单之中!');
    end if;
  end if;
end;
复制代码

方法二:通过EXCPTION来判断。

复制代码
create trigger tri_kf_trial
  before insert on kf_trial
  for each row
declare
  v_id varchar2(25);
begin
  SELECT id
    INTO v_id
    FROM HI_PSNDOC_BAD
   WHERE id = :new.id exception when no_data_found then v_id = null;
  if (v_id IS NULL) then
    raise_application_error(-20101, '该员工处在黑名单之中!');
  end if;
end;
复制代码

 

posted @   cqyyck  阅读(720)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示