oracle用存储过程创建序列时权限不足问题

版权声明:。。。 https://blog.csdn.net/JerryITGO/article/details/79220598

oracle用存储过程创建序列时权限不足问题

描述:

  尝试用存储过程动态创建序列时,execute immediate里封装的创建语句会报权限不足的问题,但是直接在PLSQL里执行创建语句不会报这个问题,查找解决方法时发现,原来是在存储过程中ROLE无效,需要显式授权,所以这个问题有两种解决方法:

  1. 管理员登录,通过授权实现

    GRANT CREATE SEQUENCE TO ‘YOUR_USER_NAME’;

  2. 修改存储过程,加入authid current_uer时存储过程可以使用role权限。

另附:第二种方法实现的序列生成器

create or replace procedure sp_seq_creater(
  p_seq_name in varchar2-- 序列号名称
) 
authid current_user --赋予role权限
is
  /*
    name:【序列生成器、重置器】
    notes:根据传入的字符串生成对应名称的序列,
      ***********注意注意注意***************
      当这个 名称的序列已经存在的时候,会重置序列,
      所以要确保传入的序列名:
      1.是不存在的
      2.或可以重置的
    creater:Jerry Wang
    createTime:2018_0131_1747
  */
  my_exception exception;-- 自定义异常
begin
  -- 参数判断
  if p_seq_name is null then 
    raise my_exception;-- 参数异常,名称不能为空
  end if;

  -- 尝试删除序列
  begin
    -- 尝试删除序列(如果有)
    execute immediate 'drop sequence '|| p_seq_name;
  exception
    when others then
    null;
  end;

  -- 尝试创建序列号
  execute immediate 'create sequence '||p_seq_name||'
  minvalue 1
  maxvalue 9999999999999999999999999999
  start with 1
  increment by 1
  cache 20
  order'; 

end sp_seq_creater;

猜你喜欢

转载自blog.csdn.net/JerryITGO/article/details/79220598