2012-03-20 60 views
1

我正在尝试执行以下查询“创建视图,将员工用户访问订单表的时间限制为9:00至18:00之间的工作时间。 权限给员工用户。“创建限制用户访问某个小时的视图

但是我很努力,我迄今采用的是以下几点:

CREATE VIEW STAFF_RESTRICTORDERVIEW AS 
    SELECT TO_CHAR (SYSDATE, 'DD-MM-YYYY HH24:MI:SS'), ORDERNUMBER, CUSTOMERNUMBER, DATEORDERPLACED, DELIVERYINSTRUCTION, SCHEDULEID, 
    FROM ORDERS 
    WHERE STAFF_RESTRICTORDERVIEW (SYSDATE, 'DD-MM-YYYY HH24:MI:SS') NOT BETWEEN 
    (SYSDATE, 'DD-MM-YYYY 09:00:00') AND (SYSDATE, 'DD-MM-YYYY 18:00:00') 

如果上面的代码工作,那么我已经能够添加以下内容:

GRANT SELECT on STAFF_RESTRICTORDERVIEW TO 'STAFF_USER' 

任何帮助,将不胜感激,在此先感谢:)。

+0

那么它看起来像你缺少一个''',一个。 – 2012-03-20 01:32:27

+1

可以使用一些说明。这种听起来像是大学/毕业学校的数据库任务。问题:员工用户如何连接到个人账户或共享用户账户下的数据库?订单表是由某个共享用户帐户拥有的吗?什么是“适当的权限”? – 2012-03-20 02:12:02

回答

3

试试这个:

CREATE VIEW STAFF_RESTRICTORDERVIEW (
    current_sys_date, 
    ordernumber, 
    customernumber, 
    dateorderplaced, 
    deliveryinstruction, 
    scheduleid 
) AS 
SELECT 
    sysdate, 
    ORDERNUMBER, 
    CUSTOMERNUMBER, 
    DATEORDERPLACED, 
    DELIVERYINSTRUCTION, 
    SCHEDULEID 
FROM ORDERS 
WHERE SYSDATE NOT BETWEEN trunc(sysdate) + 9/24 and trunc(sysdate) + 18/24 

我相信,如果你在9:00和18:00之间运行,这将返回一个空的记录。如果您想要相反,只能在这些小时之间得到记录,那么从最后一行删除NOT。

+1

A-我不相信你想要'NOT'。如果时间早于上午9点或下午6点,您希望查询返回0行。 – 2012-03-20 02:25:24

+0

比你,上面的代码工作。谢谢大家的亲切帮助,非常感谢。 – user1279780 2012-03-21 00:29:18

+0

很高兴我能帮到你。如果它解决了您的问题,请接受我的答案,这是感谢SO上人们的最佳方式。 :) – 2012-03-21 00:40:03