l_sqlcur  varchar2(2048);
l_whersql varchar2(2048);
l_address varchar;
l_score int;    --取值过程省略
begin
l_sqlcur := 'select * from (select c.stuid , c.sex , c.name , c.address , c.score from class c where  ';    --l_address和l_score此时已经有值。
if l_id != '' then
     l_whersql := l_whersql || ' and a.address = ' || '''' || l_address || '''';
end if;l_whersql := l_whersql || ' and a.score < ' || '''' || l_score || '''';
l_sqlcur := l_sqlcur || l_whersql || ' order by a.id,a.name) ';pkg_pub.set_cursor_sql(l_sqlcur);麻烦解释一下以上语句中 ||  的用法。我的理解是这样的,不知道对不对:
说明:拼接符是  ||,用于拼接字符串和变量
      字符串必须用 '  '  括起来
      存储过程中定义的临时变量(l_sqdate)可以直接写      大部分时候,只要按如上规则,先把字符串用单引号括起来,再和其他字符串或变量拼接就可以了。
      根据SQL的规定,用于比较的字段值(>,<,>=,<==,!=,in,not in,like等符号右边的值)必须用单引号括起来,比如a.sqdate > '20080808'。SELECT语句最终执行时,临时变量已经变成了值。比如从'l_sqdate' 变成了'20080808' 。
      此时,两边的单引号'也是字符,所以需要把它们括起来。变成了' 'l_dbnumb' ',但单引号是字符串,在字符串内不能直接写成',所以再把每个单引号都括起来,变成了   ' '''l_sqdate''' '  。前后再加上拼接符,得到  ||''''l_sqdate''''||