是这样的,小弟想通过ORALC来发送邮件,上网络上找一高人suk所写的存储过程PROCSENDEMAIL来使用,手工执行该存储过程是没有问题(当然是指小弟给用户赋权之后),但是在触发器中应用却不行.左查右查,发现应该是调用时的权限问题.理由如下:
我建立两个存储过程A和B,分别调用PROCSENDEMAIL,结果A成功,B失败.
A存储过程:
CREATE PROCEDURE p_test AUTHID CURRENT_USER IS
BEGIN
PROCSENDEMAIL('Data files','Case data from arcsight(7JxxolCMBABCvkTY6LSWNag==)','[email protected]','[email protected]','mail.trusts.cpcnet.com','25','0','','','/tmp/utl_file/Case_Info_7JxxolCMBABCvkTY6LSWNag==.csv','bit 7');
END p_test;
结果,执行成功.SQL> exec p_test;
PL/SQL procedure successfully completed.
SQL>
B存储过程:CREATE PROCEDURE p_test IS
BEGIN
PROCSENDEMAIL('Data files','Case data from arcsight(7JxxolCMBABCvkTY6LSWNag==)','[email protected]','[email protected]','mail.trusts.cpcnet.com','25','0','','','/tmp/utl_file/Case_Info_7JxxolCMBABCvkTY6LSWNag==.csv','bit 7');
END p_test;结果,执行失败.SQL> exec p_test
BEGIN p_test; END;*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "TEST_USER.PROCSENDEMAIL", line 325
ORA-06512: at "TEST_USER.P_TEST", line 3
ORA-06512: at line 1到此,小弟大胆推测是在执行时,调用另一存储过程的"用户"(不知道这样理解对不对)没有足够的权限所导致.所以小弟想在此问以下问题:
1. 系统执行触发器,或在存储过程中调用其他存储过程时,默认的用户(指不使用AUTHID CURRENT_USER的情况下)是哪个??
2. AUTHID CURRENT_USER 能用在触发器上么??貌似不能用啊??

解决方案 »

  1.   

    其实也没什么,刚想起我的触发器和存储过程是在用户A下创建,监视用户B下的表,所以建触发器时制定了SCHEMA,也就是SCHEMA级的触发器,虽然说我给用户A赋予了资源的访问权限,但是用户B并没有赋权。所以可能会出现这个问题..........不过也只是猜想,现在还没解决上面所说的,为什么A存储过程能正确执行,而B存储过程则出错??这两个存储过程都是用同一用户所创建的。还是希望各位大哥鼎力相助......
      

  2.   

    呵呵,shiyiwan你的头像不就是专用用来测试是否患上重度网瘾的图片么??呵呵!!听说重度网瘾者一看就知道图片的含义,一张图片中包含多个网站的LOGO片段~~
      

  3.   

    今天也遇到oracle优化问题
    郁闷的不行,六张表一起联合查询,每张表的数据都不下10万,其中有张表最大200多万,头有点大!!
      

  4.   

    最后确定是PROCSENDEMAIL的问题.算了,改用utl_mail去................听说更好用,不想再浪费时间在这里了