程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> oracle-Oracle函數問題,誰能解答一下?

oracle-Oracle函數問題,誰能解答一下?

編輯:編程綜合問答
Oracle函數問題,誰能解答一下?

create or replace function getsal
(
v_job emptype.etype%type
)
return number
as
cursor c_emp is select salary from emptype where etype = v_job;
v_emp c_emp%rowtype;
v_sal emptype.salary%type := 0;
v_sal_sum emptype.salary%type;
begin
open c_emp;
loop
fetch c_emp into v_emp;
exit when c_emp%notfound;
v_sal := v_sal +v_emp.salary;
end loop;
select sum(salary) into v_sal_sum from emptype;
v_sal := v_sal/v_sal_sum;
return v_sal;
end getsal;
/

variable per number;
execute :per:=getsal('CLERK');
print per;

以上代碼中注意以下2行:
v_sal emptype.salary%type := 0;
v_sal_sum emptype.salary%type;
該例子是我從書上看的,
為什麼v_sal需要初始化為0而v_sal_sum不需要?
我試過如果v_sal不初始化為0,則per值不會有輸出,求解釋原因

最佳回答:


首先說明:
定義一個變量不管在使用之前必須要初始化。這是編寫的規范和你代碼可靠性問題,不要依賴任何隱性轉換或者存在幻想。
——————————————————————————————————————————

解釋:
第一個不初始化在你函數的執行體中運算一直是NULL(open游標沒有取到值,你可以實驗一個取到值的計算)
在進行除法運算的時候null除以任何值都等於null(也就是啥也沒有)。0/任何數都等於0,所以返回0

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved