我想知道是否有任何替代方法可以解决这种逻辑,而不使用嵌套异常。这是返回整数值的Function的一部分。谢谢。
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
......嵌套了近30个例外。
答案 0 :(得分:0)
恕我直言,这种类型的代码很难调试和维护。
如果我没错,代码是:
我建议:
尝试将多个查询聚合在一起,条件如
AND(TC.BL = PNUMBL或TC.BL为空)
如果无法做到这一点,请执行
之类的操作选择计数(*) 进入query1count 来自...... 哪里......条件......
if(query1count> 0)然后......
否则
- 再做一次查询
希望这有帮助。