Files
Database/ADM/ADM_PAC.SRC
Peter Feij 7cf7120e95 FSN#31260 bookkeeping van fac>adm stage 1
svn path=/Database/trunk/; revision=23948
2015-01-26 11:19:09 +00:00

192 lines
6.7 KiB
Plaintext

/* $Revision$
* $Id$
*/
CREATE OR REPLACE PACKAGE adm
AS
PROCEDURE systrackscript (n IN VARCHAR2, r IN VARCHAR2, force IN NUMBER);
PROCEDURE systrackscriptId (svnid IN VARCHAR2);
PROCEDURE systrackscriptId (svnid IN VARCHAR2, force IN NUMBER);
PROCEDURE trydrop (n IN VARCHAR2);
PROCEDURE tryalter (n IN VARCHAR2);
PROCEDURE registerversion (pmaj IN NUMBER, pmin IN NUMBER, ppatch IN VARCHAR2, pschema IN VARCHAR2, plang IN VARCHAR2);
FUNCTION getdbversion RETURN VARCHAR2;
END adm;
/
CREATE OR REPLACE PACKAGE BODY adm
AS
PROCEDURE systrackscript (n IN VARCHAR2, r IN VARCHAR2, force IN NUMBER)
AS
revisionnr VARCHAR2 (60);
scriptname VARCHAR2 (60);
BEGIN
-- Als force = 1 dan wordt onvoorwaardelijk getrackt, anders
-- wordt niet getrackt als deze (n,r) al eerder werd getrackt
revisionnr := REPLACE (r, '$', '');
revisionnr := RTRIM (REPLACE (revisionnr, 'Revision: ', ''));
scriptname := REPLACE (n, '$', '');
scriptname := RTRIM (REPLACE (scriptname, 'Workfile: ', ''));
IF force = 1
THEN
INSERT INTO adm_tracking (adm_tracking_name, adm_tracking_revision
)
VALUES (scriptname, revisionnr
);
ELSE
BEGIN
UPDATE adm_tracking
SET adm_tracking_date = SYSDATE, adm_tracking_osuser = SYS_CONTEXT ('USERENV', 'OS_USER')
WHERE UPPER (adm_tracking_name) = UPPER (scriptname)
AND UPPER (adm_tracking_revision) = UPPER (revisionnr);
IF SQL%ROWCOUNT = 0
THEN
INSERT INTO adm_tracking (adm_tracking_name, adm_tracking_revision
)
VALUES (scriptname, revisionnr
);
END IF;
END;
END IF;
END;
-- Voor SVN is dit handiger, vereist alleen de svn-id string
-- ($Id$)
PROCEDURE systrackscriptId (svnid IN VARCHAR2, force IN NUMBER)
AS
revisionnr VARCHAR2 (60);
scriptname VARCHAR2 (60);
tempstr VARCHAR2 (60);
BEGIN
-- op het gemakje ontleden
tempstr := REPLACE (svnid, '$Id: ', '');
tempstr := RTRIM(SUBSTR(tempstr, 1, instr(tempstr, ' ', 1, 2)));
-- is nu: ADM_PAC.SRC 19151
scriptname := RTRIM(SUBSTR(tempstr, 1, instr(tempstr, ' ', 1, 1))); -- ADM_PAC
revisionnr := SUBSTR(tempstr, instr(tempstr, ' ', 1, 1) + 1); -- 19151
IF force = 1
THEN
INSERT INTO adm_tracking (adm_tracking_name, adm_tracking_revision)
VALUES (scriptname, revisionnr);
ELSE
BEGIN
UPDATE adm_tracking
SET adm_tracking_date = SYSDATE, adm_tracking_osuser = SYS_CONTEXT ('USERENV', 'OS_USER')
WHERE UPPER (adm_tracking_name) = UPPER (scriptname)
AND UPPER (adm_tracking_revision) = UPPER (revisionnr);
IF SQL%ROWCOUNT = 0
THEN
INSERT INTO adm_tracking (adm_tracking_name, adm_tracking_revision)
VALUES (scriptname, revisionnr);
END IF;
END;
END IF;
END;
-- Trackt altijd
PROCEDURE systrackscriptId (svnid IN VARCHAR2)
AS
BEGIN
adm.systrackscriptId(svnid, 1);
END;
-- DDL. Probeert een object (TABLE, INDEX e.d.) te droppen, maar moppert niet als die niet bestond
-- Hiermee voorkomen we foutmeldingen in logfiles die niet erg zijn
PROCEDURE trydrop (n IN VARCHAR2)
AS
stmt VARCHAR2 (1000);
BEGIN
stmt := 'DROP ' || n;
EXECUTE IMMEDIATE stmt;
DBMS_OUTPUT.put_line ('Found, successfully dropped: ' || n);
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE IN (-942, -1418, -2289, -4043, -4080)
THEN
-- did not exist, voor table, view, index, sequence, object and trigger
DBMS_OUTPUT.put_line ('Not found, no need to drop: ' || n);
NULL;
ELSE
raise_application_error (-20001, 'Error trying to DROP ' || n || ': ' || SQLERRM);
END IF;
END;
-- DDL. Probeert een object (TABLE, INDEX e.d.) te alteren, maar moppert niet als die niet bestond
-- Hiermee voorkomen we foutmeldingen in logfiles die niet erg zijn
PROCEDURE tryalter (n IN VARCHAR2)
AS
stmt VARCHAR2 (1000);
BEGIN
stmt := 'ALTER ' || n;
EXECUTE IMMEDIATE stmt;
DBMS_OUTPUT.put_line ('Found, successfully altered: ' || n);
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE IN (-942, -1418, -2289, -4043, -4080, -2443)
THEN
-- did not exist, voor table, view, index, sequence, object and trigger, constraint
DBMS_OUTPUT.put_line ('Not found, not altered: ' || n);
NULL;
ELSIF SQLCODE IN (-955)
THEN
-- object already exist
DBMS_OUTPUT.put_line ('Already exists, not altered: ' || n);
NULL;
ELSE
raise_application_error (-20001, 'Error trying to ALTER ' || n || ': ' || SQLERRM);
END IF;
END;
-- formerly in FAC-package
PROCEDURE registerversion (pmaj IN NUMBER, pmin IN NUMBER, ppatch IN VARCHAR2, pschema IN VARCHAR2, plang IN VARCHAR2)
AS
verstring fac_module.fac_module_version%TYPE;
revisionnr fac_version.fac_version_schema%TYPE;
BEGIN
IF pmaj IS NOT NULL AND pmin IS NOT NULL AND ppatch IS NOT NULL
THEN
verstring := TO_CHAR (pmaj) || '.' || TO_CHAR (pmin) || '.' || TO_CHAR (ppatch);
UPDATE fac_module
SET fac_module_version = verstring;
UPDATE fac_version
SET fac_version_major = pmaj,
fac_version_minor = pmin,
fac_version_patch = ppatch,
fac_version_schema = pschema,
fac_version_date = SYSDATE;
UPDATE fac_message
SET fac_message_text = 'FACILITOR ' || verstring || 'DB' || TO_CHAR(pschema)
WHERE fac_message_code = 'FAC_M002';
END IF;
IF plang IS NOT NULL
THEN
UPDATE fac_version
SET fac_version_lang = plang;
END IF;
END;
FUNCTION getdbversion RETURN VARCHAR2
AS
verstring VARCHAR2(100);
BEGIN
SELECT 'DB'||fac_version_schema||'/'||fac_version_cust||fac_version_custnr||'-'||COALESCE(fac_version_otap,'P*')
INTO verstring
FROM fac_version;
RETURN verstring;
END;
END adm;
/
REGISTERRUN('$Id$')