急!! ora-00920错。where 后是否可以直接带函数么?

jacklinchen 2012-05-29 05:27:07
   想通过语句
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 后是否可以直接带函数么?

请高手们帮忙解决,谢谢! 很急!!!!
...全文
657 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
函数传进来的值 在sql里面会判断成'15,16,17,2'一个字符串 肯定会报错 可以考虑存储
小德 2012-05-29
  • 打赏
  • 举报
回复
+1。若需要也可声明参数传入fn_News_GetViewSql
[Quote=引用 7 楼 的回复:]

SQL code
v_sql := 'select * from news_ED where ' ||fn_News_GetViewSql(0,'通知公告',1);
execute immediate v_sql;
[/Quote]
bayueguihuaxiang 2012-05-29
  • 打赏
  • 举报
回复
原因可能是该函数返回的只是一个字符值,一个非boolean的值无法进行判断
不知道是否正确?
xu176032 2012-05-29
  • 打赏
  • 举报
回复
直接在sql里面肯定不认识 '12,33,45,22' 要不你就整个临时表存这些东西 ,然后where后面 查一下
jacklinchen 2012-05-29
  • 打赏
  • 举报
回复
我只能设置where 后的条件语句,所以不能用动态执行
jacklinchen 2012-05-29
  • 打赏
  • 举报
回复
我只能设置where 后的条件语句,所以不能用exec动态执行
啊彪123 2012-05-29
  • 打赏
  • 举报
回复
v_sql := 'select * from news_ED where ' ||fn_News_GetViewSql(0,'通知公告',1);
execute immediate v_sql;
jacklinchen 2012-05-29
  • 打赏
  • 举报
回复
嗯,动态执行是可以的。但问题是:我们的系统中,where 之前的语句我们是固定的,我们动不了,我们所能做的就是写入where 后的条件,那么条件我又是通过函数生成的。

若非动态执行的话,是不是就不能只有一个函数,而是要有一个操作动作?
a494910091 2012-05-29
  • 打赏
  • 举报
回复
fn_News_GetViewSql(0,'通知公告',1)
这个函数返回的是 字符串?
就像 直接和前面的查询语句连接起来 select xxx where '' 的效果,这种拼接需要动态执行,或者在程序中你 先调用 函数 返回拼接好的sql串返回 ,再连接前面的sql !
jacklinchen 2012-05-29
  • 打赏
  • 举报
回复
有空格的,我只是贴上来时没空出来
jacklinchen 2012-05-29
  • 打赏
  • 举报
回复
呵呵,有空格啊,我只是巾上来时没空出来
啊彪123 2012-05-29
  • 打赏
  • 举报
回复
lz,比较下!就知道区别 。。。
where 空格 1=1
啊彪123 2012-05-29
  • 打赏
  • 举报
回复
“1=1 and Category in (15,16,17,2)”

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

17,087

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧