0
我正在使用存储过程从Available_Tickets表中选择一个“随机”行,选择后如果用户喜欢该数字,并购买票据,该行将为从表中删除。PL/SQL过程数据冻结(保留随机抽奖券)
我的过程是这样的:
CREATE OR REPLACE GET_RANDOM_TICKET (RESULT OUT INTEGER) IS
co,mn,mx integer;
BEGIN
SELECT COUNT(ID) , MIN(ID) ,MAX(ID) INTO CO,MN,MX FROM TICKETS;
SELECT TICKET_NUMBER INTO RESULT FROM (
SELECT TICKET_NUMBER
FROM TICKETS WHERE ID >= DBMS_RANDOM(MN,MX)
) WHERE ROWNUM = 1;
END GET_RANDOM_TICKET;
如果用户同意对返回的数所选择的行被删除。 我可以得到一个最坏的情况下,在执行第一个select语句之后,max(id)行被删除吗?
编辑1 ---- 这两个SELECT
语句会不顾表中的变化而看到相同的数据?为什么?
请问您可以在答案中添加一些代码,我希望您注意,删除是在程序之外完成的,所以如果我将其更改为更新,并在程序中选择'for update',那么保持锁? – alibttb
对不起,你不需要删除,你可以将它保存为未来引用的状态,正如我之前提到的,你可以根据你的条件状态来确定票状态 –