oracle 變量賦值


在oracle 中使用 select 字段 into 變量 from 表 where 條件 這種方法給變量賦值時和MSSQL的行為有比較大區別.

在MSSQL中如果在該表中未檢索到任何行,則變量的值保持不變,如果檢索到多條數據,則會將每一條數據的值依次賦給變量(順序不保證永遠相同) .但是在oracle中,只有取到唯一行的時候才會賦值成功,其它情況都會拋出一個異常.在MSSQL中利用對變量重復賦值可以產生一次非常巧妙的應用,還是非常好的功能.具體兩種機制的好壞就不做出評價了.

如果某些情況下我們希望檢索不到任何行的時候,該變量保持之前的值即可而不需要拋出異常,這時該怎么辦?

同事給出的辦法是用BEGIN *** END 隔離再用異常捕捉處理,如下:

BEGIN

   select 字段 into 變量 from 表B where 條件;

   exception

.....

END;

另一個方案是先查詢該表的記錄數,再判斷是否賦值,如下:

 select count(*) into 變量A from 表B where 條件;

if 變量A=1 then

   select 字段 into 變量 from 表B where 條件;

end if;

這種方法首先是要對表進行兩次檢索,其實是寫起來比較麻煩.

那么可以采用以下這種方法解決:

select b.字段 into 變量

from dual a left join 表B b on b.條件

這種方法使用dual表讓代碼變得簡單一些.但是如果表B中有多條記錄,還是報錯的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM