簡體   English   中英

如果我多次使用行限制運行SQL語句,每次都會得到相同的結果嗎?

[英]If I run a SQL statement multiple times with row limit, will I get the same result each time?

鑒於我的陳述保持不變。 給定有15000個可用行,但我對rownum進行了行限制,是否每次都會獲得相同的輸出?

我正在使用的示例SQL:

SELECT distinct 
     TO_CHAR(S.DID), 
     TO_CHAR(S.DPERMCONTAINER), 
     S.DBARCODE, 
     S.DMEDIATYPE, 
     S.DDOCTITLE, 
     S.XCOMMENTS, 
     rm.xcategoryid, 
     s.xdivision, 
     S.XPROJECTNAME, 
     S.XLEGACYPROJECTNAME,
     S.XLABELNOTE, 
     S.XPROJECTENDDATE, 
     S.XEVENTDATE 
FROM 
     PRD64_URMSERVER.EXTITEMS S 
     left join prd64_urmserver.extitemsrm rm on s.did = rm.did 
WHERE 
     S.DMEDIATYPE = 'Folder' 
     AND S.DPERMCONTAINER IN
          (SELECT distinct TO_CHAR(S.DID)
          FROM PRD64_URMSERVER.EXTITEMS S 
          left join DIDV V on s.did = v.did 
          left join prd64_urmserver.extitemsrm rm on s.did = rm.did
          WHERE v.did IS NULL
               and RM.xDerivedIsFrozen = '0' 
               AND s.dmediatype = 'Box' 
               and S.XLABELNOTE = 'DISP: GPO-CRM-US-ATT-20160415-09' 
               and s.xprojectenddate < to_date('05/25/2006', 'mm-dd-yyyy') 
               and rownum <= 5000)
UNION
(SELECT distinct 
     TO_CHAR(S.DID), 
     TO_CHAR(S.DPERMCONTAINER), 
     S.DBARCODE, 
     S.DMEDIATYPE, 
     S.DDOCTITLE, 
     S.XCOMMENTS, 
     rm.xcategoryid, 
     s.xdivision, 
     S.XPROJECTNAME, 
     S.XLEGACYPROJECTNAME,
     S.XLABELNOTE, 
     S.XPROJECTENDDATE, 
     S.XEVENTDATE
FROM 
     PRD64_URMSERVER.EXTITEMS S 
     left join DIDV V on s.did = v.did 
     left join prd64_urmserver.extitemsrm rm on s.did = rm.did
WHERE 
     v.did IS NULL 
          and RM.xDerivedIsFrozen = '0' 
          AND s.dmediatype = 'Box' 
          and S.XLABELNOTE = 'DISP: GPO-CRM-US-ATT-20160415-09' 
          and s.xprojectenddate < to_date('05/25/2006', 'mm-dd-yyyy') 
          and rownum <= 5000);

請讓我知道我能否再詳細一點。

僅當您添加ORDER BY子句時,結果始終處於相同順序。 否則,結果通常以不確定的順序返回,這通常是索引使用或統計的結果。

根據Ask Tom的介紹,您每次不會獲得相同的行。 即使您下訂單也不會。 在對行進行排序之前先對rownum求值。 如果每次都需要相同的行,則需要在子查詢中對其進行排序:

select * from 
(
SELECT distinct 
     TO_CHAR(S.DID), 
     TO_CHAR(S.DPERMCONTAINER), 
     S.DBARCODE, 
     S.DMEDIATYPE, 
     S.DDOCTITLE, 
     S.XCOMMENTS, 
     rm.xcategoryid, 
     s.xdivision, 
     S.XPROJECTNAME, 
     S.XLEGACYPROJECTNAME,
     S.XLABELNOTE, 
     S.XPROJECTENDDATE, 
     S.XEVENTDATE 
FROM 
     PRD64_URMSERVER.EXTITEMS S 
     left join prd64_urmserver.extitemsrm rm on s.did = rm.did 
WHERE 
     S.DMEDIATYPE = 'Folder' 
     AND S.DPERMCONTAINER IN
          (SELECT distinct TO_CHAR(S.DID)
          FROM PRD64_URMSERVER.EXTITEMS S 
          left join DIDV V on s.did = v.did 
          left join prd64_urmserver.extitemsrm rm on s.did = rm.did
          WHERE v.did IS NULL
               and RM.xDerivedIsFrozen = '0' 
               AND s.dmediatype = 'Box' 
               and S.XLABELNOTE = 'DISP: GPO-CRM-US-ATT-20160415-09' 
               and s.xprojectenddate < to_date('05/25/2006', 'mm-dd-yyyy') 
 order by ...)
where rownum <= 5000
UNION
select * from 
(SELECT distinct 
     TO_CHAR(S.DID), 
     TO_CHAR(S.DPERMCONTAINER), 
     S.DBARCODE, 
     S.DMEDIATYPE, 
     S.DDOCTITLE, 
     S.XCOMMENTS, 
     rm.xcategoryid, 
     s.xdivision, 
     S.XPROJECTNAME, 
     S.XLEGACYPROJECTNAME,
     S.XLABELNOTE, 
     S.XPROJECTENDDATE, 
     S.XEVENTDATE
FROM 
     PRD64_URMSERVER.EXTITEMS S 
     left join DIDV V on s.did = v.did 
     left join prd64_urmserver.extitemsrm rm on s.did = rm.did
WHERE 
     v.did IS NULL 
          and RM.xDerivedIsFrozen = '0' 
          AND s.dmediatype = 'Box' 
          and S.XLABELNOTE = 'DISP: GPO-CRM-US-ATT-20160415-09' 
          and s.xprojectenddate < to_date('05/25/2006', 'mm-dd-yyyy') 
order by ...)
where rownum <= 5000;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM