存储过程如下:CREATE OR REPLACE PROCEDURE listUnreadMails (
param_lgname IN  VARCHAR2,param_r IN  VARCHAR2,
resultCursor OUT returnPackage.returnCursor
) AS
  op_type_receive CHAR(1);
v_grouploginname ts_groups.grouploginname%TYPE;
lgname VARCHAR2(30);BEGIN
    
  op_type_receive := TRIM(param_r);  lgname := TRIM(param_lgname);  select trim(grouploginname) into v_grouploginname from ts_groups where trim(memberloginname)=lgname;
  exception 
   when others then 
      v_grouploginname := 'zu_ls';  OPEN resultCursor FOR
   
    select dbid,parentDbid,TRIM(sender) AS sender,TRIM(receipt) AS receipt,ts_mailbox.type,mailDate,subject,attachNums
    from ts_mailbox ,ts_users
    where   ts_mailbox.sender=ts_users.loginname
and dbid not in(select dbid from ts_op_stream where op_user = lgname and op_status=op_type_receive)
and   trim(receipt) =lgname
       and  (receipt like '%'||lgname||'%'
or receipt like '%'||v_grouploginname||'%' )
    ORDER BY mailDate DESC;
END listUnreadMails;在这个存储过程中加入这句:
 select trim(grouploginname) into v_grouploginname from ts_groups where trim(memberloginname)=lgname;
  exception 
   when others then 
      v_grouploginname := 'zu_ls';
就会出现cusor is closed的异常,这个怎么改呢?先谢谢了。

解决方案 »

  1.   


    CREATE OR REPLACE PROCEDURE listUnreadMails(param_lgname IN VARCHAR2,
                                                param_r      IN VARCHAR2,
                                                resultCursor OUT returnPackage.returnCursor) AS
      op_type_receive  CHAR(1);
      v_grouploginname ts_groups.grouploginname%TYPE;
      lgname           VARCHAR2(30);BEGIN  op_type_receive := TRIM(param_r);  lgname := TRIM(param_lgname);  select trim(grouploginname)
        into v_grouploginname
        from ts_groups
       where trim(memberloginname) = lgname;
       OPEN resultCursor FOR
        
          select dbid,
                 parentDbid,
                 TRIM(sender) AS sender,
                 TRIM(receipt) AS receipt,
                 ts_mailbox.type,
                 mailDate,
                 subject,
                 attachNums
            from ts_mailbox, ts_users
           where ts_mailbox.sender = ts_users.loginname
             and dbid not in (select dbid
                                from ts_op_stream
                               where op_user = lgname
                                 and op_status = op_type_receive)
             and trim(receipt) = lgname
             and (receipt like '%' || lgname || '%' or
                 receipt like '%' || v_grouploginname || '%')
           ORDER BY mailDate DESC;
    exception
      when others then
        v_grouploginname := 'zu_ls';
    END listUnreadMails;
      

  2.   

    lz注意exception的位置,不要把业务代码放到exception后边,要把处理异常的代码放到exception的后边。