如何在SELECT INTO语句中为具有NULL值的变量赋值?

时间:2017-01-10 07:52:49

标签: oracle stored-procedures plsql

我有一个问题:

DECLARE
  id_tmp number;
BEGIN
  select id into id_tmp from ...;
END;

因此查询可能没有选择id。我有一个错误:

  

ORA-01403:未找到数据

如何处理此问题并将id_tmp分配给NULL

2 个答案:

答案 0 :(得分:1)

假设您的查询只能返回一行或没有行,一种方法是处理NO_DATA_FOUND

DECLARE
  id_tmp number;
BEGIN
  begin
      select id
      into id_tmp
      from (
            select 1 as id
            from dual
            where 1=2
           );
  exception
    when NO_DATA_FOUND then
        id_tmp := null;
  end;
END;

另一种方式,在相同的假设下,可以通过一个聚合函数,当查询没有返回数据时返回null

DECLARE
  id_tmp number;
BEGIN
  select max(id)
  into id_tmp
  from (
        select 1 as id
        from dual
        where 1=2
       );
END;

答案 1 :(得分:0)

了解errors handling。在您的情况下,您应该对预定义的错误NO_DATA_FOUND感兴趣。你必须捕获错误并在那里为id_tmp赋值。