在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中有多條記錄,還是報錯的
Oracle 過程中變數賦值
create or replace function get sal1 id employees.employee id type return number is sal employees.salary type begin sal 0 select salary into sal from e...
Oracle儲存過程給變數賦值的方法
截止到目前我發現有三種方法可以在儲存過程中給變數進行賦值 1 直接法 如 v flag 0 2 select into 如 假設變數名為v flag,select count into v flag from students 3 execute immediate 變數名 一般是sql的selec...
PHP變數引用賦值與變數賦值變數的區別
變數預設總是傳值賦值。那也就是說,當將乙個表示式的值賦予乙個變數時,整個原始表示式的值被賦值到目標變數。這意味著,例如,當乙個變數的值賦予另外乙個變數時,改變其中乙個變數的值,將不會影響到另外乙個變數。有關這種型別的賦值操作,請參閱表示式一章。foo abc b foo b my name is b...