【发布时间】:2014-12-26 15:23:27
【问题描述】:
我想selectinto 变量是这样的:
select NAME, LASTNAME
into v_name, v_lastname
from PERSON;
根据this question,我可以用exceptionNO_DATA_FOUND管理它。
但是如果NAME是null,但是没有LASTNAME,没有两个select怎么办?
【问题讨论】:
我想selectinto 变量是这样的:
select NAME, LASTNAME
into v_name, v_lastname
from PERSON;
根据this question,我可以用exceptionNO_DATA_FOUND管理它。
但是如果NAME是null,但是没有LASTNAME,没有两个select怎么办?
【问题讨论】:
如果表中有匹配的行,即使值是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,因为在我看来这是最易读的方式。只是为了给你选择。
【讨论】:
你在谈论两个不同的事情。要么:
NO_DATA_FOUND 管理异常。NAME 和/或LASTNAME 的值为null。在这种情况下,关联变量将简单地设置为 null,其中数据库中的值为 null - 没有异常需要处理,因为返回了一行。顺便说一句,您可能还想考虑使用TOO_MANY_ROWS 异常。如果您选择变量,则您的查询必须返回一行且仅返回一行,并且您的查询(我很欣赏这可能只是一个简化的示例)没有 where 子句。
【讨论】: