PROCEDURE PROC_YWYINFO_LIST(o_ywy_id  In Varchar2, --业务业ID
                              o_ywy     In Varchar2, --业务员姓名
                              o_ywynge  In Number, --业务员年龄
                              o_pos     In Number, --标志0:列表显视,1:查询后结果
                              o_retCode OUT VARCHAR2, --返回码初始值
                              o_nameCur OUT REF_SEARCH) Is
    strsql Varchar(100);
  BEGIN
    o_retCode := '0';
    --返回码初始值
    strsql := 'SELECT YWY_ID,YWY,YWYNGE FROM YWYINFO WHERE 1=1';
  
    If o_pos = 0 Then
      strsql := strsql;
    Else
      If o_ywy_id Is Not Null Then
        strsql := strsql || ' and YWY_ID like  ''%' || o_ywy_id || '%''';      End if;
    
      If o_ywy Is Not Null Then
        strsql := strsql || ' and YWY like  ''%' || o_ywy || '%''';
      End if;
    
      If o_ywynge Is Not Null Then
        strsql := strsql || ' and YWYNGE like  ''%' || o_ywynge || '%''';
      End if;
    
    End If;
就是红色的部分,那个'%'的意思不是任意字符串的意思吗,在这里又是双引号又是单引号的我看不懂,还有一个问题就是,看别人在数据库系统中定义的一个添加/删除/修改过程,但就是找不到调用过程的语句,是不是有过程在有的平台中不需要调用,直接有后台处理了,还是在系统的jsp代码中调用还是怎么,问的有点不知所以,望大家见谅。谢谢|!
  
    OPEN o_nameCur For strsql;
    RETURN;
    --正常退出
  
    --异常处理
  EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
      o_retCode := '-1';
      --操作异常
      DBMS_OUTPUT.PUT_LINE(SQLERRM);
      RETURN;
      --操作异常退出
  
  END PROC_YWYINFO_LIST;

解决方案 »

  1.   

    在单引号里,要再去表示一对单号需要转义的,即两个''表示一个' .strsql := strsql || ' and YWY_ID like  ''%' || o_ywy_id || '%''';
    -------
    你这句在运行后拼出来的串是这样: and YWY_ID like  '%XXX%'  .
      

  2.   

    在oracle里在引号里的单引号,要解析,为两单引号为一单引号。比如
    select * from t where name='zhangsan';
    应该为:
    'select * from t where name=''zhangsan''';
      

  3.   

    不是双引号,是两个单引号
    这时在构造SQL语句
    如: like '%aaaaa%'
      

  4.   


    就是 like '%字符串%'
      

  5.   

    你把下面的语句执行一下就知道了!set serveroutput on;
    declare
    v_str varchar2(200);
    begin
      v_str:= ' and YWY_ID like  ''%' || 'aa' || '%''';
      dbms_output.put_line(v_str);
    end;
     /