zoukankan      html  css  js  c++  java
  • Oracle执行存储过程报错——ora-01031:权限不足

    执行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:用户名
  • 相关阅读:
    max_element( )
    dp
    dfs
    dp
    区间dp
    树形dp
    dp-最长回文串
    go 结构体函数
    go 结构体初始化
    Golang数组和切片的区别
  • 原文地址:https://www.cnblogs.com/BobXie85/p/9831532.html
Copyright © 2011-2022 走看看