执行存储过程执行时,报ORA-01031权限不足

在oracle存储过程中,默认是可以直接执行DML和DQL的,但是执行create 或者 drop 这种的DDL则需要借助EXECUTE IMMEDIATE ···
如下备份表语句

  --按年备份
  SELECT TO_CHAR(SYSDATE, 'YYYY') INTO V_N FROM DUAL;
  V_CREATESQL := 'CREATE TABLE TEXT_' || V_N ||
                 '_T AS SELECT * FROM TEXT';
  EXECUTE IMMEDIATE V_CREATESQL;

当执行该语句时,提示ORA-01031: 权限不足 。该用户已赋予DBA权限。

原因:CREATE TABLE想使用CREATE ANY TABLE权限,而CREATE ANY TABLE权限来自DBA角色,默认情况下,虽然在会话环境中可见,但在存储过程中不可见(无效)。

即:ORACLE默认为定义者权限,定义者权限在存储过程中ROLE无效,需要显式授权。

grant CREATE TABLE to [username];
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值