oracle 變數賦值

2022-07-01 07:18:13 字數 780 閱讀 4475

在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...