87 lines
3.2 KiB
SQL
87 lines
3.2 KiB
SQL
-- ===================================================================
|
|
-- 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;
|
|
/
|