首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PL SQL替代嵌套异常

PL SQL替代嵌套异常
EN

Stack Overflow用户
提问于 2013-09-13 18:12:11
回答 1查看 524关注 0票数 0

我想知道是否有其他方法来解决这种逻辑,而不使用嵌套异常。这是返回整数值的函数的一部分。谢谢,

代码语言:javascript
代码运行次数:0
运行
复制
IF PNOMTARIFA = 'DEPOSITO' 
THEN
   BEGIN
      SELECT CL.ID_TIPO_CONT_LINEA, 
             CL.NOMBRE_TIPO_CONTENEDOR, 
             TC.DEPOSITO ,
             L.NOMBRE
        INTO idcontlinea, 
             tcontenedor, 
             deposito, 
             vlinea
        FROM TIPO_CONT TE, 
             TIPO_CONT_LINEA CL, 
             TARIFAS_DEPOSITO TC, 
             LINEAS L
       WHERE TE.ID_TIPO_CONT = CL.ID_TIPO_CONTENEDOR
         AND CL.ID_TIPO_CONT_LINEA = TC.ID_TIPO_CONT_LINEA
         AND CL.LINEA = L.LINEA
         AND TE.ID_TIPO_CONT = PTIPO_CONT
         AND CL.LINEA = PLINEA
         AND TC.NIT = PNITCLIENTE
         AND TC.BL = PNUMBL
         AND TC.VIGENCIA_DEPOSITO >= trunc(SYSDATE);

    EXCEPTION 
       WHEN OTHERS THEN 
         BEGIN
            SELECT CL.ID_TIPO_CONT_LINEA, 
                   CL.NOMBRE_TIPO_CONTENEDOR, 
                   TC.DEPOSITO ,
                   L.NOMBRE
              INTO idcontlinea, 
                   tcontenedor, 
                   deposito, 
                   vlinea
              FROM TIPO_CONT TE, 
                   TIPO_CONT_LINEA CL, 
                   TARIFAS_DEPOSITO TC, 
                   LINEAS L
             WHERE TE.ID_TIPO_CONT = CL.ID_TIPO_CONTENEDOR
               AND CL.ID_TIPO_CONT_LINEA = TC.ID_TIPO_CONT_LINEA
               AND CL.LINEA = L.LINEA
               AND TE.ID_TIPO_CONT = PTIPO_CONT
               AND CL.LINEA = PLINEA
               AND TC.NIT = PNITCLIENTE
               AND TC.PUERTO_CARGUE = PPTOCARGUE
               AND TC.PUERTO_DESCARGUE = PPTODESCARGUE
               AND PCLIENTEEXT LIKE '%'||TC.CLIENTE_EXT||'%'
               AND TC.BL IS NULL
               AND TC.VIGENCIA_DEPOSITO >= trunc(SYSDATE);
        EXCEPTION 
           WHEN OTHERS THEN
             BEGIN
                SELECT CL.ID_TIPO_CONT_LINEA, 
                       CL.NOMBRE_TIPO_CONTENEDOR, 
                       TC.DEPOSITO , 
                       L.NOMBRE
                  INTO idcontlinea, 
                       tcontenedor, 
                       deposito, 
                       vlinea
                  FROM TIPO_CONT TE, 
                       TIPO_CONT_LINEA CL, 
                       TARIFAS_DEPOSITO TC, 
                       LINEAS L
                 WHERE TE.ID_TIPO_CONT = CL.ID_TIPO_CONTENEDOR
                   AND CL.ID_TIPO_CONT_LINEA = TC.ID_TIPO_CONT_LINEA
                   AND CL.LINEA = L.LINEA
                   AND TE.ID_TIPO_CONT = PTIPO_CONT
                   AND CL.LINEA = PLINEA
                   AND TC.NIT = PNITCLIENTE
                   AND TC.PUERTO_CARGUE = PPTOCARGUE
                   AND TC.PUERTO_DESCARGUE = PPTODESCARGUE
                   AND TC.CLIENTE_EXT IS NULL
                   AND TC.BL IS NULL
                   AND TC.VIGENCIA_DEPOSITO >= trunc(SYSDATE);
            EXCEPTION WHEN OTHERS THEN

...嵌套的begin异常几乎有30个。

EN

回答 1

Stack Overflow用户

发布于 2013-09-13 18:31:14

IMHO,这种类型的代码很难调试和运行。

如果我是对的,代码是:

  • 多次执行相同的查询,条件略有不同
  • 使用异常捕获NO_DATA_FOUND异常(这是执行select语句时最可能出现的异常)

我建议:

  • 尝试将多个查询聚合在一起,条件如下 和(TC.BL = PNUMBL或TC.BL为空)
  • 如果这是不可能的,那么做一些类似的事情 从.选择query1count中的计数(*)在哪里...conditions..。 如果(query1count>0)那么..。 否则 --进行另一次查询

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18792646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档