根據用戶名「my_admin可以」時收到的錯誤,我已經成功地創建了一個名爲「通知」表和稱爲「V_NOTIFICATIONS」視圖。在'V_NOTIFICATIONS'視圖中,我已經成功創建了一個觸發器和一個包,它將用戶試圖插入視圖並將其插入到表中。當用戶嘗試在視圖上執行更新和刪除功能時,'V_NOTIFICATIONS'觸發器和程序包也會在表上執行更新和刪除功能。「ORA-01031:權限不夠」插入到一個視圖
我已經這樣做了,在這個項目很多意見,我目前的工作,因爲很多觀點試圖插入一條記錄這個觀點我收到「ORA-01031的時候坐了許多不同的表的頂部,但是:權限不足「的錯誤。
我能夠直接插入使用相同的代碼,在包表,但不是到視圖中。任何幫助,將不勝感激。 這裏是被請求的代碼:
VIEW:(當下面的UNION被註釋的那樣,包運行如預期)
CREATE OR REPLACE FORCE VIEW "MY_ADMIN"."V_NOTIFICATIONS" AS
SELECT N_ID,
NOTIFICATION_TYPE,
CASE WHEN NOTIFICATION_DESC = 'C' THEN 'Copy' ELSE 'Send to' END NOTIFICATION_DESC,
CASE WHEN CONTACT_TYPE = 'D' THEN 'Department' ELSE 'Contact' END CONTACT_TYPE,
A.AU_USER_ID,
A.CONTACT_NAME,
D.DEPARTMENT_ID,
D.DEPT_DESC
FROM NOTIFICATIONS AN,
(SELECT A1.AU_USER_ID,
AU.FIRST_NAME || ' ' || AU.LAST_NAME CONTACT_NAME
FROM APP_USERS_CONTACT_INFO A1,
APPLICATION_USERS AU
WHERE A1.AU_USER_ID = AU.USER_ID
/*UNION
SELECT 0,
NULL
FROM DUAL*/) A,
(SELECT DEPARTMENT_ID,
DESCRIPTION DEPT_DESC
FROM DEPARTMENTS
UNION
SELECT 0 DEPARTMENT_ID,
NULL DEPT_DESC
FROM DUAL) D
WHERE NVL(AN.AU_USER_ID,0) = A.AU_USER_ID
AND NVL(AN.D_DEPARTMENT_ID,0) = D.DEPARTMENT_ID;
PACKAGE:
CREATE OR REPLACE PACKAGE NOTIFICATIONS_PKG AS
PROCEDURE INSERT_NOTIFICATION(P_N_ROW V_NOTIFICATIONS%ROWTYPE);
END NOTIFICATIONS_PKG;
/
CREATE OR REPLACE PACKAGE BODY NOTIFICATIONS_PKG AS
PROCEDURE INSERT_NOTIFICATION(P_N_ROW V_NOTIFICATIONS%ROWTYPE) IS
L_NOTIFICATION_DESC VARCHAR2(1);
L_CONTACT_TYPE VARCHAR2(1);
BEGIN
CASE P_N_ROW.NOTIFICATION_DESC
WHEN 'Copy' THEN
L_NOTIFICATION_DESC := 'C';
ELSE
L_NOTIFICATION_DESC := 'S';
END CASE;
CASE P_N_ROW.CONTACT_TYPE
WHEN 'Department' THEN
L_CONTACT_TYPE := 'D';
ELSE
L_CONTACT_TYPE := 'C';
END CASE;
INSERT INTO NOTIFICATIONS VALUES (
P_N_ROW.N_ID,
P_N_ROW.NOTIFICATION_TYPE,
L_NOTIFICATION_DESC,
L_CONTACT_TYPE,
NVL(P_N_ROW.AU_USER_ID, 0),
NVL(P_N_ROW.DEPARTMENT_ID, 0),
APP_GLOBAL_PKG.GET_AUDIT);
END INSERT_AGREEMENT_NOTIFICATION;
END AGREEMENT_NOTIFICATIONS_PKG;
觸發是設置只是爲了將信息傳遞給此包以插入該行。當試圖運行下面的代碼行我收到ORA-01031錯誤:
INSERT INTO V_AGREEMENT_NOTIFICATIONS VALUES (5781, 'Collateral Request', 'Send to', 'Contact', 797, '797T', 0, null);
是否可以將數據插入視圖?不這麼認爲。 – Tom 2010-06-02 19:49:32
你可以,但只有在某些條件下(例如,視圖不是一對多的連接,或者存在一個不是觸發器的) – MJB 2010-06-02 19:52:36
聽起來像對我來說太複雜了。您是否知道存儲過程封裝了訪問,因此您可以授予執行插入/更新過程的執行權限,以執行操作而不授予對錶的訪問權限? – 2010-06-02 19:55:39