先上代码:
select * from FP_FSXX where ROWID IN (select rowid from (select * from FP_FSXX where fp_zl='P2' and fpzt='0' and NSRSBH='110101201703090' order by SFRQ,FP_QS_HM) where rownum=1) for update实际想解决一个对于结果集先排序,再取第一行并将其上锁的问题。
代码语句可以实现此需求,但是开销较大。
请问各位大神针对这种需求有没有更好的解决办法,或者对此sql语句有没有优化的空间?
数据库白痴跪谢。

解决方案 »

  1.   

    SELECT *
      FROM (SELECT *
              FROM FP_FSXX
             WHERE FP_ZL = 'P2'
               AND FPZT = '0'
               AND NSRSBH = '110101201703090'
             ORDER BY SFRQ
                     ,FP_QS_HM)
     WHERE ROWNUM = 1
       FOR UPDATE看下这样行不。
    感觉你的rowid用了好多遍。。
      

  2.   

    这样不行,for update 不能用到视图上。。
      

  3.   

    找出主键值,以主键值作为条件,按一般查询形式检索数据。
    select empno, ename, job
      from emp 
      where empno = (select empno 
              from (select row_number() over(order by mgr) rn, empno, ename, job
                      from emp)
             where rn = 1)
       for update