久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么進行SQL問題的診斷

169次閱讀
沒有評論

共計 2243 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇文章將為大家詳細講解有關怎么進行 SQL 問題的診斷,文章內容質量較高,因此丸趣 TV 小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

問題 診斷 用戶反應有一個員工不能設置他的考勤月歷了。補充說明,我們員工上班都是按周一到周五上班,朝 8 晚 5 下班,但也有上三天晚班休息兩天的上班制度,所以要設置
員工的上班制度。而現在不能設置這個員工的上班制度了,那么這個員工也沒法提交加班申請等操作了。而且快到工資結算的時候,如果不能及時提交考勤和加班等信息,就會影響
最后的工資發放。要及時處理這個問題,只好和開發人員一起查找正式系統上的日志。還好和開發人員一起梳理邏輯,很快就找到了可能有問題的 SQL. 但此 SQL 執行正常不知道為什么會查詢出
不需要的員工信息,這是查詢出了這個員工不符合要求,所以系統才刪除了這條不符合邏輯的數據。
這是 DBA 介入調試此 SQL,查找錯誤查詢的原因。發現相關表中存在的數據如下  
SELECT  APPNT_DATE
  ,APPNT_CD
  ,APPNT_SEQ
  ,ACTI_STTS_CD
FROM  MEMP_AP_APPNT_DET
WHERE  ten_id= T01
AND SITE_ID= EZ00
AND EMP_ID = 2F4EE7C0599E11E0B358975729707EA8
AND APPNT_DATE = 20180301

APPNT_DATE  APPNT_CD  APPNT_SEQ ACTI_STTS_CD
20180301  AB  10  AA
20180301  DC  9  DA
20180301  YB  8  AA
而程序會對這個表的 APPNT_SEQ 值求最大值,以此找出這天里員工的最后的狀態值
但 SQL 中的查詢條件是這樣的

AND R.APPNT_DATE||R.APPNT_SEQ = (SELECT MAX(X1.APPNT_DATE||X1.APPNT_SEQ)
  FROM MEMP_AP_APPNT_DET X1
  WHERE X1.TEN_ID = R.TEN_ID
  AND X1.SITE_ID = R.SITE_ID
  AND X1.EMP_ID = R.EMP_ID
  AND X1.APPNT_DATE = 20180329 )
 
一看到 || 還做比較就感覺要出事,趕緊把這段 SQL 拿到生產環境執行了一把。查詢出的數據中有不想要的數據。于是在  R.APPNT_DATE||R.APPNT_SEQ 前面加 TO_NUMBER()
再執行不想要的數據不見了。這說明  R.APPNT_DATE||R.APPNT_SEQ 拼出的結果是字符類型,這種字符類型比較后和數字類型比較是有區別的  
比如 201803019 2018030110 所以最大結果是 201803019 , 而不是 2018030110

最終修改后的 SQL
 
  SELECT N.TEN_ID
  , …
  FROM TTNA_TBS_PERSN_MAS N
  , MEMP_AP_APPNT_DET R — CUR
  , MEMP_AP_APPNT_DET S — PAST
  WHERE N.TEN_ID = T01
  AND N.SITE_ID = EZ00
  AND N.EMP_ID = N.EMP_ID–NVL(null , N.EMP_ID)
  AND N.TEN_ID = R.TEN_ID
  AND N.SITE_ID = R.SITE_ID
  AND N.EMP_ID = R.EMP_ID
  AND R.APPNT_DATE BETWEEN TO_CHAR(TO_DATE( 20180329 , YYYYMMDD)-100, YYYYMMDD ) AND 20180329
  …
  AND TO_NUMBER(R.APPNT_DATE||R.APPNT_SEQ) = (SELECT MAX(TO_NUMBER(X1.APPNT_DATE||X1.APPNT_SEQ)) –update
  FROM MEMP_AP_APPNT_DET X1
  WHERE X1.TEN_ID = R.TEN_ID
  AND X1.SITE_ID = R.SITE_ID
  AND X1.EMP_ID = R.EMP_ID
  AND X1.APPNT_DATE = 20180329 )
  AND TO_NUMBER(R.APPNT_DATE||R.APPNT_SEQ) TO_NUMBER(S.APPNT_DATE||S.APPNT_SEQ)  –update
  AND SUBSTR(NVL(R.ACTI_STTS_CD,), 1, 1) SUBSTR(NVL(S.ACTI_STTS_CD,), 1, 1) — ?? ?? ??
  AND TO_NUMBER(S.APPNT_DATE||S.APPNT_SEQ) = (SELECT MAX(TO_NUMBER(X2.APPNT_DATE||X2.APPNT_SEQ)) –update
  FROM MEMP_AP_APPNT_DET X2
  WHERE X2.TEN_ID = S.TEN_ID
  AND X2.SITE_ID = S.SITE_ID
  AND X2.EMP_ID = S.EMP_ID
  AND X2.APPNT_DATE R.APPNT_DATE)
  …
總結 比較過程中字符串的比較和數字類型的比較是有很大區別的。這里不用過多的查看業務的邏輯,畢竟生產環境下的 SQL 運行有一定保證,除非在某些特殊情況有一定問題,那么我們關注的是問題的細節,這里就是技術的細節。

關于怎么進行 SQL 問題的診斷就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-17發表,共計2243字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 清远市| 尼玛县| 称多县| 漳平市| 长乐市| 延长县| 尤溪县| 滨州市| 任丘市| 鲁山县| 崇州市| 龙南县| 松潘县| 万山特区| 军事| 嘉鱼县| 海城市| 赤城县| 独山县| 密山市| 荣成市| 松阳县| 洪江市| 马龙县| 保亭| 广德县| 岐山县| 松原市| 濮阳市| 陆丰市| 雷波县| 惠来县| 仙桃市| 万载县| 读书| 太原市| 开远市| 普定县| 临安市| 奉节县| 满洲里市|