您好,登錄后才能下訂單哦!
http://www.itpub.net/thread-1499223-20-1.html
191樓
為了鼓勵訪問者越來越多地使用我們的網站,我們針對他們的活動給予積分。我們的積分計算方法為基本點數和系數的乘積。如果活動發生在 08:00 之前,系數為3; 如果發生在 16:00 之前,系數為2; 其他的系數為1. 這個公式以如下函數實現:
CREATE OR REPLACE FUNCTION plch_multiplier RETURN PLS_INTEGER IS c_hour CONSTANT PLS_INTEGER := TO_NUMBER (TO_CHAR (SYSDATE, 'HH24')) ; BEGIN RETURN CASE WHEN c_hour < 8 THEN 3 WHEN c_hour < 16 THEN 2 ELSE 1 END; END; /
然后我用這個包里的函數為活動計算積分:
CREATE OR REPLACE PACKAGE plch_pkg IS FUNCTION points_for_activity (base_points_in IN INTEGER) RETURN PLS_INTEGER; END; /
先不假設我們的應用程序是狀態相關或者狀態無關,哪些選項實現了包體,使得計算總是正確的?
(A)
CREATE OR REPLACE PACKAGE BODY plch_pkg IS g_multiplier PLS_INTEGER; FUNCTION points_for_activity (base_points_in IN INTEGER) RETURN PLS_INTEGER IS BEGIN RETURN base_points_in * g_multiplier; END; BEGIN g_multiplier := plch_multiplier(); END; /
(B)
CREATE OR REPLACE PACKAGE BODY plch_pkg IS FUNCTION points_for_activity (base_points_in IN INTEGER) RETURN PLS_INTEGER IS BEGIN RETURN base_points_in * plch_multiplier(); END; END; /
(C)
CREATE OR REPLACE PACKAGE BODY plch_pkg IS g_multiplier PLS_INTEGER; FUNCTION points_for_activity (base_points_in IN INTEGER) RETURN PLS_INTEGER IS BEGIN IF g_multiplier IS NULL THEN g_multiplier := plch_multiplier(); END IF; RETURN base_points_in * g_multiplier; END; END; /
(D)
CREATE OR REPLACE PACKAGE BODY plch_pkg IS g_multiplier PLS_INTEGER := plch_multiplier(); FUNCTION points_for_activity (base_points_in IN INTEGER) RETURN PLS_INTEGER IS BEGIN RETURN base_points_in * g_multiplier; END; END; /
答案在194樓
2011-11-25答案B. 其他寫法都是“靜態”的,不能取到當前時間。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。