日期:2014-05-17  浏览次数:20808 次

悄悄问一个过程中的一个代码意思,在线等!
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;


------解决方案--------------------
在单引号里,要再去表示一对单号需要转义的,即两个''表示一个' .

strsql := strsql || ' and YWY_ID like ''%' || o_ywy_id || '%''';
-------
你这句在运行后拼出来的串是这样: and YWY_ID like '%XXX%' .
------解决方案--------------------
在oracle里在引号里的单引号,要解析,为两单引号为一单引号。比如
select * from t where name='zhangsan';
应该为:
'select * from t where name=''zhangsan''';
------解决方案--------------------
你把下面的语句执行一下就知道了!

set serveroutput on;
declare
v_str varchar2(200);
begin
v_str:= ' and YWY_ID like ''%' || 'aa' || '%''';
dbms_output.put_line(v_str);
end;
 /