我希望select
into
变量具有以下内容:
select NAME, LASTNAME
into v_name, v_lastname
from PERSON;
根据this question,我可以使用exception
NO_DATA_FOUND
进行管理。
但如果NAME
为null
,但没有LASTNAME
,没有两个select
怎么办?
答案 0 :(得分:2)
如果表中有匹配的行,即使值为null
,select 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)
你说的是两件事。之一:
NO_DATA_FOUND
管理例外,否则您的PL / SQL将终止。NAME
和/或LASTNAME
的值为null
。在这种情况下,关联的变量将简单地设置为null
,其中数据库中的值为null
- 因为返回了行而没有异常处理。顺便提一下,您可能还想考虑使用TOO_MANY_ROWS
例外。如果您选择变量,您的查询必须返回一行而且只返回一行,而您的查询(我很欣赏它可能只是一个简化示例)没有where
子句。