Oracle 在函数中使用带参的游标

create or replace function MyContact(Operation_Id in  varchar2) return varchar2 
as
result varchar2(1000);
           cursor  cur (p varchar2) is 
       select t.box_type||'*'||count(1) as box   from ops_seai_asn_det t where t.operation_id=p

--被网上的文章误导了很久  此处不能写成

 --cursor  cur  is 
     --  select t.box_type||'*'||count(1) as box   from ops_seai_asn_det t where t.operation_id=Operation_Id

     --  group by box_type;

--上述写法外部参数是进入不了游标的 且不会报错 会把所有的记录查询出来
    c_row cur%rowtype;
    begin for c_row in cur(Operation_Id)  loop         
       --此处在游标FOR循环中使用查询  
           result :=result || c_row.box || ' ';  
           --Oracle中字符连接使用||,而sql server中用+         
       end loop;  
       result := rtrim(result,' ');       
       --去掉最后一个空格,还有Oracle中的赋值前面没有set   
  return result;
end ;

posted @ 2014-04-11 19:01  silence2010  阅读(873)  评论(0)    收藏  举报