2012-03-11 26 views
2

我是新來的,想知道有沒有人可以給我一些幫助/想法。創建表格視圖並限制訪問時間

我創建一個視圖如下:

CREATE VIEW V_ORDERS 
AS 
SELECT ORDERNUMBER, 
     CUSTOMERNUMBER, 
     DATEORDERPLACED, 
     DELIVERYINSTRUCTION, 
SCHEDULEID 
FROM ORDERS 

,所以我授予訪問sumone如下:

GRANT ALL ON V_ORDERS TO "SUMONESPACE" 

,但我想限制訪問表的工作時間9 :00am至6:00 pm

謝謝你提前

+1

您正在使用哪些DBMS? (PostgreSQL,Oracle,DB2,...) – 2012-03-11 23:16:26

回答

6

如果沒有別的幫助,你可以還提供一個空表:

CREATE VIEW bla AS 
SELECT blabla 
WHERE HOUR(NOW()) BETWEEN 9 AND 18 

也許你可以添加一個UNION

UNION 
SELECT 'You','should','be','at','home','now!' 
WHERE HOUR(NOW()) NOT BETWEEN 9 AND 18 

細化的第一個想法的:你可以爲連接(如果甲骨文發生創建一個0或1的行視圖計算與每行SYSDATE表達,這可能是比較慢):

CREATE VIEW STAFF_ORDERVIEW_ALLOWED(current_sys_date) AS 
SELECT sysdate 
WHERE SYSDATE BETWEEN trunc(sysdate) + 9/24 AND trunc(sysdate) + 18/24; 

然後你只需加入

CREATE VIEW STAFF_ORDERVIEW_ATHOURS(current_sys_date, ordernumber, customernumber, 
    dateorderplaced, deliveryinstruction, scheduleid) AS 
SELECT sysdate, ORDERNUMBER, CUSTOMERNUMBER, 
    DATEORDERPLACED, DELIVERYINSTRUCTION, SCHEDULEID 
FROM STAFF_ORDERVIEW_ALLOWED 
INNER JOIN ORDERS; 
+0

不錯!雖然我認爲你想在UNION查詢中使用「BETWEEN」而不是「NOT BETWEEN」。另外,在Oracle中,會使用'TO_NUMBER(TO_CHAR(SYSDATE,'HH24'))'而不是'HOUR(NOW())'。 – 2012-03-11 23:32:30

+0

謝謝,修復它,我想。 – biziclop 2012-03-11 23:36:23

+0

嗨感謝您UR幫助,對不起已故的答覆 我設法解決它與一些隊友幫助 CREATE VIEW STAFF_ORDERVIEW_ATHOURS( \t current_sys_date, \t訂單編號, \t CUSTOMERNUMBER, \t dateorderplaced, \t deliveryinstruction, \t scheduleid)AS SELECT \t SYSDATE, \t ORDERNUMBER, \t CUSTOMERNUMBER, \t DATEORDERPLACED, \t DELIVERYINSTRUCTION, \t SCHEDULEID 從接單 WHERE SYSDATE BETWEEN TRUNC(SYSDATE)+ 9/24 AND TRUNC(SYSDATE)+ 18/24; 這就是我們已經與 出來我以爲我會分享答案,以防萬一別人遇到這個問題 – Lax 2012-04-09 12:04:22

相關問題