日期:2014-05-17  浏览次数:20798 次

急!! ora-00920错。where 后是否可以直接带函数么?
想通过语句
  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 后是否可以直接带函数么? 

请高手们帮忙解决,谢谢! 很急!!!!

------解决方案--------------------
SQL code
“1=1 and Category in (15,16,17,2)”

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

------解决方案--------------------
fn_News_GetViewSql(0,'通知公告',1)
这个函数返回的是 字符串?
就像 直接和前面的查询语句连接起来 select xxx where '' 的效果,这种拼接需要动态执行,或者在程序中你 先调用 函数 返回拼接好的sql串返回 ,再连接前面的sql !
------解决方案--------------------
直接在sql里面肯定不认识 '12,33,45,22' 要不你就整个临时表存这些东西 ,然后where后面 查一下
------解决方案--------------------
原因可能是该函数返回的只是一个字符值,一个非boolean的值无法进行判断
不知道是否正确?
------解决方案--------------------
+1。若需要也可声明参数传入fn_News_GetViewSql
探讨

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

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