-- -------------------------------------------------------------------------------- -- -- Oracle APEX source export file -- -- The contents of this file are intended for review and analysis purposes only. -- Developers must use the Application Builder to make modifications to an -- application. Changes to this file will not be reflected in the application. -- -- -------------------------------------------------------------------------------- -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Region: Selected Records -- SQL Query SELECT t.column_value FROM TABLE(APEX_STRING.SPLIT(RTRIM(:P951_SELECTED_COLUMNS, ':'), ':')) t; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: ACTION_FIX_DATATYPE -- PL/SQL Code app.log_action( 'FIX_DATATYPE', app.get_item('$TABLE_NAME'), app.get_item('$COLUMN_NAME'), app.get_item('$DATA_TYPE') ); -- FOR c IN ( SELECT t.fix FROM obj_constraints_fix_dt2 t WHERE t.column_name = app.get_item('$COLUMN_NAME') AND t.data_type = app.get_item('$DATA_TYPE') ) LOOP EXECUTE IMMEDIATE RTRIM(c.fix, ';'); app.log_result('DATA TYPE FIXED', c.fix); END LOOP; -- :P951_FIX_DATATYPE := NULL; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: SAVE_CONSTRAINTS -- PL/SQL Code to Insert/Update/Delete app.log_action('SAVE_CONSTRAINTS', app.get_item('$TABLE_NAME'), :CONSTRAINT_NAME_OLD, :CONSTRAINT_NAME, :IS_DISABLED); -- EXECUTE IMMEDIATE 'ALTER TABLE #OWNER#.' || :TABLE_NAME || ' ' || CASE WHEN :IS_DISABLED = 'Y' THEN 'DISABLE' ELSE 'ENABLE' END || ' CONSTRAINT ' || :CONSTRAINT_NAME_OLD; -- IF :CONSTRAINT_NAME_OLD != :CONSTRAINT_NAME THEN EXECUTE IMMEDIATE 'ALTER TABLE #OWNER#.' || :TABLE_NAME || ' RENAME CONSTRAINT ' || :CONSTRAINT_NAME_OLD || ' TO ' || :CONSTRAINT_NAME; -- :CONSTRAINT_NAME_OLD := :CONSTRAINT_NAME; END IF; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: ACTION_ADD_MISSING_INDEX -- PL/SQL Code app.log_action('ADD_MISSING_INDEX', app.get_item('$INDEX_NAME')); -- FOR c IN ( SELECT t.fix FROM obj_indexes_missing t WHERE t.index_name = app.get_item('$INDEX_NAME') ) LOOP EXECUTE IMMEDIATE RTRIM(c.fix, ';'); app.log_result('INDEX CREATED', c.fix); END LOOP; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: INIT_DEFAULTS -- PL/SQL Code -- recover table from constraint IF :P951_TABLE_NAME IS NULL AND :P951_CONSTRAINT_NAME IS NOT NULL THEN SELECT MAX(t.table_name) INTO :P951_TABLE_NAME FROM user_constraints t WHERE t.constraint_name = :P951_CONSTRAINT_NAME; END IF; -- IF :P951_TABLE_NAME IS NULL AND :P951_INDEX_NAME IS NOT NULL THEN SELECT MAX(t.table_name) INTO :P951_TABLE_NAME FROM user_indexes t WHERE t.index_name = :P951_INDEX_NAME; END IF; -- get table comment IF :P951_TABLE_NAME IS NOT NULL THEN SELECT LTRIM(RTRIM(REGEXP_REPLACE(MAX(t.comments), '^\[[^]]+\]\s*', ''))) INTO :P951_TABLE_COMMENTS FROM user_tab_comments t WHERE t.table_name = :P951_TABLE_NAME; END IF; -- searching... :P951_SHOW_SEARCH := NULL; -- IF (:P951_SEARCH_TABLES IS NOT NULL OR :P951_SEARCH_COLUMNS IS NOT NULL OR :P951_SEARCH_DATA_TYPE IS NOT NULL OR :P951_SEARCH_SIZE IS NOT NULL ) THEN :P951_SHOW_SEARCH := 'Y'; :P951_TABLE_NAME := NULL; END IF; -- :P951_SEARCH_TABLES := NVL(:P951_SEARCH_TABLES, :P951_TABLE_NAME); -- show columns only sometimes :P951_SHOW_COLUMNS := CASE WHEN :P951_TABLE_NAME IS NOT NULL OR :P951_SEARCH_COLUMNS IS NOT NULL OR :P951_SEARCH_DATA_TYPE IS NOT NULL OR :P951_SEARCH_SIZE IS NOT NULL THEN 'Y' END; -- show fixes :P951_SHOW_FIXES := CASE WHEN :P951_TABLE_NAME IS NOT NULL THEN 'Y' -- WHEN :P951_SHOW_COLUMNS IS NULL THEN 'Y' END; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: SAVE_TABLES -- PL/SQL Code to Insert/Update/Delete app_actions.save_obj_tables ( in_action => :APEX$ROW_STATUS, in_table_name => :TABLE_NAME, in_table_group => :TABLE_GROUP, in_is_dml_handler => :IS_DML_HANDLER, in_is_row_mov => :IS_ROW_MOV, in_is_read_only => :IS_READ_ONLY, in_comments => :COMMENTS ); -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: SAVE_COLUMNS -- PL/SQL Code to Insert/Update/Delete app_actions.save_obj_columns ( in_action => :APEX$ROW_STATUS, in_table_name => NVL(:TABLE_NAME, :P951_TABLE_NAME), in_column_id => :COLUMN_ID, in_column_name => :COLUMN_NAME, in_column_name_old => :COLUMN_NAME_OLD, in_is_nn => :IS_NN, in_data_type => :DATA_TYPE, in_data_default => :DATA_DEFAULT, in_comments => :COMMENTS ); -- :COLUMN_NAME_OLD := :COLUMN_NAME; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: INIT_PARTITION_HEADERS -- PL/SQL Code app.log_action('PARTITION_HEADERS', app.get_item('$TABLE_NAME')); -- FOR c IN ( WITH x AS ( SELECT LEVEL AS column_position, '$PART_HEADER_' || LEVEL AS item_name FROM DUAL CONNECT BY LEVEL <= 4 ) SELECT x.item_name, c.column_name AS item_value FROM x LEFT JOIN user_part_key_columns c ON c.name = app.get_item('$TABLE_NAME') AND c.column_position = x.column_position ) LOOP --app.log_result(c.item_name, c.item_value); app.set_item(c.item_name, c.item_value); END LOOP; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: ACTION_DROP_PARTITION -- PL/SQL Code app.log_action('DROP_PARTITION', app.get_item('$TABLE_NAME'), app.get_item('$PARTITION')); -- EXECUTE IMMEDIATE 'DELETE FROM ' || app.get_item('$TABLE_NAME') || ' PARTITION (' || app.get_item('$PARTITION') || ')'; -- EXECUTE IMMEDIATE 'ALTER TABLE ' || app.get_item('$TABLE_NAME') || ' DROP PARTITION ' || app.get_item('$PARTITION') || ' UPDATE INDEXES'; -- app.log_success(); -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: ACTION_PURGE -- PL/SQL Code app.log_action('PURGE'); -- EXECUTE IMMEDIATE 'PURGE RECYCLEBIN'; -- FOR c IN ( SELECT t.table_name FROM user_unused_col_tabs t ) LOOP EXECUTE IMMEDIATE 'ALTER TABLE ' || c.table_name || ' DROP UNUSED COLUMNS CHECKPOINT 10000'; END LOOP; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: ACTION_SHRINK_TABLES -- PL/SQL Code DECLARE q_indexes VARCHAR2(32767); BEGIN -- cant put this into package due to missing grants FOR t IN ( SELECT t.table_name FROM user_tables t WHERE t.table_name = NVL(app.get_item('$TABLE_NAME'), t.table_name) ORDER BY 1 ) LOOP BEGIN app.log_action('SHRINK_TABLE', t.table_name); q_indexes := ''; -- save functional indexes FOR c IN ( SELECT DBMS_METADATA.GET_DDL('INDEX', i.index_name, '#OWNER#') AS content FROM user_indexes i WHERE i.index_type LIKE 'FUNCTION%' AND i.table_name = t.table_name ) LOOP q_indexes := q_indexes || c.content || ';'; END LOOP; -- drop functional indexes FOR c IN ( SELECT i.index_name FROM user_indexes i WHERE i.index_type LIKE 'FUNCTION%' AND i.table_name = t.table_name ) LOOP EXECUTE IMMEDIATE 'DROP INDEX #OWNER#.' || c.index_name; END LOOP; -- shrink table EXECUTE IMMEDIATE 'ALTER TABLE #OWNER#.' || t.table_name || ' ENABLE ROW MOVEMENT'; EXECUTE IMMEDIATE 'ALTER TABLE #OWNER#.' || t.table_name || ' SHRINK SPACE'; EXECUTE IMMEDIATE 'ALTER TABLE #OWNER#.' || t.table_name || ' DISABLE ROW MOVEMENT'; -- rebuild functional indexes IF q_indexes IS NOT NULL THEN FOR c IN ( WITH t AS ( SELECT q_indexes AS src FROM DUAL ) SELECT REGEXP_SUBSTR(src, '([^;]+)', 1, LEVEL) AS col FROM t CONNECT BY REGEXP_INSTR(src, '([^;]+)', 1, LEVEL) > 0 ORDER BY LEVEL ASC ) LOOP DBMS_OUTPUT.PUT_LINE(c.col); EXECUTE IMMEDIATE c.col; END LOOP; END IF; -- refresh statistics EXECUTE IMMEDIATE 'ANALYZE TABLE #OWNER#.' || t.table_name || ' COMPUTE STATISTICS FOR TABLE'; -- app.log_success(); EXCEPTION WHEN OTHERS THEN EXECUTE IMMEDIATE 'ALTER TABLE #OWNER#.' || t.table_name || ' DISABLE ROW MOVEMENT'; -- app.raise_error(); END; END LOOP; END; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: ACTION_RECALC_STATS -- PL/SQL Code FOR t IN ( SELECT t.table_name FROM user_tables t WHERE t.table_name = NVL(app.get_item('$TABLE_NAME'), t.table_name) ORDER BY 1 ) LOOP app.log_action('RECALC_STATS', t.table_name); -- DBMS_STATS.GATHER_TABLE_STATS('#OWNER#', t.table_name); -- app.log_success(); END LOOP; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Process: SAVE_PARTITIONS -- PL/SQL Code to Insert/Update/Delete app.log_action('SAVE_PARTITIONS', app.get_item('$TABLE_NAME'), :PARTITION_NAME_OLD, :PARTITION_NAME, :READ_ONLY); -- rename partition IF :PARTITION_NAME != :PARTITION_NAME_OLD THEN EXECUTE IMMEDIATE 'ALTER TABLE ' || app.get_item('$TABLE_NAME') || ' RENAME PARTITION ' || :PARTITION_NAME_OLD || ' TO ' || :PARTITION_NAME; END IF; -- lock/unlock partition IF :READ_ONLY != :READ_ONLY_OLD THEN EXECUTE IMMEDIATE 'ALTER TABLE ' || app.get_item('$TABLE_NAME') || ' MODIFY PARTITION ' || :PARTITION_NAME || ' READ ' || CASE WHEN :READ_ONLY = 'YES' THEN 'ONLY' ELSE 'WRITE' END; END IF; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Action: NATIVE_EXECUTE_PLSQL_CODE -- PL/SQL Code app_actions.move_table_columns_bottom ( in_table_name => :P951_TABLE_NAME, in_columns => :P951_SELECTED_COLUMNS ); -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Region: Fix Data Types -- SQL Query SELECT 1 FROM obj_constraints_fix_dt1 WHERE ROWNUM = 1; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Region: Check Data Types -- SQL Query SELECT 1 FROM obj_constraints_fix_dt2 WHERE ROWNUM = 1; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Region: Partitions -- SQL Query SELECT 1 FROM obj_partitions p WHERE ROWNUM = 1; -- ---------------------------------------- -- Page 951: #fa-table-check &PAGE_NAME. -- Region: Missing Indexes -- SQL Query SELECT 1 FROM obj_indexes_missing WHERE ROWNUM = 1;