oracle-存储过程提⽰ORA-01031:权限不⾜
⽤户具有dba权限,但在执⾏⼀个存储过程时提⽰“ORA-01031: 权限不⾜”,该过程中存在动态SQL“execute immediate。。。”正是这⾥报的错误。
1、ORACLE默认为定义者权限,定义者权限在存储过程中ROLE⽆效,需要显⽰授权。
2、如果使⽤AUTHID CURRENT_USER关键字使⽤调⽤者权限,则编译时ROLE⽆效,运⾏时有效。
解决办法:
⽅法1:就这个存储过程来说,CREATE TABLE想使⽤CREATE ANY TABLE权限,⽽CREATE ANY TABLE权限来⾃DBA⾓⾊,默认情况下,虽然在会话环境中可见,但在存储过程中不可见(⽆效)。
所以根据上⾯的第⼀条规则,可以显⽰地将CREATE ANY TABLE权限授予cog就可以了,即oracle手动调用存储过程
GRANT CREATE ANY TABLE TO COG;
⽅法2:采⽤调⽤者权限,由于过程中使⽤动态SQL,所以可以避开编译时的检查,但在运⾏时DBA⾓⾊⽣效,即
CREATE OR REPLACE PROCEDURE INSERT_DATA --插⼊user_客户ID,套餐表,客户宽表
(RTN_ID OUT NUMBER, --返回错误ID
RTN_STR OUT VARCHAR --返回错误叙述
) AUTHID CURRENT_USER IS
...................