Oracle不同的连接查询返回不同的结果(取消提交事务)

时间:2019-02-04 06:35:33

标签: sql oracle

我有2个连接oracle使用相同的查询,但返回不同的结果:

SELECT TO_CHAR(DATE_TIME, 'yyyy-MM-dd hh:mi:ss' ) myDateTime,
t.*
FROM TMI_ISD_AUDIT_TRAIL t
WHERE NVL(USER_ID,'') LIKE '%'
AND NVL(Action,'') LIKE '%'
AND NVL(success,'') LIKE '%%'
AND TO_CHAR(DATE_TIME, 'yyyy-MM-dd' ) LIKE '%'
AND rownum <100

查询返回1行 enter image description here

查询返回2行 enter image description here

连接1 IP: enter image description here 连接2 IP: enter image description here

1 个答案:

答案 0 :(得分:0)

通过Oracle 12,您可以使用fetch first代替ROWNUM进行订购

  

ROWNUM在ORDER BY之前进行求值,而不是应使用ROWNUM。

SELECT TO_CHAR(DATE_TIME, 'yyyy-MM-dd hh:mi:ss' ) myDateTime,
t.*
FROM TMI_ISD_AUDIT_TRAIL t
WHERE NVL(USER_ID,'') LIKE '%'
AND NVL(Action,'') LIKE '%'
AND NVL(success,'') LIKE '%%'
AND TO_CHAR(DATE_TIME, 'yyyy-MM-dd' ) LIKE '%'
ORDER BY TO_CHAR(DATE_TIME, 'yyyy-MM-dd hh:mi:ss' )
FETCH FIRST 100 ROWS ONLY;
  

fetch first子句可以根据需要与结果offset子句结合使用,它限制了结果集中返回的行数。通常,与第一个ORDER BY子句结合使用时,fetch first子句有时仅可用于从其他较大的结果集中检索几行。使用此子句可以提高效率。另外,它可以使应用程序的编程更简单。