zoukankan      html  css  js  c++  java
  • Ora-03113Ora-03114与Oracle In 拼接字符串的问题

    刚深入接触Oracle不久(大学里以及刚参加工作时学到的Oracle知识只能算是皮毛),因为之前使用SqlServer有将近两年的时间,对SqlServer相对来说很熟悉,比较而言,Oracle真心很痛苦,脚本编写费力,错误调试费力,哎,各种费力。

    估计各路大神很不屑,甚至鄙视,会说Oracle怎么怎么好。我只是说,Oracle在对待开发者着实不如SqlServer友好,至于性能我不提及。

    最近项目由SqlServer迁移到Oracle下,有很多脚本出现问题需要调整。其中一条诡异的错误,折腾的很郁闷。

    问题大致是这样子的。

    先找出我所在的部门,并可能做其他相应的处理。

    select department from users where username = 'eyuan'
    

    然后找出我部门的任务。

    select taskname from tasks
    where department in ("+myDepartments+")
    

    这个时候就报错了,始终提示ora-03113的错误,然后确认后提示ora-03114。

    网上查找资料后,大家的经验多数是网络的问题,需要配置网络连接参数等,但问题是,查出的部门可能是'a','b','c','d','e',然后我删除几个等又没了问题,感觉和Sql语句有关系,而非网络问题。

    最后终于找到原因,其实是表设计、Sql语句、网络连接三者共同作用的结果。

    我查找了表结构,发现定义了N多没用的索引,然后删除掉后,由原来的'a','b'增加到'a','b','c','d',但到了'e',仍然错误。

    后来把第一个查询部门的语句整合到第二个查询任务的语句中,然后OK了。

    原来Oracle的In语句对于字符串列表变量的处理有一定的玄机。

    所以,对于那些非从表中查询得出的,可以通过select 'a' from dual union select 'b' from dual来处理。  

    哎,Oracle并没有报查询超时的问题,直接报网络连接,不够细致,对于新手来说,确认比较痛苦。  

  • 相关阅读:
    主流配置中心的比较 Spring Cloud Config、Apollo、Nacos
    css进阶之路(一)----Web标准
    hello world
    服务过美国总统竞选的非传统投票UI [解析及DEMO]
    服务过美国总统竞选的非传统投票UI【demo已放出】
    大公司移动前端开发面试题——做转盘[参考代码]
    大公司移动前端开发面试题——做转盘[参考代码已放出]
    【前端杂谈】细数前端优化的化零为整
    前端开发的七宗罪
    CentOS7环境下在/离线安装GCC与GCC-C++
  • 原文地址:https://www.cnblogs.com/mahongbiao/p/3760766.html
Copyright © 2011-2022 走看看