1. 执行DDL报错
在oracle存储过程中,默认是可以直接执行DML和DQL的,但是执行CREATE这种的DDL则需要借助EXECUTE IMMEDIATE ···了,如下备份表语句
当执行该语句时,提示 ORA-01031: 权限不足。该用户已赋予DBA权限。
原因:CREATE TABLE想使用CREATE ANY TABLE权限,而CREATE ANY TABLE权限来自DBA角色,默认情况下,虽然在会话环境中可见,但在存储过程中不可见(无效)。
即:ORACLE默认为定义者权限,定义者权限在存储过程中ROLE无效,需要显式授权。
GRANT CREATE ANY TABLE TO yfk;
执行上面sql显式授权后,在该用户下通过 EXECUTE IMMEDIATE 执行CREATE语句即可成功创建表。