日期:2014-05-16  浏览次数:20642 次

oracle goto 使用
IF (V_COUNT > 0) THEN
       --更新ets_item_info
       UPDATE ETS_ITEM_INFO
       SET   FINANCE_PROP    = 'CTZC',
              LAST_UPDATE_DATE = SYSDATE,
              LAST_UPDATE_BY   =P_USER_ID
       WHERE  SYSTEMID = P_SYSTEMID;
       
       RETURN 1;
     ELSE
       GOTO lable;     END IF;
   

<<lable>>
    NULL;
   
    EXCEPTION   WHEN OTHERSTHEN
     BEGIN
        P_ERRMSG := SQLERRM;
        RETURN 0;
     END;

?

<<lable>> 后面不能直接跟EXCEPTION这种关键字类的语句,要用NULL把标签跟关键字隔开。类似的关键字还有ENDLOOP之类的。。。
PROCEDURE PRC_F_yaa012_yw_ht (
      prm_aae076          IN              ad04a1.aae076%TYPE,       -- 财务接口流水号
      prm_yad060          IN              ad04a1.yad060%TYPE,       -- 收付种类
      prm_yab003          IN              ad04a1.yab003%TYPE,       -- 社保经办机构
      prm_YAA012          IN              ad04a1.yaa012%TYPE,       -- 财务处理标志
      prm_AAB191          IN              ad04a1.AAB191%TYPE,       -- 实际到账日期
      prm_AAE036          IN              ad04a1.AAE036%TYPE,       -- 登账日期
      prm_AppCode         OUT             VARCHAR2,       -- 执行代码
      prm_ErrorMsg        OUT             VARCHAR2)       -- 出错信息
  IS
     --定义变量
     var_bz CHAR(1);
  BEGIN
      /*初始化变量*/
      prm_AppCode  := pkg_COMM.gn_def_OK;
      prm_ErrorMsg := '';
      var_bz := SUBSTR(prm_yad060,1,1);
      IF var_bz = 'R' THEN --居民医疗
         --调用居民医保业务表同步过程
         pkg_P_Comm.prc_P_updateFundAllocation
                              (prm_aae076       ,     --单据号
                               prm_yad060       ,     --收付种类
                               prm_yab003       ,     --社保经办机构
                               prm_yaa012       ,     --财务处理标志
                               prm_aab191       ,     --到帐时间
                               prm_AAE036       ,     --财务结算日期
                               prm_AppCode      ,     --错误代码
                               prm_ErrorMsg     );    --错误内容
         IF prm_AppCode <> pkg_COMM.gn_def_OK THEN
            GOTO label_ERROR;
         END IF;
      ELSIF var_bz = 'K' THEN --医疗待遇
         pkg_k_PaymentComm.prc_k_PaymentWriteYw
                              ( prm_aae076      ,     -- 财务接口流水号
                                prm_yad060      ,     -- 收付种类
                                prm_yab003      ,     -- 社保经办机构
                                prm_YAA012      ,     -- 财务处理标志
                                prm_AAB191      ,     -- 实际到账日期
                                prm_AAE036      ,     -- 登账日期
                                prm_AppCode      ,     -- 错误代码
                                prm_ErrorMsg     );    -- 错误内容
         IF prm_AppCode <> pkg_COMM.gn_def_OK THEN
            GOTO label_ERROR;
         END IF;
      ELSE
         prm_AppCode  := PRE_ERRCODE ||'0506';
         prm_ErrorMsg := '无法同步财务接口流水号为' || prm_aae076||'的业务表!';
         GOTO label_ERROR;
      END IF;
      /*成功处理*/
      <<label_OK>>
      /*关闭打开的游标*/
      /*给返回参数赋值*/
      prm_AppCode  := pkg_COMM.gn_def_OK ;
      prm_ErrorMsg := ''                 ;
      RETURN ;

      /*处理失败*/
      <<label_ERROR>>
      /*关闭打开的游标*/
      /*给返回参数赋值*/
      IF prm_AppCode = pkg_COMM.gn_def_OK THEN
         prm_AppCode  := PRE_ERRCODE || pkg_COMM.gn_def_ERR;
      END IF ;
      RETURN ;
  EXCEPTION
     -- WHEN NO_DATA_FOUND THEN
     -- WHEN TOO_MANY_ROWS THEN
     -- WHEN DUP_VAL_ON_INDEX THEN
     WHEN OTHERS THEN
        /*关闭打开的游标*/
        prm_AppCode  := PRE_ERRCODE || pkg_COMM.gn_def_ERR;
        prm_ErrorMsg := '数据库错误'|| SQLERRM ;
        RETURN;
  END PRC_F_yaa012_yw_ht;

?