这个过程更新了一个表,我在其中跟踪完成的(非常基本的)历史工作。问题是我不能再修改或编译它了。我不知道我是否在程序中犯了错误并且正在无限循环。我的 DBA 已经检查了程序,一切似乎都正确,但我仍然无法更改它,使用它。
我敢打赌,当我试图捕捉异常并且我使用EXCEPTION WHEN OTHERS THEN NULL
循环时会卡住。
有什么建议吗?
干杯
create or replace
PROCEDURE DOACTUALIZARHISTORIALEM
(
QUSUARIO IN VARCHAR2
, QARCHIVO IN VARCHAR2
, QANIOFISCAL IN VARCHAR2
, QFECHAPROCESAMIENTO IN DATE
) AS
cursorEstatus SYS_REFCURSOR;
sqlQueryA VARCHAR2(200);
sqlQueryB VARCHAR2(200);
idArchivo INTEGER;
idPrograma VARCHAR2(10);
idComponente VARCHAR2(10);
sumaSolicitado DECIMAL;
sumaAprobado DECIMAL;
sumaPagado DECIMAL;
BEGIN
idArchivo := getidarchivo(qarchivo,getidusuario(qusuario),qaniofiscal);
sqlQueryA := 'SELECT programa, componente'||
' FROM '||qusuario||
' WHERE id_archivo = :1';
OPEN cursorEstatus FOR sqlQueryA USING idArchivo;
LOOP
FETCH cursorEstatus INTO idPrograma, idComponente;
EXIT WHEN cursorEstatus%NOTFOUND;
BEGIN
sqlQueryB := 'SELECT sum(monto_federal) '||
' FROM '||qusuario||
' WHERE programa = :1'||
' AND componente = :2'||
' AND estatus_monto = 1'||
' AND status = 1';
EXECUTE IMMEDIATE sqlQueryB
INTO sumaSolicitado
USING idPrograma, idComponente;
INSERT INTO src_historialem VALUES (idArchivo,
qfechaprocesamiento,
idPrograma,
idComponente,
1,
sumaSolicitado);
COMMIT;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
BEGIN
sqlQueryB := 'SELECT sum(monto_federal) '||
' FROM '||qusuario||
' WHERE programa = :1'||
' AND componente = :2'||
' AND estatus_monto = 2'||
' AND status = 1';
EXECUTE IMMEDIATE sqlQueryB
INTO sumaAprobado
USING idPrograma, idComponente;
INSERT INTO src_historialem VALUES (idArchivo,
qfechaprocesamiento,
idPrograma,
idComponente,
2,
sumaSolicitado);
COMMIT;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
BEGIN
sqlQueryB := 'SELECT sum(monto_federal) '||
' FROM '||qusuario||
' WHERE programa = :1'||
' AND componente = :2'||
' AND estatus_monto = 3'||
' AND status = 1';
EXECUTE IMMEDIATE sqlQueryB
INTO sumaPagado
USING idPrograma, idComponente;
INSERT INTO src_historialem VALUES (idArchivo,
qfechaprocesamiento,
idPrograma,
idComponente,
3,
sumaSolicitado);
COMMIT;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
END LOOP;
CLOSE cursorEstatus;
END DOACTUALIZARHISTORIALEM;