2014-10-30 120 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子句。