select *
  from ur
 where username = 'gbk'
   and jtmk  name like (select name from qc where lm_ = 'gtjl') || '*%')请问如何构造这个动态语句请赐教
谢谢
急用

解决方案 »

  1.   

    用存储过程吧。like子句不能包含结果集的。
      

  2.   

    1:直接构造 ,使用execute immediate执行,类似如下 
    str_sql:=’insert into dinya_test values(:1,:2)’;
    execute immediate str_sql using id,name; --使用了using子句,按顺序将输入的值绑定到变量
    2:使用DBMS_SQL包
      

  3.   

    select name from qc where lm_ = 'gtjl'这个只有一个值假设这个值是abc我想得到
    select *
      from ur
     where username = 'gbk'
      and jtmk name like 'abc*%'该如何做
    不晓得我说清楚没有
      

  4.   

    用动态sql去拼接!像这样:http://topic.csdn.net/u/20100930/10/1eb0140c-c04f-4004-a0bd-a5a60f955570.html?48037
      

  5.   


    你先写好SQL语句可以执行得到结果,然后再把SQL作为字符串执行就好了,
      

  6.   

    --你看看这样
    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_ = '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 5PL/SQL 过程已成功完成。
      

  7.   

    select *
      from ur
     where username = 'gbk'
      and jtmk name like (select name from qc where lm_ = 'gtjl') || '*%')
    如果是一个值,你这样写就可以.
    不需要什么动态sql.
      

  8.   

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

  9.   

    子查询如果只有一条记录,那直接用一条查询就可以了,不用什么动态语句:
    select *
    from   ur
    where  username = 'gbk'
    and    jtmk_name like (select name || '*%' from qc where lm_ = 'gtjl')注意:%号跟name连在一起,你原先放在子查询后面不行。||只能用在字段上,而不是包含字段的查询结果集
    name || '*%'
      

  10.   

    SQL> select 1 from dual where '12' like  (select 1 from dual)||'%';
     
             1
    ----------
             1
     
    SQL>