如何构筑动态模糊查询语句

jumpheightway 2010-09-30 12:30:30
select *
from ur
where username = 'gbk'
and jtmk name like (select name from qc where lm_mark = 'gtjl') || '*%')

请问如何构造这个动态语句

请赐教
谢谢
急用
...全文
158 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jumpheightway 2010-10-01
  • 打赏
  • 举报
回复
谢谢大家
想了个办法解决了
iqlife 2010-09-30
  • 打赏
  • 举报
回复
1:直接构造 ,使用execute immediate执行,类似如下
str_sql:=’insert into dinya_test values(:1,:2)’;
execute immediate str_sql using id,name; --使用了using子句,按顺序将输入的值绑定到变量
2:使用DBMS_SQL包
crazylaa 2010-09-30
  • 打赏
  • 举报
回复
用存储过程吧。like子句不能包含结果集的。
minitoy 2010-09-30
  • 打赏
  • 举报
回复
SQL> select 1 from dual where '12' like  (select 1 from dual)||'%';

1
----------
1

SQL>
酸饼 2010-09-30
  • 打赏
  • 举报
回复
子查询如果只有一条记录,那直接用一条查询就可以了,不用什么动态语句:
select *
from ur
where username = 'gbk'
and jtmk_name like (select name || '*%' from qc where lm_mark = 'gtjl')


注意:%号跟name连在一起,你原先放在子查询后面不行。||只能用在字段上,而不是包含字段的查询结果集
name || '*%'
心中的彩虹 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 jumpheightway 的回复:]
select *
from ur
where username = 'gbk'
and jtmk name like (select name from qc where lm_mark = 'gtjl') || '*%')

请问如何构造这个动态语句

请赐教
谢谢
急用
[/Quote]


--或者这样
select a.*
from ur a,qc b
where username = 'gbk'
and instr(a.jtmkname,b.name)>0 and b.lm_mark = 'gtjl'



minitoy 2010-09-30
  • 打赏
  • 举报
回复
select *
from ur
where username = 'gbk'
and jtmk name like (select name from qc where lm_mark = 'gtjl') || '*%')
如果是一个值,你这样写就可以.
不需要什么动态sql.
心中的彩虹 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 jumpheightway 的回复:]
select *
from ur
where username = 'gbk'
and jtmk name like (select name from qc where lm_mark = 'gtjl') || '*%')

请问如何构造这个动态语句

请赐教
谢谢
急用
[/Quote]


--你看看这样
SQL> edi
已写入 file afiedt.buf

1 declare
2 v_name qc.name%type;
3 type cur_type is ref cursor;
4 cur1 cur_type;
5 u_name varchar2(10);
6 u_id varchar2(10);
7 begin
8 select name into v_name from qc where lm_mark = 'gtjl' and rownum=1;
9 open cur1 for 'select username,id from ur where username like '||''''||v_name||'%'||'''';
10 fetch cur1 into u_name,u_id ;
11 while cur1%found loop
12 dbms_output.put_line(u_name||' '||u_id);
13 fetch cur1 into u_name,u_id;
14 end loop;
15 close cur1;
16* end;
SQL> /
abc1 1
abc2 2
abc3 3
abc4 4
abc5 5

PL/SQL 过程已成功完成。





iqlife 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jumpheightway 的回复:]
select name from qc where lm_mark = 'gtjl'

这个只有一个值

假设这个值是abc

我想得到
select *
from ur
where username = 'gbk'
and jtmk name like 'abc*%'

该如何做
不晓得我说清楚没有
[/Quote]

你先写好SQL语句可以执行得到结果,然后再把SQL作为字符串执行就好了,
gelyon 2010-09-30
  • 打赏
  • 举报
回复
jumpheightway 2010-09-30
  • 打赏
  • 举报
回复
select name from qc where lm_mark = 'gtjl'

这个只有一个值

假设这个值是abc

我想得到
select *
from ur
where username = 'gbk'
and jtmk name like 'abc*%'

该如何做
不晓得我说清楚没有

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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