在使用存储过程进行建表时,提示没有权限 :ORA-01031: insufficient privileges 如下图所示
存储过程代码如下:
CREATE OR REPLACE PROCEDURE sp_test IS
v_sql VARCHAR2(500);
----------备份表
v_sql := 'create table t_test as select * from user_tables' ;
EXECUTE IMMEDIATE v_sql;
--清空
END;
但是sql命令窗口是能正常执行建表语句的。
找了很久的问题也没发现,终于找到解决办法就是加上 Authid Current_User
CREATE OR REPLACE PROCEDURE sp_test Authid Current_User IS
v_sql VARCHAR2(500);
BEGIN
----------备份表
v_sql := 'create table t_test as select * from user_tables';
EXECUTE IMMEDIATE v_sql;
--清空
END;
完美解决!!!
需要注意的是,如果涉及到嵌套调用,另外一个存过调用包含create table的存过时也需要添加 Authid Current_User。
不然同样不能正常调用。
还发现是不是拥有 SELECT_CATALOG_ROLE 角色可以不用添加 Authid Current_User。