BobXie85

执行DDL报错

在oracle存储过程中,默认是可以直接执行DML和DQL的,但是执行CREATE这种的DDL则需要借助EXECUTE IMMEDIATE 

如:

create or replace procedure CREATE_TABLE(CREATE_SQL VARCHAR2) IS
BEGIN
  EXECUTE IMMEDIATE CREATE_SQL; --\'CREATE TABLE T_CREATE_TABLE_1(COLUMN_1 VARCHAR2(50))\'
end CREATE_TABLE;

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

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

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

GRANT CREATE ANY TABLE TO shfdfm
shfdfm:用户名

分类:

技术点:

相关文章:

  • 2021-11-07
  • 2021-07-28
  • 2022-12-23
  • 2021-10-14
  • 2021-10-14
  • 2021-10-14
  • 2021-10-14
猜你喜欢
  • 2021-12-07
  • 2021-10-14
  • 2021-10-14
  • 2021-11-07
  • 2022-12-23
  • 2021-09-26
相关资源
相似解决方案