遭遇错误:ORA-01031

简介:
遭遇错误:ORA-01031 insufficient privileges

原因:
 
用户拥有的role权限在存储过程和函数是不可用的,加入Authid Current_User时存储过程和函数可以使      用role权限,否则需要显式进行系统权限,如grant create table to suk;但这种方法太麻烦。
 
解决方法:
 
可以通过的在创建函数、存储过程时的名称后加上”authid current_user“就可以了。

例子:
 
加:AUTHID   CURRENT_USER,否则执行时报:ORA-01031 insufficient privileges
 
存储过程:

 create or replace procedure p_createTempSeq (sequenceName in varchar2)
 AUTHID   CURRENT_USER 
   is 
   strsql varchar2(1000);
   begin 
   strsql := 'create sequence seq_'||sequenceName||' minvalue 10 maxvalue 99 start with 10 increment by 1 nocache';
   execute immediate strsql; 
   commit;   
   end p_createTempSeq;
 
函数:
 
CREATE OR REPLACE FUNCTION f_getSeq  
RETURN varchar2 
authid current_user IS
  tempID varchar2(2);
  testID varchar2(10);  
  strsql varchar2(2000);
BEGIN    
  --建序列器,调上面的存储过程,  这里要注意序列已经存在就先drop
   strsql :='call p_createTempSeq( ''testDefaultValue_test'')';  
   execute immediate strsql;    
   select  seq_testDefaultValue_test.Nextval into tempID    from dual;
   testID := TO_CHAR(SYSDATE, 'YYYYMMDD') ||tempID;
   RETURN (testID); 
END;
 
函数调用方法:
 
 set serveroutput on
  declare
     testID varchar2(10);
  begin
    testID:=  f_getSeq;
    dbms_output.put_line (testID);
  end;
 









本文转自 yuwenhu 51CTO博客,原文链接:http://blog.51cto.com/yuwenhu/146770,如需转载请自行联系原作者
目录
相关文章
|
缓存 Oracle 关系型数据库
重现ORA-01555错误
非常经典的一个一致性快照过旧的错误,Oracle面试必读。
|
SQL Oracle 关系型数据库
|
Oracle 网络协议 关系型数据库
|
SQL 监控 Oracle
新员工培训环境准备中,碰见的两个ORA-600错误
下周要为新员工介绍Oracle数据库,为了让课程更接地气,准备了虚拟机环境,用于实验和练习,在此过程中出现了两个ORA-600的错误,偶然中又有必然,记录于此。
1067 0
|
SQL 监控 Oracle
ORA-600(2662)错误的重现和解决(一)
前两天同事在测试DATA GUARD的时候将主库的ONLINE日志意外覆盖,造成数据库无法打开,采用隐含参数的方法打开又碰到ORA-600错误,最后采用设置EVENTS的方式解决。
1303 0
|
SQL 监控 Oracle
ORA-600(2662)错误的重现和解决(二)
前两天同事在测试DATA GUARD的时候将主库的ONLINE日志意外覆盖,造成数据库无法打开,采用隐含参数的方法打开又碰到ORA-600错误,最后采用设置EVENTS的方式解决。
1336 0