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

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

描述:

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

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

GRANT CREATE SEQUENCE TO ‘YOUR_USER_NAME’;

  1. 修改存储过程,加入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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值