El siguiente script se empleó para modificar el contador de un rango de facturas centralizadas, referente al ticket https://gloval.freshservice.com/helpdesk/tickets/2345 y únicamente está de base para realizar esta reasignación masiva (para un rango determinado se quería cambiar la terminación 20 por 19)
Para casos semejantes, el script sirve únicamente para un rango de facturas y habría que verificar siempre que sólo se van a actualizar las facturas que se necesitan (no perder de vista que la búsqueda por rango es sobre un campo tipo cadena y podría no funcionar como se espera.
set SERVEROUTPUT on DECLARE sDesde varchar2 (20) := [primer elemento del rango]; sHasta varchar2 (20) := [último elemento del rango]; BEGIN --FACLIBRE UPDATE FACLIBRE SET NUMFAC = substr(numfac, 0,length(numfac) - 2) || '19' where NUMFAC >= sDesde and NUMFAC <= sHasta ; DBMS_OUTPUT.PUT_LINE('Registros de FACLIBRE.NUMFAC ' || TO_CHAR(SQL%ROWCOUNT)); UPDATE FACLIBRE SET NUMALBG = substr(NUMALBG, 0,length(NUMALBG) - 2) || '19' where NUMALBG >=sDesde and NUMALBG<= sHasta; DBMS_OUTPUT.PUT_LINE('Registros de FACLIBRE.NUMALBG ' || TO_CHAR(SQL%ROWCOUNT)); UPDATE FACLIBRE SET RNUMALBG = substr(RNUMALBG, 0,length(RNUMALBG) - 2) || '19' where RNUMALBG >=sDesde and RNUMALBG<= sHasta; DBMS_OUTPUT.PUT_LINE('Registros de FACLIBRE.RNUMALBG ' || TO_CHAR(SQL%ROWCOUNT)); --GLOBALFAC UPDATE GLOBALFAC SET FACGLOB = substr(FACGLOB, 0,length(FACGLOB) - 2) || '19' where FACGLOB >= sDesde AND FACGLOB<= sHasta; DBMS_OUTPUT.PUT_LINE('Registros de GLOBALFAC.FACGLOB ' || TO_CHAR(SQL%ROWCOUNT)); --PRODUCCION UPDATE PRODUCCION SET NUMFAC = substr(NUMFAC, 0,length(NUMFAC) - 2) || '19' where NUMFAC >= sDesde and NUMFAC<= sHasta; DBMS_OUTPUT.PUT_LINE('Registros de PRODUCCION.NUMFAC ' || TO_CHAR(SQL%ROWCOUNT)); UPDATE PRODUCCION SET NUMFACG = substr(NUMFACG, 0,length(NUMFACG) - 2) || '19' where NUMFACG >= sDesde and NUMFACG<= sHasta; DBMS_OUTPUT.PUT_LINE('Registros de PRODUCCION.NUMFACG ' || TO_CHAR(SQL%ROWCOUNT)); UPDATE PRODUCCION SET RNUMFACG = substr(RNUMFACG, 0,length(RNUMFACG) - 2) || '19' where RNUMFACG >= sDesde and RNUMFACG<= sHasta; DBMS_OUTPUT.PUT_LINE('Registros de PRODUCCION.RNUMFACG ' || TO_CHAR(SQL%ROWCOUNT)); -- Descomentar COMMIT ROLLBACK; -- COMMIT; DBMS_OUTPUT.put_line('Ejecutado con éxito'); EXCEPTION WHEN OTHERS THEN ROLLBACK; dbms_output.put_line('Hecho rollback' ); DBMS_OUTPUT.put_line('Error:'||TO_CHAR(SQLCODE)); DBMS_OUTPUT.put_line(SQLERRM); END;