Oracle标题le数据库提示报错:无法从套接字获取到数据

无法从套接字获取到数据

前因后果----因为服务器迁移需要,新旧环境数据库版本不一致。新数据库版本Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production。旧版本数据库Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production。(4和1的差别。查看数据库版本的语句: select * from v$version;

问题示例:
这个是 执行的sql, 据了解好像是数据库bug,自定义函数( GET_HEADER(‘XXXX’) )无法和order by一起使用

// 注意是 sys 用户下
SELECT * FROM (SELECT originTable.*, ROWNUM rn_0192837465 FROM (select case when nvl(NUM_EXPOSE,'0') <> '0' then to_char(NUM_ILL/NUM_EXPOSE*100,'fm9990.00')||'%' 
       else '-' end as num_lihuan,a.* 
from (
select decode(t.is_over, 'Y', 'XXXX', 'XXXX') as NMISOVER,
       t.is_over,
       t.ID_EVENT,
       t.NO_EVENT,
       t.NM_EVENT_ORG,
       t.NUM_STUDENT,
       t.NUM_TEACHER,
       t.NUM_EVENT_ORG,
       t.NUM_EXPOSE,
       (SELECT COUNT(*) FROM HFM_CASE S WHERE T.ID_EVENT = S.ID_EVENT AND S.IS_DEL = '0') AS NUM_ILL,
       t.DT_ILL_FIRST,
       t.DT_ILL_LAST
 from HFM_EVENT t   where  t.is_del = '0' 
  and 1=1
  and  t.dt_report >= to_date('2021-01-01','yyyy-mm-dd')
  and  t.dt_report <=to_date('2021-04-21','yyyy-mm-dd') 
  and 1=1  
  //   GET_HEADER() 就是这个自定义函数
  and t.org_area LIKE GET_HEADER('5544800') || '%'
  and 1=1
  //  order by  位置
 order by t.dt_add desc) a) originTable  WHERE ROWNUM<11) WHERE rn_0192837465>=1 and rn_0192837465<11;
 

解决方案(导致这个问题的原因有很多种,可能并不是全适用)

这个是代码,把数据库用户切换到sys下,执行语句即可( 其实我执行语句之后重启过数据库服务,但是不确定是否需要)。

// 注意是 sys 用户下
alter system set "_optimizer_cost_based_transformation" = off;
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐