iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >怎么进行SQL问题的诊断
  • 863
分享到

怎么进行SQL问题的诊断

2024-04-02 19:04:59 863人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关怎么进行sql问题的诊断,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 问题 诊断 用户反应有一个员工不能设置他的考勤月历了。

这篇文章将为大家详细讲解有关怎么进行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问题的诊断就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么进行SQL问题的诊断

本文链接: https://www.lsjlt.com/news/68054.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么进行SQL问题的诊断
    这篇文章将为大家详细讲解有关怎么进行SQL问题的诊断,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 问题 诊断 用户反应有一个员工不能设置他的考勤月历了。...
    99+
    2024-04-02
  • 怎么进行电脑内存诊断
    本篇内容主要讲解“怎么进行电脑内存诊断”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么进行电脑内存诊断”吧!这项是Windows系统中专门针对内存的自检功能,在任务栏的Cortana搜索栏输入...
    99+
    2023-06-28
  • win7系统怎么解决诊断网络提示诊断策略服务未运行问题
    这篇文章主要为大家展示了“win7系统怎么解决诊断网络提示诊断策略服务未运行问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“win7系统怎么解决诊断网络提示诊断策略服务未运行问题”这篇文章吧。...
    99+
    2023-06-28
  • 怎样对Linux进行性能诊断
    这篇文章将为大家详细讲解有关怎样对Linux进行性能诊断,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。当你发现 Linux 服务器上的系统性能问题,在最开始的 1 分钟时间里,你会查看哪些系...
    99+
    2023-06-28
  • mysql中怎么利用performance_schema进行故障诊断
    小编给大家分享一下mysql中怎么利用performance_schema进行故障诊断,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!instrunments:生产者,用于采集mysql中各...
    99+
    2024-04-02
  • PL/SQL中的性能怎么诊断与优化
    在PL/SQL中,性能问题通常可以通过以下方法进行诊断与优化: 使用Explain Plan:使用Oracle数据库的Expla...
    99+
    2024-05-07
    PL/SQL
  • 怎么诊断SQL中library cache: mutex X等待
    这篇文章主要介绍“怎么诊断SQL中library cache: mutex X等待”,在日常操作中,相信很多人在怎么诊断SQL中library cache: mutex X等待问题上存在疑惑,小编查阅了各式...
    99+
    2024-04-02
  • 微软诊断Office问题的内置小工具
    对于很多用户而言,微软Office套装可以说是一款相当重要的软件了。不知经常使用Office的用户有没有遇到过程序崩溃或者其他技术问题,如果遇到了,当时一定很心烦吧?其实,从Office 2007开始,微软就已经在其中内...
    99+
    2023-05-24
    Office问题 内置小工具 内置 问题 工具 Office
  • 怎么用一句SQL解决SQL中断号问题
    这篇文章主要讲解了“怎么用一句SQL解决SQL中断号问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用一句SQL解决SQL中断号问题”吧!名词解释  ...
    99+
    2024-04-02
  • Arthas在线java进程诊断工具怎么用
    这期内容当中小编将会给大家带来有关Arthas在线java进程诊断工具怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。`Arthas` 是 Alibaba 开源的Java诊断工具,深受开发者喜爱。当你...
    99+
    2023-06-25
  • SpringBoot怎么打印mybatis的执行sql问题
    这篇文章主要介绍了SpringBoot怎么打印mybatis的执行sql问题的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot怎么打印mybatis的执行sql问题文章都会有所收获,下面我们一起...
    99+
    2023-07-05
  • Python Logging 模块的错误处理:诊断和解决问题
    引言 Python logging 模块是用于记录应用程序事件和错误的强大工具。然而,当应用程序出现意外行为时,理解和解决 logging 模块中的错误至关重要。本文将探讨如何使用 logging 模块的调试功能诊断和解决常见问题。 使用...
    99+
    2024-02-20
    Python Logging 错误处理 调试 日志记录
  • 微软诊断Office问题的内置小工具有哪些
    这篇文章将为大家详细讲解有关微软诊断Office问题的内置小工具有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。对于很多用户而言,微软Office套装可以说是一款相当重要的软件了。不知经...
    99+
    2023-06-14
  • 如何使用Performance Schema诊断磁盘IO很高的问题
    这篇文章主要介绍如何使用Performance Schema诊断磁盘IO很高的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! --运行基准测试,-w...
    99+
    2024-04-02
  • 60,000 毫秒内对Linux进行性能诊断的示例分析
    这篇文章给大家介绍60,000 毫秒内对Linux进行性能诊断的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。当你发现 Linux 服务器上的系统性能问题,在最开始的 1 分钟时间里,你会查看哪些系统指标呢Ne...
    99+
    2023-06-15
  • 操作系统日志:诊断系统问题的终极指南
    操作系统日志是系统活动的重要记录,可用于诊断问题并解决系统故障。本文提供了一个分步指南,用于有效地使用操作系统日志进行故障排除。 步骤 1:收集日志 确定相关的日志文件:根据遇到的问题,找出可能包含相关信息的特定日志文件。例如,在 L...
    99+
    2024-04-02
  • win7诊断策略服务未运行怎么解决
    这篇“win7诊断策略服务未运行怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“win7诊断策略服务未运行怎么解决”文...
    99+
    2023-06-28
  • 微服务架构中如何进行服务的监控和诊断?
    随着云计算、容器技术和敏捷开发方法的兴起,微服务架构作为一种适应不断变化的业务需求和技术需求的架构模式,受到了越来越多企业的青睐。然而,在微服务架构中,由于服务数量庞大,服务之间的复杂关系也越来越复杂,管理和监控服务变得越来越困难。因此,如...
    99+
    2023-05-18
    微服务架构 服务诊断 服务监控
  • 操作系统日志的艺术:诊断问题的优雅方法
    日志文件类型 常见的操作系统日志文件类型包括: 系统日志:记录与内核相关事件。 应用程序日志:记录应用程序错误和警告。 安全日志:记录安全相关事件,例如登录尝试和访问控制失败。 事件日志:记录所有重大系统事件,例如程序启动和服务停止。 ...
    99+
    2024-04-02
  • PHPStorm+Xdebug进行emote Debug时无法进入断点问题排查
    目录运行环境确认运行Web程序的PHP安装了Xdebug扩展确认Xdebug扩展的版本与PHP版本匹配确认Xdebug配置了有效的参数确认PHPStorm监听的端口是Xdebug中配...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作