97 lines
3.5 KiB
SQL
97 lines
3.5 KiB
SQL
-- ===================================================================
|
|
-- Simple Package Version Tracking Script
|
|
-- ===================================================================
|
|
-- Purpose: Track specified Oracle package versions
|
|
-- Author: Grzegorz Michalski
|
|
-- Date: 2025-11-25
|
|
-- 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.FILE_MANAGER',
|
|
'ODS.FILE_MANAGER_ODS'
|
|
);
|
|
-- ===================================================================
|
|
|
|
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);
|
|
|
|
-- Get package version
|
|
BEGIN
|
|
EXECUTE IMMEDIATE 'SELECT ' || vOwner || '.' || vPackageName || '.GET_VERSION() FROM DUAL' INTO vVersion;
|
|
vPackages.EXTEND;
|
|
vPackages(vPackages.COUNT).owner := vOwner;
|
|
vPackages(vPackages.COUNT).package_name := vPackageName;
|
|
vPackages(vPackages.COUNT).version := vVersion;
|
|
|
|
-- Track in ENV_MANAGER
|
|
BEGIN
|
|
CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION(
|
|
pPackageOwner => vOwner,
|
|
pPackageName => vPackageName,
|
|
pPackageVersion => vVersion,
|
|
pPackageBuildDate => TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'),
|
|
pPackageAuthor => 'Grzegorz Michalski'
|
|
);
|
|
vCount := vCount + 1;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN NULL; -- Continue even if tracking fails
|
|
END;
|
|
EXCEPTION
|
|
WHEN OTHERS THEN NULL; -- Skip packages that fail
|
|
END;
|
|
END IF;
|
|
END LOOP;
|
|
|
|
-- Display results
|
|
IF vPackages.COUNT > 0 THEN
|
|
DBMS_OUTPUT.PUT_LINE('Packages tracked: ' || vCount || ' of ' || vPackages.COUNT);
|
|
DBMS_OUTPUT.PUT_LINE('');
|
|
|
|
FOR i IN 1..vPackages.COUNT LOOP
|
|
DBMS_OUTPUT.PUT_LINE(vPackages(i).owner || '.' || vPackages(i).package_name || ' = ' || vPackages(i).version);
|
|
END LOOP;
|
|
ELSE
|
|
DBMS_OUTPUT.PUT_LINE('No packages found in list');
|
|
END IF;
|
|
|
|
DBMS_OUTPUT.PUT_LINE('========================================');
|
|
END;
|
|
/
|