-- =================================================================== -- Simple Package Version Tracking Script -- =================================================================== -- Purpose: Track specified Oracle package versions -- Author: Grzegorz Michalski -- Date: 2026-03-11 -- Version: 3.1.0 - List-Based Edition -- -- USAGE: -- 1. Edit package list below (add/remove packages as needed) -- 2. Include in your install/rollback script: @@track_package_versions.sql -- =================================================================== SET SERVEROUTPUT ON; DECLARE TYPE t_package_rec IS RECORD ( owner VARCHAR2(50), package_name VARCHAR2(50), version VARCHAR2(50) ); TYPE t_packages IS TABLE OF t_package_rec; TYPE t_string_array IS TABLE OF VARCHAR2(100); -- =================================================================== -- PACKAGE LIST - Edit this array to specify packages to track -- =================================================================== -- Add or remove entries as needed for your MARS issue -- Format: 'SCHEMA.PACKAGE_NAME' -- =================================================================== vPackageList t_string_array := t_string_array( 'CT_MRDS.DATA_EXPORTER' ); -- =================================================================== vPackages t_packages := t_packages(); vVersion VARCHAR2(50); vCount NUMBER := 0; vOwner VARCHAR2(50); vPackageName VARCHAR2(50); vDotPos NUMBER; BEGIN DBMS_OUTPUT.PUT_LINE('========================================'); DBMS_OUTPUT.PUT_LINE('Package Version Tracking'); DBMS_OUTPUT.PUT_LINE('========================================'); -- Process each package in the list FOR i IN 1..vPackageList.COUNT LOOP vDotPos := INSTR(vPackageList(i), '.'); IF vDotPos > 0 THEN vOwner := SUBSTR(vPackageList(i), 1, vDotPos - 1); vPackageName := SUBSTR(vPackageList(i), vDotPos + 1); ELSE vOwner := USER; -- Default to current user if no schema specified vPackageName := vPackageList(i); END IF; BEGIN -- Get package version EXECUTE IMMEDIATE 'SELECT ' || vOwner || '.' || vPackageName || '.GET_VERSION() FROM DUAL' INTO vVersion; -- Track the version CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION( pPackageOwner => vOwner, pPackageName => vPackageName, pPackageVersion => vVersion, pPackageBuildDate => NULL, -- Will be retrieved from package pPackageAuthor => NULL -- Will be retrieved from package ); DBMS_OUTPUT.PUT_LINE('SUCCESS: Tracked ' || vOwner || '.' || vPackageName || ' v' || vVersion); vCount := vCount + 1; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ERROR tracking ' || vOwner || '.' || vPackageName || ': ' || SQLERRM); END; END LOOP; DBMS_OUTPUT.PUT_LINE('========================================'); DBMS_OUTPUT.PUT_LINE('Tracked ' || vCount || ' of ' || vPackageList.COUNT || ' packages successfully'); DBMS_OUTPUT.PUT_LINE('========================================'); END; /