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重新赋予权限,不然会报错。

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

       

  • 相关阅读:
    C语言I博客作业02
    C语言II—博客作业01
    学期总结
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    C语言I 博客作业04
    C语言II博客作业04
    C语言II博客作业03
  • 原文地址:https://www.cnblogs.com/MMMMzoe/p/7262865.html
Copyright © 2011-2022 走看看