ORA-01031: 权限不足

本文介绍了解决在Oracle数据库中执行动态SQL时遇到的ORA-01031权限不足错误的方法。通过在包声明中正确使用authid current_user解决了存储过程调用时的权限问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在我的存储过程中,要执行一条动态sql,将数据插入到另个一用户下的表中。

通过显示授权后,依然报以下错误。

ORA-01031: 权限不足
ORA-06512: 在 line 1
ORA-06512: 在 "RULE_ENGINE.RULE_ENGINE", line 51
ORA-06512: 在 line 2

 

后来想到,在存储过程中加入authid current_user时存储过程可以使用当前用户的role权限,于是就修改为

create or replace package body rule_execute is
  procedure execute_rule(scheme_code varchar2, month_no number) authid current_user is

......

但编译时又报错

PLS-00157:   AUTHID only allowed on schema-level programs

查了下错误原因 An AUTHID clause was specified for a subprogram inside a package or type. These clauses are only supported for top-level stored procedures, packages, and types. 大致意思就是authid只能用在顶级的存储过程、包、类型上,不能用在包或类型的子程序上。

 

于是在包上加入authid,执行正常了。

create or replace package rule_execute
authid current_user
is

...

 

注意:这里是加在了包声明中,而非包体(package body)上。包体上不用加,否则编译时还是报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值