我写了一个存储过程在sys下,可以用sys用户用call关键字调用,如call sys.writeblob()
不过我切换到其它用户下的时候,再这么调用就提示表或视图不存在错误,不是权限问题,因为另外一个用户也是DBA身份的。
请教该如何调用其他用户声明的存储过程。

解决方案 »

  1.   

    你把你的存储过程里用到的对象前面都加上User.object的形式.
    比如A用户下table1就写成A.table1代替table1
      

  2.   

    不是DBA就能执行SYS的过程。以SYS登录,执行grant execute on writeblob() to username;
      

  3.   

    SQL> show user
    USER 为 "SYS"
    SQL> create user acmilan identified by acmilan;用户已创建。SQL> grant dba to acmilan;授权成功。SQL> create or replace procedure test is
      2  begin
      3    NULL;
      4  end test;
      5  /过程已创建。SQL> call sys.test();调用完成。SQL> conn acmilan/acmilan@test
    已连接。
    SQL> show user
    USER 为 "ACMILAN"
    SQL> select count(*) from scott.emp;  COUNT(*)
    ----------
            14SQL> call sys.test();
    call sys.test()
             *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在
    SQL> conn sys/top10@test as sysdba
    已连接。
    SQL> grant execute on test to acmilan;授权成功。SQL> conn acmilan/acmilan
    ERROR:
    ORA-12560: TNS: 协议适配器错误
    警告: 您不再连接到 ORACLE。
    SQL> conn acmilan/acmilan@test
    已连接。
    SQL>  call sys.test();调用完成。SQL> show user
    USER 为 "ACMILAN"
    SQL> call sys.test();调用完成。SQL> exit
      

  4.   

    将里边的表用user.tablename限定