温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

2011-11-25 包的初始化

发布时间:2020-08-11 14:06:25 来源:ITPUB博客 阅读:195 作者:hanaka 栏目:关系型数据库

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. 其他写法都是“静态”的,不能取到当前时间。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI