有个要求,当往一个表中输入数据的时候,触发器自动的创建和加入数据对应的用户。我开始时在触发器中创建用户的,但是因为不能在触发器中有commit或者rollback之类的动作,所以把创建用户的动作写为了一个存储过程,但是,还是有问题,提示权限不够。各位有明白的给个答案啊。很着急的。
附代码:
触发器的代码:
create or replace trigger INST_OCT_ACC_PRSN_TR
after insert or update or delete on oct_acc_prsn
for each row
declare
instID varchar2(50);
sqlText1 varchar2(200);
sqlText2 varchar2(200);
begin
if inserting then
instID := trim(:new.prsn_lg_id);
if instID IS NOT NULL THEN
OCT_ACC_PRSN_PR(instID,instID);
end if;
end if;
end INST_OCT_ACC_PRSN_TR;
存储过程的代码:
create or replace procedure OCT_ACC_PRSN_PR(userName varchar2, userPW varchar2) authid current_user is pragma autonomous_transaction;
begin
declare
sqlText1 varchar2(200);
sqlText2 varchar2(200);
begin
sqlText1 := 'create user ' ¦ ¦ userName ¦ ¦ ' identified by ' ¦ ¦ userPW ;
sqlText2 := 'grant connect to ' ¦ ¦ userName;
execute immediate sqlText1;
execute immediate sqlText2;
end;
end OCT_ACC_PRSN_PR;
现在这种写法会报出ora-01031的错误。请大家给个解决方法。谢谢了!好着急呀。
如果是权限不够的话,我把存储过程中的用户名和密码都写成固定的值,单纯执行存储过程,是可以创建用户的。这个怎么解释呢?
附代码:
触发器的代码:
create or replace trigger INST_OCT_ACC_PRSN_TR
after insert or update or delete on oct_acc_prsn
for each row
declare
instID varchar2(50);
sqlText1 varchar2(200);
sqlText2 varchar2(200);
begin
if inserting then
instID := trim(:new.prsn_lg_id);
if instID IS NOT NULL THEN
OCT_ACC_PRSN_PR(instID,instID);
end if;
end if;
end INST_OCT_ACC_PRSN_TR;
存储过程的代码:
create or replace procedure OCT_ACC_PRSN_PR(userName varchar2, userPW varchar2) authid current_user is pragma autonomous_transaction;
begin
declare
sqlText1 varchar2(200);
sqlText2 varchar2(200);
begin
sqlText1 := 'create user ' ¦ ¦ userName ¦ ¦ ' identified by ' ¦ ¦ userPW ;
sqlText2 := 'grant connect to ' ¦ ¦ userName;
execute immediate sqlText1;
execute immediate sqlText2;
end;
end OCT_ACC_PRSN_PR;
现在这种写法会报出ora-01031的错误。请大家给个解决方法。谢谢了!好着急呀。
如果是权限不够的话,我把存储过程中的用户名和密码都写成固定的值,单纯执行存储过程,是可以创建用户的。这个怎么解释呢?
解决方案 »
- 为何ORACLE的查询速度慢于国产数据库
- 在线急等```
- 非常诡异的关于oracle的带参数的sql查询语句,大家进来看看这灵异事件。
- oracle是否有集合的定义
- 急,请高手指教,再线等
- 高分求助存储过程问题!!!
- 在oracle中建立有多个数据库,怎样知道共有哪些库?怎样改变数据库的连接?
- 我的Oracle 9i 的 SQL Plus 为什么登陆不了?
- 关于SQL的查询输出问题
- 从Oracle Linux 7.3安装Oracle 12 R2, 配置完环境变量,无法出现Oracle安装界面
- 请问sys.integer类型是怎么定义的啊? 谢谢各位
- 这段SQL的代码怎么转成Oracle的存储过程呢?大家帮帮忙,解决后马上给分
是不是这个问题呢?
或者是你的trigger没有执行存储过程的权限。
总之查一下权限和角色的赋予情况再说吧。
我试过了,可以创建用户和赋予权限;我调用触发器的用户具有以下权限,你赋予这些权限试试看
connect Y Y
dba Y Y
resource Y Y
create user N
grant any object privilege N
unlimited tablespace Y