【问题标题】:Sybase ASE Stored PrecedureSybase ASE 存储过程
【发布时间】:2014-07-08 15:24:20
【问题描述】:

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

  1. 从表中获取 flag= 'Y' 和 status = != 'PROCESSED' 的所有行
  2. 从第 1 步更新行,设置 status = 'PROCESSED'

我想这样做是因为这个 SP 将每 5 分钟从我的 java 程序中调用一次,我不想选择我已经从 SP 返回的行,这就是为什么我需要将它们标记为已处理。

【问题讨论】:

  • 您的问题是什么?请记住,代码帮助请求必须包括您迄今为止为解决问题所做的工作的摘要,以及您在解决问题时遇到的困难的描述。 Stackoverflow Help
  • 您的问题是创建过程还是过程中的 SQL?

标签: stored-procedures sap-ase


【解决方案1】:

这样的?

检索您感兴趣的行。使用 holdlock 关键字来确保在选择和更新之间没有任何东西可以潜入额外的行。锁会一直持有到事务结束。

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

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

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

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    相关资源
    最近更新 更多