我在单独刷新物化视图时没问题: call DBMS_MVIEW.REFRESH('mv_xx');为啥在存储过程中调用,test存储过程时会提示:ora-01031 权限不足
create or replace procedure pr_mv is
begin
DBMS_MVIEW.REFRESH('mv_xx');
end;
create or replace procedure pr_mv is
begin
DBMS_MVIEW.REFRESH('mv_xx');
end;
begin
execute immediate 'call DBMS_MVIEW.REFRESH(''mv_xx'')';
end;
authid current_user
is
...试试这个不知可否
execute immediate 'call DBMS_MVIEW.REFRESH(''mv_xx'')';
155 ADMINISTER ANY SQL TUNING SET
118 ADMINISTER DATABASE TRIGGER
117 ADMINISTER RESOURCE MANAGER
154 ADMINISTER SQL TUNING SET
145 ADVISOR
31 ALTER ANY CLUSTER
107 ALTER ANY DIMENSION
129 ALTER ANY EVALUATION CONTEXT
34 ALTER ANY INDEX
98 ALTER ANY INDEXTYPE
89 ALTER ANY LIBRARY
77 ALTER ANY MATERIALIZED VIEW
115 ALTER ANY OUTLINE
62 ALTER ANY PROCEDURE
55 ALTER ANY ROLE
141 ALTER ANY RULE
134 ALTER ANY RULE SET
46 ALTER ANY SEQUENCE
153 ALTER ANY SQL PROFILE
20 ALTER ANY TABLE
67 ALTER ANY TRIGGER
83 ALTER ANY TYPE
57 ALTER DATABASE
70 ALTER PROFILE
72 ALTER RESOURCE COST
16 ALTER ROLLBACK SEGMENT
4 ALTER SESSION
1 ALTER SYSTEM
7 ALTER TABLESPACE
13 ALTER USER
73 ANALYZE ANY
144 ANALYZE ANY DICTIONARY
56 AUDIT ANY
2 AUDIT SYSTEM
21 BACKUP ANY TABLE
12 BECOME USER
160 CHANGE NOTIFICATION
24 COMMENT ANY TABLE
30 CREATE ANY CLUSTER
112 CREATE ANY CONTEXT
106 CREATE ANY DIMENSION
79 CREATE ANY DIRECTORY
128 CREATE ANY EVALUATION CONTEXT
33 CREATE ANY INDEX
97 CREATE ANY INDEXTYPE
147 CREATE ANY JOB
88 CREATE ANY LIBRARY
76 CREATE ANY MATERIALIZED VIEW
93 CREATE ANY OPERATOR
114 CREATE ANY OUTLINE
61 CREATE ANY PROCEDURE
140 CREATE ANY RULE
133 CREATE ANY RULE SET
45 CREATE ANY SEQUENCE
156 CREATE ANY SQL PROFILE
37 CREATE ANY SYNONYM
19 CREATE ANY TABLE
66 CREATE ANY TRIGGER
82 CREATE ANY TYPE
42 CREATE ANY VIEW
29 CREATE CLUSTER
49 CREATE DATABASE LINK
105 CREATE DIMENSION
127 CREATE EVALUATION CONTEXT
161 CREATE EXTERNAL JOB
96 CREATE INDEXTYPE
146 CREATE JOB
87 CREATE LIBRARY
75 CREATE MATERIALIZED VIEW
92 CREATE OPERATOR
60 CREATE PROCEDURE
69 CREATE PROFILE
50 CREATE PUBLIC DATABASE LINK
39 CREATE PUBLIC SYNONYM
52 CREATE ROLE
15 CREATE ROLLBACK SEGMENT
139 CREATE RULE
132 CREATE RULE SET
44 CREATE SEQUENCE
3 CREATE SESSION
36 CREATE SYNONYM
18 CREATE TABLE
6 CREATE TABLESPACE
65 CREATE TRIGGER
81 CREATE TYPE
11 CREATE USER
41 CREATE VIEW
124 DEBUG ANY PROCEDURE
123 DEBUG CONNECT SESSION
28 DELETE ANY TABLE
111 DEQUEUE ANY QUEUE
32 DROP ANY CLUSTER
113 DROP ANY CONTEXT
108 DROP ANY DIMENSION
80 DROP ANY DIRECTORY
130 DROP ANY EVALUATION CONTEXT
35 DROP ANY INDEX
99 DROP ANY INDEXTYPE
90 DROP ANY LIBRARY
78 DROP ANY MATERIALIZED VIEW
94 DROP ANY OPERATOR
116 DROP ANY OUTLINE
63 DROP ANY PROCEDURE
53 DROP ANY ROLE
142 DROP ANY RULE
135 DROP ANY RULE SET
47 DROP ANY SEQUENCE
152 DROP ANY SQL PROFILE
38 DROP ANY SYNONYM
22 DROP ANY TABLE
68 DROP ANY TRIGGER
84 DROP ANY TYPE
43 DROP ANY VIEW
71 DROP PROFILE
51 DROP PUBLIC DATABASE LINK
40 DROP PUBLIC SYNONYM
17 DROP ROLLBACK SEGMENT
9 DROP TABLESPACE
14 DROP USER
110 ENQUEUE ANY QUEUE
149 EXECUTE ANY CLASS
131 EXECUTE ANY EVALUATION CONTEXT
103 EXECUTE ANY INDEXTYPE
91 EXECUTE ANY LIBRARY
95 EXECUTE ANY OPERATOR
64 EXECUTE ANY PROCEDURE
148 EXECUTE ANY PROGRAM
143 EXECUTE ANY RULE
136 EXECUTE ANY RULE SET
85 EXECUTE ANY TYPE
137 EXPORT FULL DATABASE
125 FLASHBACK ANY TABLE
59 FORCE ANY TRANSACTION
58 FORCE TRANSACTION
102 GLOBAL QUERY REWRITE
126 GRANT ANY OBJECT PRIVILEGE
74 GRANT ANY PRIVILEGE
54 GRANT ANY ROLE
138 IMPORT FULL DATABASE
26 INSERT ANY TABLE
23 LOCK ANY TABLE
158 MANAGE ANY FILE GROUP
109 MANAGE ANY QUEUE
157 MANAGE FILE GROUP
150 MANAGE SCHEDULER
8 MANAGE TABLESPACE
119 MERGE ANY VIEW
120 ON COMMIT REFRESH
101 QUERY REWRITE
159 READ ANY FILE GROUP
5 RESTRICTED SESSION
121 RESUMABLE
122 SELECT ANY DICTIONARY
48 SELECT ANY SEQUENCE
25 SELECT ANY TABLE
151 SELECT ANY TRANSACTION
104 UNDER ANY TABLE
86 UNDER ANY TYPE
100 UNDER ANY VIEW
10 UNLIMITED TABLESPACE
27 UPDATE ANY TABLE
authid current_user is
begin
execute immediate 'call DBMS_MVIEW.REFRESH(''mv_xx'')';
end;
这个可以,为啥要加authid current_user 啊?定义用户和登录用户是同一个啊
create or replace procedure pr_mv
authid current_user is
begin
DBMS_MVIEW.REFRESH('mv_xx');
end; 这个也行!
以执行过程的用户的权限来处理涉及的对象权限,数据库中只创建一个存储过程,所有用户都可以使用,但是每个用户使用的时候只是用自己的权限权限执行,oracle自己的包很多都这样的。
另外,在Oracle的存儲過程中,如果涉及到操作不同schema下的對象的時候,可以在不同的schema下寫相同的procedure,但這樣帶來的問題是維護和同步帶來了麻煩,可以在procedure中加上authid current_user,來說明procedure中操作的對象是當前連接用戶的對象而并不是procedure所屬用戶下的對象。