SELECT FOR UPDATE 问题。

[复制链接]
查看11 | 回复5 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
CREATE OR REPLACE PROCEDURE SP_GET_DNIS(P_RETURN OUT VARCHAR,P_IN VARCHAR)
AS
--=====================================================
V_RETURN
VARCHAR(24);
V_ID
NUMBER(10);
--=====================================================
BEGIN
--=====================================================

SELECT TELEPHONE,

ID

INTO V_RETURN,

V_ID

FROM TB_COST

WHERE ID = (SELECT MIN(ID) FROM TB_COST WHERE ISOK = 0 )

ORDER BY STATUS,NO_COUNTFOR UPDATE NOWAIT ;

[/COLOR]

UPDATETB_COST

SETISOK = 1

WHEREID = V_ID ;



[/COLOR]
P_RETURN :=LTRIM(RTRIM(V_RETURN))||';'||TO_CHAR(V_ID);



COMMIT;
--=====================================================
EXCEPTION
WHEN OTHERS THEN
P_RETURN := '0';
--=====================================================
END;
/
ID是流水号主键,ISOK是一个标志位值为0或者1.
假设现在有2个以上用户同时调用这个过程会不会返回同一个结果呢?
我说的同时是指精确到毫秒级的时间
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层

回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
奇怪,即使是同时,也会分先后的!若是同一记录,
第一次被FOR UPDATE 之后,未COMMIT或ROLLBACK之前是
不会在被FOR UPDATE的!
只能等待!不管毫秒还是微秒!
至于会不会返回同一个结果,那就看具体情况!
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
不管多快,也要有个先后顺序。
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
最初由 ZALBB 发布
[B]奇怪,即使是同时,也会分先后的!若是同一记录,
第一次被FOR UPDATE 之后,未COMMIT或ROLLBACK之前是
不会在被FOR UPDATE的!
只能等待!不管毫秒还是微秒!
至于会不会返回同一个结果,那就看具体情况! [/B]

其他用户执行相同的查询时会等待当前查询的结束?
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
ZALBB 发表于 2003-9-15 18:53
奇怪,即使是同时,也会分先后的!若是同一记录,
第一次被FOR UPDATE 之后,未COMMIT或ROLLBACK之前是
不 ...

select for update 精确到微秒以后 或者更小的时间,
会不会两个session 同时读到同一行?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行