【问题标题】:Creating a VIEW that RESTRICTS user access to certain hours创建一个限制用户访问特定时间的视图
【发布时间】:2012-04-04 12:50:46
【问题描述】:

我正在尝试执行以下查询 “创建一个视图,将员工用户对订单表的访问限制在 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'

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

【问题讨论】:

  • 好吧,你好像少了一个',就一个。
  • 可以澄清一下。这种听起来像是大学/研究生院的数据库作业。问题:员工用户如何在个人帐户或共享用户帐户下连接到数据库?订单表是否属于某个共享用户帐户?什么是“适当的权限”?

标签: sql database oracle sqlplus


【解决方案1】:

试试这个:

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。

【讨论】:

  • A- 我不相信你想要NOT。如果时间在上午 9 点之前或下午 6 点之后,您希望查询返回 0 行。
  • 比你,上面的代码有效。谢谢大家的热心帮助,非常感谢。
  • 很高兴我能帮上忙。如果它解决了您的问题,请接受我的回答,这是感谢 SO 上的人们的最佳方式。 :)
  • 投票按钮下方应该有一个空心检查,您可以点击,查看更多信息:meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 2019-08-18
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多