我是Oracle的新手,我有兩個用於高頻的功能。我想知道他們之間哪個更好。我應該在函數中使用異常而不是計數(*)嗎?
這一個:
FUNCTION GET_MY_MONEY (myType IN NUMBER) RETURN NUMBER AS
var_amount NUMBER;
var_result NUMBER;
BEGIN
var_result := 0;
var_amount := 0;
SELECT amount INTO var_amount FROM mytable WHERE type = myType AND sysdate >= date_from AND sysdate <= date_to;
var_result := var_amount*1000;
RETURN var_result;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
或者這一個:
FUNCTION GET_MY_MONEY (myType IN NUMBER) RETURN NUMBER AS
var_count NUMBER;
var_amount NUMBER;
var_result NUMBER;
BEGIN
var_result := 0;
var_count := 0;
var_amount := 0;
SELECT count(*) INTO var_count FROM mytable WHERE type = myType AND sysdate >= date_from AND sysdate <= date_to;
IF (var_count > 0) THEN
SELECT amount INTO var_amount FROM mytable WHERE type = myType AND sysdate >= date_from AND sysdate <= date_to;
var_result := var_amount*1000;
RETURN var_result;
ELSE RETURN 0; END IF;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
這是獲得更好的性能?當它們被調用時返回速度更快?
在此先感謝。
一號做法是更好的,當記錄的數量都非常高。因爲count(*)是一個沉重的操作 – 2013-04-26 05:55:25
我會用第一種方法。我認爲你對使用的變量感到困惑。 var_count沒有在第一個聲明,你沒有在第二個中使用var_amount。 – Noel 2013-04-26 05:57:12
這是我在拼寫錯誤。感謝您的指出。 – PhatHV 2013-04-26 06:01:34