亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么進行SQL問題的診斷

發布時間:2021-11-29 15:55:53 來源:億速云 閱讀:162 作者:柒染 欄目:關系型數據庫

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

問題 診斷 用戶反應有一個員工不能設置他的考勤月歷了。補充說明,我們員工上班都是按周一到周五上班,朝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問題的診斷就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

嘉义市| 哈密市| 莱芜市| 通化市| 香港| 德格县| 南宁市| 杭锦旗| 丰原市| 东方市| 郸城县| 都匀市| 通江县| 怀化市| 彰化县| 柳河县| 龙泉市| 晋宁县| 东兴市| 会同县| 普格县| 凌云县| 灵宝市| 桓台县| 博野县| 裕民县| 思茅市| 烟台市| 长春市| 个旧市| 霍邱县| 澳门| 县级市| 阳东县| 桐乡市| 深水埗区| 渝北区| 泗阳县| 天等县| 广西| 唐海县|