列为空时选择变量

时间:2014-10-30 14:19:10

标签: sql oracle plsql

我希望select into变量具有以下内容:

select NAME, LASTNAME
into v_name, v_lastname
from PERSON;

根据this question,我可以使用exception NO_DATA_FOUND进行管理。

但如果NAMEnull,但没有LASTNAME,没有两个select怎么办?

2 个答案:

答案 0 :(得分:2)

如果表中有匹配的行,即使值为nullselect into也会正常工作,所以我怀疑使用异常处理时此语句确实存在问题如链接问题中所述。如果有一条线,则不会引发任何异常。

如果您希望在没有异常处理的情况下保持此语句适用于这两种情况(包含和不包含表中的数据),请使用left outer join

select NAME
,      LASTNAME
into   v_name
,      v_lastname
from   dual
left
outer
join   PERSON
on     1=1
;

我建议保留异常处理,而不是使用left outer join,因为在我看来,这是最易读的方式。只是给你选择。

答案 1 :(得分:1)

你说的是两件事。之一:

  1. 查询不返回任何行。在这种情况下,除非您按照NO_DATA_FOUND管理例外,否则您的PL / SQL将终止。
  2. 查询返回一行,但NAME和/或LASTNAME的值为null。在这种情况下,关联的变量将简单地设置为null,其中数据库中的值为null - 因为返回了行而没有异常处理。
  3. 顺便提一下,您可能还想考虑使用TOO_MANY_ROWS例外。如果您选择变量,您的查询必须返回一行而且只返回一行,而您的查询(我很欣赏它可能只是一个简化示例)没有where子句。