PL/SQL里我写了个动态游标语句
v_sqlstr:='select a,bc from '||table_name||
                  ' where a like substr(‘||xx||’,5,2)'现在有这样一个问题XX,table_name是个字符串变量,比如是1234556,我希望最后的SQL语句是
v_sqlstr:='select a,bc from cc where a like substr('1234556',5,2)这种,那么1234556这旁边的2个单引号怎么弄上去啊?如果加'''||XX||''',结果后来的SQL变成了substr('||XX||',5,2),XX没有被替换掉

解决方案 »

  1.   

    v_sqlstr:='select a,bc from '||table_name||
    ' where a like substr('''||xx||''',5,2)'
      

  2.   

    楼上那么写不行的,最后执行的SQL会变成substr('||XX||',5,2),也就是说XX没有被替换成1234556,我上面有说。我已经搞定了,应该是
    substr(chr(39)||XX||chr(39),5,2)
      

  3.   

    这样会有问题?
    sqlstr:='select a,bc from '||table_name||' where a like substr('''||xx||''',5,2)';
      

  4.   


    这样会有问题?
    sqlstr:='select a,bc from '||table_name||' where a like substr('''||xx||''',5,2)';  
    会,比如 table_name=mytab,xx='123456',最后你execute immediate v_sqlstr;你会很郁闷的发现,执行的语句如下:
    select a,bc from mytab where a like substr('||xx||',5,2)';试验下就知道了
      

  5.   

    SQL> 
    SQL> declare
      2  table_name varchar2(100) := 'test_table';
      3  xx varchar2(100) :=  'ssssdr3w';
      4  v_sqlstr varchar2(100) :='select a,bc from '||table_name|| ' where a like substr(''' || xx ||''',5,2)';
      5  begin
      6  dbms_output.put_line(v_sqlstr);
      7  end;
      8  /select a,bc from test_table where a like substr('ssssdr3w',5,2)PL/SQL procedure successfully completed
      

  6.   

    嗨奇怪了,我昨天也这样写的死活不行,只好用chr(39)转换。