133 lines
4.3 KiB
SQL
133 lines
4.3 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
|
|
PROMPT List of all too long objectnames (max 30)
|
|
SELECT 'OR'||'A-'||'DB'||_DBV_STRING||' Name too long: ' || TABLE_NAME || '.' ||COLUMN_NAME|| ' ' || DATA_TYPE
|
|
FROM USER_TAB_COLUMNS
|
|
WHERE LENGTH(column_name) > 30;
|
|
|
|
SELECT 'OR'||'A-'||'DB'||_DBV_STRING||' Name too long: CONSTRAINT ' || constraint_name
|
|
FROM user_constraints
|
|
WHERE LENGTH (constraint_name) > 30;
|
|
|
|
SELECT 'OR'||'A-'||'DB'||_DBV_STRING||' Name too long: ' || object_type || ' ' || object_name
|
|
FROM user_objects
|
|
WHERE LENGTH (object_name) > 30;
|
|
|
|
/* In packages */
|
|
SELECT 'OR'||'A-'||'DB'||_DBV_STRING||' Name too long: ' || object_name || '.' || procedure_name
|
|
FROM user_procedures
|
|
WHERE LENGTH (procedure_name) > 30;
|
|
|
|
// 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
|