oracle在存储过程中执行DDL语句

来源:互联网 发布:波士顿矩阵图案例 编辑:程序博客网 时间:2024/05/17 15:57

     昨晚同事问如何在存储过程中执行DDL语句,整理一下:

    默认情况下,oracle对存储过程是使用所有者权限,也就是说:如果用户B条用A 用户下的存储过程,使用的是A用户的对象权限和系统权限。如果A用户没有权限的话,用户B执 行就会报错。
  所以第一种办法就是授予用户执行存储过程中DDL的权限。
  另一种办法是通过在存储过程中使用authid Current_user来讲存储过程转化为调用者权限。这样每次调用存储过程,都是动态根据调用者的权限构成去判定是否有权限。

eg:create or replace procedure P_TESTAuthid Current_Userisbeginexecute immediate 'create table t (id number)';end P_TEST;/