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

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

eg:
create or replace procedure P_TEST
Authid Current_User
is
begin
execute immediate 'create table t (id number)';
end P_TEST;
/


Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐