您的位置:首页 > 数据库 > Oracle

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

2018-01-31 18:12 519 查看

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

描述:

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

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

GRANT CREATE SEQUENCE TO ‘YOUR_USER_NAME’;

修改存储过程,加入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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息