2016-05-26 4 views
0

私の声明は同じままです。利用可能な行は15000ですが、私はrownumで行制限を行います毎回同じ出力が得られますか?SQL文を行制限付きで複数回実行すると、毎回同じ結果が得られますか?

例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); 

私は任意のより詳細なことができる場合は私に知らせてください。

+0

'私は、毎回同じ出力が得られます'あなたが明示的にそれらを注文しない限り、行によって何 –

+2

順序が保証されていません?クエリ – techspider

+1

もまた、各行に一意である必要があります。したがって、あるIDで注文し、同じIDを持つ2つのレコードを持つ場合、それらのレコードは位置を反転する可能性があります。 – Kostya

答えて

3

ORDER BY句を追加すると、結果は常に同じ順序になります。それ以外の場合は、結果が非​​決定的な順序で返されます。これは、インデックスの使用や統計の結果として生じることがよくあります。

+0

お返事ありがとうございます。だから理論的には、もし私が「S.DID ASC」を注文すれば、同じ結果を一貫して得られるはずです。 – Charles

+1

一般的に言えば、新しいレコードが追加または削除されないと仮定すると、 – scsimon

+1

..「S.DID」が「Ask Tom」(http://www.oracle.com/technetwork/issue-archive/)に従ってユニークな –

2

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; 
関連する問題