sM你是对的,似乎不太普遍。甲骨文和Postgresql都有,除此之外我真的不知道。我猜存储过程的使用可能也不是一个选项,但我真的很喜欢这种情况下的存储过程,因为它能够将api从实现中分离出来。应用程序只显示“getNext”,存储的进程使用它自己的语言特
sM你是对的,似乎不太普遍。甲骨文和Postgresql都有,除此之外我真的不知道。我猜存储过程的使用可能也不是一个选项,但我真的很喜欢这种情况下的存储过程,因为它能够将api从实现中分离出来。应用程序只显示“getNext”,存储的进程使用它自己的语言特,sql,priority-queue,Sql,Priority Queue,sM你是对的,似乎不太普遍。甲骨文和Postgresql都有,除此之外我真的不知道。我猜存储过程的使用可能也不是一个选项,但我真的很喜欢这种情况下的存储过程,因为它能够将api从实现中分离出来。应用程序只显示“getNext”,存储的进程使用它自己的语言特性来确定要做什么。DB2的更高版本可以从新表中选择(更新…)-但是,iSeries版本(我想只有zSeries、LUW)上不存在这种情况。此外,根据作业在系统中的预期停留时间,清理作业可能无法确定要解锁的实例。 CREATE TABLE tes
sM你是对的,似乎不太普遍。甲骨文和Postgresql都有,除此之外我真的不知道。我猜存储过程的使用可能也不是一个选项,但我真的很喜欢这种情况下的存储过程,因为它能够将api从实现中分离出来。应用程序只显示“getNext”,存储的进程使用它自己的语言特性来确定要做什么。DB2的更高版本可以
从新表中选择(更新…
)-但是,iSeries版本(我想只有zSeries、LUW)上不存在这种情况。此外,根据作业在系统中的预期停留时间,清理作业可能无法确定要解锁的实例。
CREATE TABLE test (
id int PRIMARY KEY,
priority int,
status int
)
try = 0;
while(try++ < max_tries) {
result = query("SELECT id FROM test WHERE status=0 ORDER BY priority LIMIT 0,1");
if(result not empty) {
/* found a row, try to update */
result2 = query("UPDATE test SET status=1 WHERE id={result[id]} AND status=0");
if(affected_rows(result2) > 0) {
/* if update worked fine, we can use this ID */
return result[id];
}
/* otherwise try again */
}
return NULL;