<%
String deletesql="delete from selectedcource where  stuSerial = "+stuSerial+"";   
       deletesql=deletesql+"and courseCode not in(select   courseCode from (select s.*,(select count(*) from selectedcource where stuSerial = "+stuSerial+""; 
       deletesql=deletesql+"and courseCode = s.courseCode) isselected, (select openyear from selectedcource where stuserial = "+stuSerial+"";
       deletesql=deletesql+"and courseCode=s.courseCode) openyear, (select isDegree from selectedcource where stuserial = "+stuSerial+""; 
       deletesql=deletesql+"and courseCode = s.courseCode) is_sel_degree from v_trainscheme s where schoolId='"+schoolId+"' and majorId='"+majorId+"' and stutypeid='"+stuType+"' and grade='"+grade+"' order by isdegree desc, typename))";
       DB deletedb = new DB();
       deletedb.executeQuery(deletesql);      
%>出现错误:[08-3-7 16:43:09:062 CST] 5583a84a SystemOut     O delete from selectedcource where  stuSerial = 6241and courseCode not in(select   courseCode from (select s.*,(select count(*) from selectedcource where stuSerial = 6241and courseCode = s.courseCode) isselected, (select openyear from selectedcource where stuserial = 6241and courseCode=s.courseCode) openyear, (select isDegree from selectedcource where stuserial = 6241and courseCode = s.courseCode) is_sel_degree from v_trainscheme s where schoolId='310' and majorId='050201' and stutypeid='02' and grade='2007' order by isdegree desc, typename))
[08-3-7 16:43:09:375 CST] 5583a84a WebGroup      E SRVE0026E: [Servlet 错误]-[数据查询出错ORA-00900: 无效 SQL 语句
出错sql为:delete from selectedcource where  stuSerial = 6241and courseCode not in&#40;select   courseCode from &#40;select s.*,&#40;select count&#40;*&#41; from selectedcource where stuSerial = 6241and courseCode = s.courseCode&#41; isselected, &#40;select openyear from selectedcource where stuserial = 6241and courseCode=s.courseCode&#41; openyear, &#40;select isDegree from selectedcource where stuserial = 6241and courseCode = s.courseCode&#41; is_sel_degree from v_trainscheme s where schoolId=&#39;310&#39; and majorId=&#39;050201&#39; and stutypeid=&#39;02&#39; and grade=&#39;2007&#39; order by isdegree desc, typename&#41;&#41;]:java.sql.SQLException: 数据查询出错ORA-00900: 无效 SQL 语句
出错sql为:delete from selectedcource where  stuSerial = 6241and courseCode not in(select   courseCode from (select s.*,(select count(*) from selectedcource where stuSerial = 6241and courseCode = s.courseCode) isselected, (select openyear from selectedcource where stuserial = 6241and courseCode=s.courseCode) openyear, (select isDegree from selectedcource where stuserial = 6241and courseCode = s.courseCode) is_sel_degree from v_trainscheme s where schoolId='310' and majorId='050201' and stutypeid='02' and grade='2007' order by isdegree desc, typename))
at util.db.DB.executeQuery(DB.java:47)
at org.apache.jsp._edit._jspService(_edit.java:323)
at com.ibm.ws.webcontainer.jsp.runtime.HttpJspBase.service(HttpJspBase.java:89)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:357)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.serviceJspFile(JspServlet.java:675)
at com.ibm.ws.webcontainer.jsp.servlet.JspServlet.service(JspServlet.java:773)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.ibm.ws.webcontainer.servlet.StrictServletInstance.doService(StrictServletInstance.java:110)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet._service(StrictLifecycleServlet.java:174)
at com.ibm.ws.webcontainer.servlet.IdleServletState.service(StrictLifecycleServlet.java:313)
at com.ibm.ws.webcontainer.servlet.StrictLifecycleServlet.service(StrictLifecycleServlet.java:116)
at com.ibm.ws.webcontainer.servlet.ServletInstance.service(ServletInstance.java:283)
at com.ibm.ws.webcontainer.servlet.ValidServletReferenceState.dispatch(ValidServletReferenceState.java:42)
at com.ibm.ws.webcontainer.servlet.ServletInstanceReference.dispatch(ServletInstanceReference.java:40)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:76)
at sys.secure.PageLoginFilter.doFilter(PageLoginFilter.java:40)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
at servlet.SysFilter.doFilter(SysFilter.java:45)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:132)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:71)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.handleWebAppDispatch(WebAppRequestDispatcher.java:939)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:530)
at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:176)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.doForward(WebAppInvoker.java:79)
at com.ibm.ws.webcontainer.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:201)
at com.ibm.ws.webcontainer.cache.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:71)
at com.ibm.ws.webcontainer.cache.invocation.CacheableInvocationContext.invoke(CacheableInvocationContext.java:114)
at com.ibm.ws.webcontainer.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:186)
at com.ibm.ws.webcontainer.oselistener.OSEListenerDispatcher.service(OSEListener.java:334)
at com.ibm.ws.webcontainer.http.HttpConnection.handleRequest(HttpConnection.java:56)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:610)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:431)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:593)

解决方案 »

  1.   

    这个语句看得太乱了
    deletesql=deletesql+"and courseCode not in(select   courseCode from (select s.*,(select count(*) from selectedcource where stuSerial = "+stuSerial+"";  
    第二句看上去有问题
      

  2.   

    select s.*,(select count(*) from selectedcource where stuSerial = "+stuSerial+"";  
    你这个s是在那定义的别名
    另外介意输出整条sql,这样有利于找出sql的错误
      

  3.   

    deletesql=deletesql+"and courseCode no+"and 前面加空格 +"    andstuSerial = 6241and  6241跟and合一起了
      

  4.   

    在程序中用输出语句将组合好的deletesql变量输出,然后检查就很方便了。
      

  5.   

    把拼凑的SQL打印出来再找吧,要不很累
      

  6.   

    delete from selectedcource where  stuSerial = 6241and courseCode 6241和and写在一起了,写sql拼接的时候要细心一点。这样的问题没啥意思
      

  7.   

    输出拼写的sql语句在给大家看看
      

  8.   

    输出的SQL为:
    delete from selectedcource where  stuSerial = 6241 and courseCode not in(select   courseCode from (select s.*,(select count(*) from selectedcource where stuSerial = 6241 and courseCode = s.courseCode) isselected, (select openyear from selectedcource where stuserial = 6241 and courseCode=s.courseCode) openyear, (select isDegree from selectedcource where stuserial = 6241 and courseCode = s.courseCode) is_sel_degree from v_trainscheme s where schoolId='310' and majorId='050201' and stutypeid='02' and grade='2007' order by isdegree desc, typename)) 
    现在的问题是这个SQL在程序中执行了,数据得到了更新,但是现在出现"java.sql.SQLException: 数据查询出错ORA-00900: 无效 SQL 语句 
    "
      

  9.   

    6241和and写在一起了,马虎了吧
      

  10.   

    不执行sql,把最后的sql贴出来。
    写拼节的时候前后都加空格
      

  11.   

    先在程序中将生成的SQL语句打印出来, 拷贝Oracle 平台(如:toad)到运行 就可以知道结果了
      

  12.   

    这是sql语句写得不正确引起的,可能的原因:and左右的空格,是否缺少逗号,字段和数据库是否一致等原因都会引起