2014-10-30 138 views
0

我想selectinto变量像这样的东西:选择到变量

select NAME, LASTNAME 
into v_name, v_lastname 
from PERSON; 

this question,我可以用exceptionNO_DATA_FOUND管理。

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

回答

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. 该查询不返回一行。在这种情况下,PL/SQL将会终止,除非你像前面说的那样用NO_DATA_FOUND来管理异常。
  2. 查询返回一行,但NAME和/或LASTNAME的值为null。在这种情况下,关联的变量将被简单地设置为null,其中数据库中的值为null - 由于返回了一行,因此没有例外要处理。

顺便提一句,您可能还想考虑使用TOO_MANY_ROWS例外。如果你选择了变量,你的查询必须返回一行,并且你的查询必须返回(我赞赏它可能只是一个简单的例子),但没有where子句。