zoukankan      html  css  js  c++  java
  • 存储过程关于并发性的问题

    问题概要:

           此存储过程的逻辑是根据用户的选项,插入数据到同一张表里,但是存储过程可能有多人执行,考虑到多人选项不同时,可能造成数据插入混乱,故在插入之前,先查询是否有人在执行这个存储过程,如果有,则返回:请稍后执行,如果无,则根据该用户的选项,输出对应的数据

    遇到的问题:

      1.如何判断此时是否有用户在执行该存储过程;

            2. 动态表在存储过程中查询时无权限

    解决办法:

      1.先po代码:

     v_sql :='select count(nvl(o.sid,0)) from sys.v_$access o,sys.v_$session n  
    where o.sid=n.sid and  o.OBJECT=''PCX_DXTSCX'' and o.owner=''CRMII''  and n.STATUS=''ACTIVE''';
     Execute Immediate v_sql Into v_bz;
    

      1)在此之前用的一种方法是直接取nvl(o.sid,0),但是当插入到v_bz中的值为null时就会报错;

      2)也可以用select into给变量v_bz赋值。

    2.代码

    grant select on sys.v_$session to crmii;
    grant select on sys.v_$access to crmii;
    

      动态视图在存储过程中使用时,需要使用sys重新赋予权限,不然会报错。

    另.因为存储过程中写了异常,导致在测试过程中,常常会不知道错误的原因是什么,此时可以把异常注释掉,重新测试,即可知道存储过程报错的原因

       

  • 相关阅读:
    重装系统后无线网卡问题
    U盘重装系统win7
    移动端高清、多屏适配方案
    javascript闭包
    javascript的this指向
    合作开发,导入MyEclipse项目报错问题
    [LC] 117. Populating Next Right Pointers in Each Node II
    [LC] 443. String Compression
    [LC] 1099. Two Sum Less Than K
    [LC] 149. Max Points on a Line
  • 原文地址:https://www.cnblogs.com/MMMMzoe/p/7262865.html
Copyright © 2011-2022 走看看