想通过语句
     select * from news_ED where fn_News_GetViewSql(0,'通知公告',1)
      生成动态条件来取信息,结果出现了 ora-00920:invalid relational operator。   其中fn_News_GetViewSql()函数返回结果是 “1=1 and Category in (15,16,17,2)”若直接运行:
select * from news_ED where  1=1 and Category in (15,16,17,2)
则可以正常执行
where 后是否可以直接带函数么? 请高手们帮忙解决,谢谢! 很急!!!!

解决方案 »

  1.   

    “1=1 and Category in (15,16,17,2)”“ 1=1 and Category in (15,16,17,2)”
      

  2.   

    lz,比较下!就知道区别 
    where 空格 1=1
      

  3.   

     fn_News_GetViewSql(0,'通知公告',1)
    这个函数返回的是  字符串?
    就像 直接和前面的查询语句连接起来  select xxx where ''  的效果,这种拼接需要动态执行,或者在程序中你 先调用 函数 返回拼接好的sql串返回 ,再连接前面的sql !
      

  4.   

    嗯,动态执行是可以的。但问题是:我们的系统中,where 之前的语句我们是固定的,我们动不了,我们所能做的就是写入where 后的条件,那么条件我又是通过函数生成的。若非动态执行的话,是不是就不能只有一个函数,而是要有一个操作动作?
      

  5.   

    v_sql := 'select * from news_ED where ' ||fn_News_GetViewSql(0,'通知公告',1);
    execute immediate v_sql;
      

  6.   

    我只能设置where 后的条件语句,所以不能用exec动态执行
      

  7.   

    我只能设置where 后的条件语句,所以不能用动态执行
      

  8.   

    直接在sql里面肯定不认识 '12,33,45,22'  要不你就整个临时表存这些东西 ,然后where后面 查一下
      

  9.   

    原因可能是该函数返回的只是一个字符值,一个非boolean的值无法进行判断
    不知道是否正确?
      

  10.   

    +1。若需要也可声明参数传入fn_News_GetViewSql
      

  11.   

    函数传进来的值 在sql里面会判断成'15,16,17,2'一个字符串 肯定会报错  可以考虑存储