根据用户名“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