我在单独刷新物化视图时没问题: call DBMS_MVIEW.REFRESH('mv_xx');为啥在存储过程中调用,test存储过程时会提示:ora-01031 权限不足
create or replace procedure pr_mv is
begin
DBMS_MVIEW.REFRESH('mv_xx');
end;

解决方案 »

  1.   

    create or replace procedure pr_mv is 
    begin 
    execute immediate 'call DBMS_MVIEW.REFRESH(''mv_xx'')'; 
    end; 
      

  2.   

    create or replace procedure pr_mv
    authid current_user 
    is
    ...试试这个不知可否
      

  3.   

    先检查你当前用户的权限都有哪些select * from session_privs;把结果发上来看看
      

  4.   

    1,赋予权限,grant call ... to user;2,存储过程里面凡是涉及到ddl语句操作的,都需要用动态sql来解决,如:
    execute immediate 'call DBMS_MVIEW.REFRESH(''mv_xx'')'; 
      

  5.   

    还是出现这个问题:ORA-01031: insufficient privileges谁知道要赋予什么权限啊
      

  6.   


    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
      

  7.   

    create or replace procedure pr_mv 
    authid current_user is 
    begin 
    execute immediate 'call DBMS_MVIEW.REFRESH(''mv_xx'')'; 
    end; 
      

  8.   


    这个可以,为啥要加authid current_user 啊?定义用户和登录用户是同一个啊
      

  9.   


    create or replace procedure pr_mv 
    authid current_user is 
    begin 
    DBMS_MVIEW.REFRESH('mv_xx'); 
    end; 这个也行!
      

  10.   

    建议百度一下authid current_user的作用。
    以执行过程的用户的权限来处理涉及的对象权限,数据库中只创建一个存储过程,所有用户都可以使用,但是每个用户使用的时候只是用自己的权限权限执行,oracle自己的包很多都这样的。
      

  11.   

    Authid Current_User:以执行过程的用户的权限来处理涉及的对象权限.这是典型的,数据库中只创建一个存储过程,所有用户都可以使用,但是每个用户使用的时候 只是用自己的权限权限执行,oracle自己的包很多都这样的。   存储过程默认是用定义者definer 的身份调用的,如果加上AUTHID CURRENT_USER,则用当前登陆的用户权限调用,如果该过程的调用者(而非定义者)被授与系统权限execute any procedure或是被该过程的定义者grant execute on授权的话,不用这个AUTHID CURRENT_USER子句,调用者照样可以使用这个过程。
        另外,在Oracle的存儲過程中,如果涉及到操作不同schema下的對象的時候,可以在不同的schema下寫相同的procedure,但這樣帶來的問題是維護和同步帶來了麻煩,可以在procedure中加上authid current_user,來說明procedure中操作的對象是當前連接用戶的對象而并不是procedure所屬用戶下的對象。