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