Files
Database/_UP/epilogue.inc
Erik Groener eec8c8a9cc FCLT#77060 Minimale systeem vereiste Oracle 19
svn path=/Database/trunk/; revision=60492
2023-05-23 14:53:55 +00:00

116 lines
3.6 KiB
SQL

/* _up/epilogue.inc
* Epiloog van update script van Facilitor, to be included in every schema update
*
* $Revision$
* $Id$
*/
COMMIT;
-- Bij een DROP TABLE wordt nogal eens de PURGE vergeten
PURGE RECYCLEBIN;
-- Schema-naam uit MLD_T_UITVOERTIJD verwijderen.
--
-- data_default is van het datatype LONG. Daarop kan geen string-bewerking als INSTR(), SUBSTR() en REPLACE() worden gedaan.
-- Daarom moeten de benodigde gegevens eerst in een tijdelijke tabel ingelezen worden zodat het datatype VARCHAR2 wordt. Voor
-- het huidige doel (de owner van MLD_T_UITVOERTIJD verwijderen) is de stringlengte van 1000 voldoende.
-- Met FETCH .. BULK COLLECT INTO .. worden alle records die volgen uit de query in 1 keer opgehaald. Dit is sneller dan een fetch in een loop.
--
DECLARE
TYPE ut_row IS RECORD
( tab_name VARCHAR2(100)
, col_name VARCHAR2(100)
, data_default VARCHAR2(1000)
);
TYPE ut_tab IS TABLE OF ut_row
INDEX BY PLS_INTEGER;
qry_txt VARCHAR2(1000);
upd_txt VARCHAR2(1000);
l_table ut_tab;
l_cursor SYS_REFCURSOR;
l_pos INTEGER;
l_default VARCHAR2(1000);
BEGIN
qry_txt := 'SELECT table_name, column_name, data_default'
|| ' FROM user_tab_columns'
|| ' WHERE data_type = ''MLD_T_UITVOERTIJD''';
OPEN l_cursor FOR qry_txt;
FETCH l_cursor BULK COLLECT INTO l_table;
CLOSE l_cursor;
FOR indx IN 1 .. l_table.COUNT
LOOP
l_pos := INSTR(l_table(indx).data_default, '"."');
IF (l_pos > 0)
THEN
l_default := REPLACE(REPLACE(SUBSTR(l_table(indx).data_default, l_pos+3, 100), '"', ''),'''','');
upd_txt := 'ALTER TABLE '|| l_table(indx).tab_name ||' MODIFY '|| l_table(indx).col_name ||' DEFAULT '|| l_default;
dbms_output.put_line(upd_txt);
EXECUTE IMMEDIATE upd_txt;
END IF;
END LOOP;
END;
/
///////////////////////////// now recreate all views, triggers etc acc to the latest state ///////
#include "recreate.inc"
#ifdef POST_RECREATE
#include POST_RECREATE
#endif
BEGIN
fac.fac_cleanup;
END;
/
INSERT INTO adm_tracking
(adm_tracking_name, adm_tracking_revision)
VALUES
('Database upgraded', 'DB' || _DBV_STRING);
COMMIT;
select 'Upgrade has completed in ' || ROUND(( dbms_utility.get_time - :update_start )/100) || ' seconds.' from dual;
/* Report invalid objects, if any */
SET ECHO OFF
SET HEADING OFF
SET LINESIZE 132
// Soms nog niet goed
BEGIN
DBMS_UTILITY.COMPILE_SCHEMA(USER, FALSE);
DBMS_UTILITY.COMPILE_SCHEMA(USER, FALSE);
END;
/
PROMPT List of all invalid objects after Facilitor upgrade.
PROMPT Some errors may resolve by running the customer specific script next.
SELECT 'OR'||'A-'||'DB'||_DBV_STRING||' Warning: ' || object_type || ' ' || object_name || ' is ' || status
FROM user_objects
WHERE object_type IN ('VIEW', 'TRIGGER', 'PACKAGE', 'PROCEDURE', 'FUNCTION', 'PACKAGE BODY')
AND status <> 'VALID'
ORDER BY object_name;
SET HEADING ON
column name format a32
column text format a60
column line format 9999
column pos format 9999
SET HEADING ON
SELECT TYPE, NAME, LINE, POSITION POS, TEXT
FROM USER_ERRORS
ORDER BY NAME, TYPE, SEQUENCE;
SET ECHO OFF
SET FEEDBACK OFF
PROMPT ======================================================================
SELECT 'Schema Facilitor@' || USER || ' is now ' || fac.getdbversion() FROM DUAL;
PROMPT
PROMPT Your schema upgrade is ready. Please check the logfile for errors.
PROMPT If in doubt please contact: Facilitor Helpdesk +31 53 4800 700
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile
SPOOL OFF