我需要编写一个触发器,防止在星期五下午5点到星期一上午9点之间插入。
我认为我需要从sysdate中提取日期/时间并按照
的方式做一些事情。if
extract (day from sysdate) =>5
AND extract (hour from sysdate) =>17
AND extract (day from sysdate) =< 1
AND extract (hour from sysdate) =<9
THEN
...
如果这可能会走错路,请告诉我。
我觉得令人沮丧的是,我对“指定星期几之间”的搜索结果毫无结果,也许有人可以建议更好的搜索方法?
答案 0 :(得分:6)
我会尝试:
IF TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) > 516 OR
TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) < 109 THEN
甚至只是
IF NOT TO_NUMBER( TO_CHAR( SYSDATE, 'DHH24' ) ) BETWEEN 109 AND 516 THEN
您需要注意D
的值,即星期几取决于本地日历,因此例如一周的第一天可能是星期日或星期一。检查您的NLS设置。
答案 1 :(得分:1)
就个人而言,我可能会将其划分为三个更容易编码的范围。
if( -- Disallow all day Sat & Sun
to_char( sysdate, 'fmDay' ) in ('Saturday', 'Sunday') )
or ( to_char( sysdate, 'fmDay' ) = 'Friday'
and extract( hour from sysdate ) >= 17) -- Disallow on Friday after 5
or ( to_char( sysdate, 'fmDay' ) = 'Monday'
and extract( hour from sysdate ) < 9) -- Disallow on Monday before 9
)
then
这假定您的NLS设置始终设置为英语。你可以使它更通用,但它开始变得更复杂,因为不同的国家在不同的日子开始一周,所以1可能是星期一或星期日。
答案 2 :(得分:0)
这是执行作业的触发器,不依赖于NLS设置:
$rootScope.hasAccess = function (type) {
if ($rootScope.me && $rootScope.me.groups) {
return $rootScope.me.groups.filter(function (group) {
return group.id === type;
}).length > 0;
} else {
console.log(type + ' cannot be verified. $rootScope.me has not been set');
}
};
$rootScope.hasAdminAccess = $rootScope.hasAccess('admin');
如果有人想知道,格式说明符'IW'是ISO 8601 Week - 一种始终在星期一开始的星期类型。