Sybase ASE存储过程

时间:2014-07-08 15:24:20

标签: stored-procedures sybase-ase

我想编写一个存储过程,需要执行以下步骤

  1. 从表格中获取所有行,其中flag =' Y'和status =!=' PROCESSED'
  2. 更新第1步中的行,设置status =' PROCESSED'
  3. 我想这样做是因为这个SP将从我的java程序每隔5分钟被调用一次,我不想选择我已经从SP返回的行,这就是为什么我需要标记它们进行处理。

1 个答案:

答案 0 :(得分:0)

这样的东西?

检索您感兴趣的行。使用holdlock关键字确保没有任何内容可以潜入select和更新之间的额外行。锁定一直持续到交易结束。

存储过程使用共享锁执行检索,然后使用update语句将其升级为exclusive。

当事务提交时,锁被释放。

create proc update_status as

begin transaction

select *
    from 
        t1 holdlock
    where 
        flag = 'Y' 
    and status != 'PROCESSED'

update t1 set
        status = 'PROCESSED'
    where
        flag = 'Y'
    and status != 'PROCESSED'

commit
go