この手順では、(非常に基本的な) 過去の作業を追跡するテーブルを更新します。問題は、それを変更したりコンパイルしたりできないことです。手順を間違えて無限ループしてるのかもわからない。私の 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;