您的位置:首页 > 数据库 > Oracle

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

2011-12-21 09:19 597 查看
昨晚同事问如何在存储过程中执行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;
/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: