版权声明:。。。 https://blog.csdn.net/JerryITGO/article/details/79220598
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;