环境:windowsxp +oracle 10r2
用户 user1,user2
其中 user1 是dba的权限,并且已经手动由 sys给user1 grant create,select,alter,drop等的相关权限
     user2只是普通的用户
user2中有两张表 
create table ta(aa int) ;
create table tb(bb int) ;
现在user1想在user2.ta上建立触发器
create or replace trigger tri
AFTER INSERT OR DELETE OR UPDATE ON user2.ta
FOR EACH ROW
DECLARE
    v_status INT;
    v_sql_command VARCHAR2(4000);
BEGIN
 IF INSERTING THEN
  SELECT :NEW.aa INTO v_status FROM dual;
  v_sql_command:=' INSERT INTO user2.tb(b1)VALUES('||v_status||')';
  EXECUTE IMMEDIATE v_sql_command;
 END IF;END tri;
编译成功,但执行报错。
ORA-00942: 表或视图不存在
ORA-06512: 在 "user1.tri", line 9
ORA-04088: 触发器 'user1.tri' 执行过程中出错  thanks

解决方案 »

  1.   

    在user1用户下select * from user2.tb可以查询到数据吗
    可以利用dbms_output.put_line(v_sql_command);然后在sqlplus下执行看看是否可以
      

  2.   

    通过user1 ,在sqlplus中 select * from user2.ta/tb;insert into user2.ta/tb;
    都没有问题,可以正常运行
      

  3.   

    v_sql_command:=' INSERT INTO user2.tb(bb)VALUES('||to_char(v_status)||')'; 
      

  4.   

    问题解决,权限的问题。user1 虽然是dba的roles ,但必须由sys手动grant user2里的权限给user1,
    因为trigger内的角色权限默认是无。