有个要求,当往一个表中输入数据的时候,触发器自动的创建和加入数据对应的用户。我开始时在触发器中创建用户的,但是因为不能在触发器中有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;
附代码:
触发器的代码:
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;
解决方案 »
- 不同SID数据库导入导出语句
- oracle 写sql怎么过滤掉系统表
- [forms builder]跳转窗口或者切换文本框,光标总是等待3秒
- 如何使用SQL语句获取存储过程的创建语句?
- 关于sql 8.0 plaus的使用
- 如何查询数据库中有哪些表?谢谢!!---------------------------------急
- windows 下的备份数据,怎么样在 Linux 下恢复?
- SQLPlus中提示“输入太长(>2499个字符)”!
- toad 链接自己建的Oracle数据库无响应不报错
- Oracle两边链接查询,查*比查询具体字段还要快5倍的样子,怎么回事
- oracle数据库开发问题
- 一个很基础的问题
------------------------
请详细说明一下。谢谢了。