2011-11-25 包的初始化
http://www.itpub.net/thread-1499223-20-1.html
191楼
为了鼓励访问者越来越多地使用我们的网站,我们针对他们的活动给予积分。我们的积分计算方法为基本点数和系数的乘积。如果活动发生在 08:00 之前,系数为3; 如果发生在 16:00 之前,系数为2; 其他的系数为1. 这个公式以如下函数实现:
CREATEORREPLACEFUNCTIONplch_multiplierRETURNPLS_INTEGERISc_hourCONSTANTPLS_INTEGER:=TO_NUMBER(TO_CHAR(SYSDATE,'HH24'));BEGINRETURNCASEWHENc_hour<8THEN3WHENc_hour<16THEN2ELSE1END;END;/
然后我用这个包里的函数为活动计算积分:
CREATEORREPLACEPACKAGEplch_pkgISFUNCTIONpoints_for_activity(base_points_inININTEGER)RETURNPLS_INTEGER;END;/
先不假设我们的应用程序是状态相关或者状态无关,哪些选项实现了包体,使得计算总是正确的?
(A)
CREATEORREPLACEPACKAGEBODYplch_pkgISg_multiplierPLS_INTEGER;FUNCTIONpoints_for_activity(base_points_inININTEGER)RETURNPLS_INTEGERISBEGINRETURNbase_points_in*g_multiplier;END;BEGINg_multiplier:=plch_multiplier();END;/
(B)
CREATEORREPLACEPACKAGEBODYplch_pkgISFUNCTIONpoints_for_activity(base_points_inININTEGER)RETURNPLS_INTEGERISBEGINRETURNbase_points_in*plch_multiplier();END;END;/
(C)
CREATEORREPLACEPACKAGEBODYplch_pkgISg_multiplierPLS_INTEGER;FUNCTIONpoints_for_activity(base_points_inININTEGER)RETURNPLS_INTEGERISBEGINIFg_multiplierISNULLTHENg_multiplier:=plch_multiplier();ENDIF;RETURNbase_points_in*g_multiplier;END;END;/
(D)
CREATEORREPLACEPACKAGEBODYplch_pkgISg_multiplierPLS_INTEGER:=plch_multiplier();FUNCTIONpoints_for_activity(base_points_inININTEGER)RETURNPLS_INTEGERISBEGINRETURNbase_points_in*g_multiplier;END;END;/
答案在194楼
2011-11-25答案B. 其他写法都是“静态”的,不能取到当前时间。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。