create or replace procedure pro_DataCopyAndCheck is
ls_COD      varchar2(50);
ls_STA      VARCHAR2(1);
ls_LNG      VARCHAR2(3);
ld_EMS      DATE;
ls_OPR_EMS  VARCHAR2(20);
ls_REV      VARCHAR2(3);
ld_REV      DATE;
ls_OPR_REV  VARCHAR2(20);
ls_SIG_PRD  VARCHAR2(1);
ls_FIL_LAME VARCHAR2(1);
ls_COD_LAME VARCHAR2(5);
cursor get70TableData is
  select I94_COD_QCP,I94_STA_QCP,I94_LNG_QCP,D94_EMS_QCP,T94_OPR_EMS_QCP,
         I94_REV_QCP,D94_REV_QCP,T94_OPR_REV_QCP,I27_SIG_PRD,
         F94_FIL_LAME,I94_COD_LAME from TGED070_QCP_STANGING;
begin
  open get70TableData;
  fetch get70TableData into
        ls_COD,ls_STA,ls_LNG,ld_EMS,ls_OPR_EMS,ls_REV,ld_REV,
        ls_OPR_REV,ls_SIG_PRD,ls_FIL_LAME,ls_COD_LAME;
  while get70TableData%found loop
        insert into TGED070_QCP values
        (ls_COD,ls_STA,ls_LNG,ld_EMS,ls_OPR_EMS,ls_REV,ld_REV,
        ls_OPR_REV,ls_SIG_PRD,ls_FIL_LAME,ls_COD_LAME);
        
        EXCEPTION
             
            when others then
            ls_COD := "";
              
        fetch get70TableData into
              ls_COD,ls_STA,ls_LNG,ld_EMS,ls_OPR_EMS,ls_REV,ld_REV,
              ls_OPR_REV,ls_SIG_PRD,ls_FIL_LAME,ls_COD_LAME;
  end loop;
  Close get70TableData;
end pro_DataCopyAndCheck;
PL/SQL中的错误信息:
PROCEDURE SYSTEM.PRO_DATACOPYANDCHECK 编译错误错误: PLS-00103: 出现符号 "EXCEPTION"在需要下列之一时:
       begincasedeclareend
          exitforgotoifloopmodnullpragmaraisereturnselectupdatewhile
          with<an identifier><a double-quoted delimited-identifier>
          <a bind variable><<closecurrentdeletefetchlockinsertopen
          rollbacksavepointsetsqlexecutecommitforallmerge
          <a single-quoted SQL string>pipe
行: 29
文本: EXCEPTION错误: PLS-00103: 出现符号 "CLOSE"在需要下列之一时:
       beginfunctionpackage
          pragmaprocedureform
行: 46
文本: Close get70TableData;错误: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
       beginfunction
          packagepragmaproceduresubtypetypeuse<an identifier>
          <a double-quoted delimited-identifier>formcurrentcursor
行: 48
insert出错时,我想在捕获异常后继续游标,怎么解决上面的问题

解决方案 »

  1.   

    EXCEPTION
                   WHEN OTHERS
                   THEN
                      ls_COD := "";
    ---
    ls_COD := '';oracle中字符串用''
      

  2.   

    你上面的语句是编译的时候出错
    ls_COD := '';这时ls_COD为null
    oracle中空字符串相当于null
      

  3.   

    我改成ls_COD := 'wd';错误还是一样
      

  4.   

    while get70TableData%found loop
    begin  ----------------------------
            insert into TGED070_QCP values
            (ls_COD,ls_STA,ls_LNG,ld_EMS,ls_OPR_EMS,ls_REV,ld_REV,
            ls_OPR_REV,ls_SIG_PRD,ls_FIL_LAME,ls_COD_LAME);
            
            EXCEPTION
                 
                when others then
                ls_COD := "";
                  
            fetch get70TableData into
                  ls_COD,ls_STA,ls_LNG,ld_EMS,ls_OPR_EMS,ls_REV,ld_REV,
                  ls_OPR_REV,ls_SIG_PRD,ls_FIL_LAME,ls_COD_LAME;
    end;---  ----------------------------
    end loop;
      

  5.   

    ls_COD := '';  这样就好了