问题描述:
实现功能:动态题库,共三套题,每套十道题目,每次随机选择一套题,
jsp页面:
效果界面:
这段sql在数据库中执行结果:所有代码未变动,在三套环境均中未出现问题,但再另一套却出现了:试题页面会出现0道,10道,20道,30道得情况,但是通过plsql连接这套环境对应的数据库执行 那段代码 确实没有问题的。但是为什么通过jsp再通过db驱动连接数据库执行这段代码就会出现不同情况呢,是驱动问题吗?
解决:
我通过将in 改为了= 在这个出问题的环境上解决了,但是仍然不明白原因。
下面再贴图,图中将’in‘改为了‘=’
为了方面下面附上sql代码:
 SELECT WJ.ID, WJ.TPJ_WJWH_ID, WJ.BH, TK.QDESCRIBE, TK.SANSWER 
 FROM TPJ_WJWH_QUESTIONS WJ, TPJ_TKGL TK 
 WHERE TK.ID = WJ.QID  AND  WJ.TMFZ IS NOT NULL    AND WJ.TPJ_WJWH_ID = 30  and
  wj.tmfz in (select tmfz from (select distinct tmfz from TPJ_WJWH_QUESTIONS where TPJ_WJWH_ID= 30 AND TMFZ IS NOT NULL order by dbms_random.value) where rownum=1)
  ORDER BY WJ.BH
  
为了方便,解释一下其中的字段:WJ.ID :问题的id WJ.TPJ_WJWH_ID:问卷类型的id,这里固定是30;WJ.BH:题目编号;TK.QDESCRIBE:题目; TK.SANSWER :答案;WJ.TMFZ :题目分组(一共1 2 3)三组。大佬们帮忙看下 万分感谢,多套环境所有配置和代码均一致。

解决方案 »

  1.   

    手头上没有orcale环境,没法试验,觉得可能跟null有关系
    LZ试试执行一下,如果 wj.tmfz in (select xxx),子结果集返回null的情况会是什么结果?
      

  2.   

    查一下程序执行时,数据库真正执行的SQL是什么
      

  3.   

    select tmfz
                         from (select distinct tmfz
                                 from TPJ_WJWH_QUESTIONS
                                where TPJ_WJWH_ID = 30
                                  AND TMFZ IS NOT NULL
                                order by dbms_random.value)
                        where rownum = 1
    这个子查询只会查出来1条结果,用in和= 应该是一样的,你看下这段子查询会出现什么问题吧,感觉可能是排序后 rownum = 1取值问题
      

  4.   


    我看了jsp编译的 class文件了 语句是没问题 ,但是具体通过驱动走到数据库是什么不知道怎么查
      

  5.   


    我用编译出来的sql语句再数据库执行了是没有问题的 我把sql的语句打到了前端页面上 然后通过plsql dev 执行 还是没有问题得
      

  6.   


    null的话 界面题目不会出现了