Refresh view source table only when needed and for what is needed
This commit is contained in:
parent
d4e71a5ca8
commit
3e9dc71d3b
@ -770,7 +770,7 @@ wwv_flow_api.create_ig_report_column(
|
||||
);
|
||||
wwv_flow_api.create_page_button(
|
||||
p_id=>wwv_flow_api.id(21547186191979378)
|
||||
,p_button_sequence=>50
|
||||
,p_button_sequence=>80
|
||||
,p_button_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_button_name=>'SEARCH'
|
||||
,p_button_action=>'SUBMIT'
|
||||
@ -832,20 +832,22 @@ wwv_flow_api.create_page_button(
|
||||
p_id=>wwv_flow_api.id(14930403398872313)
|
||||
,p_button_sequence=>40
|
||||
,p_button_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_button_name=>'REBUILD'
|
||||
,p_button_name=>'REFRESH_VIEWS'
|
||||
,p_button_static_id=>'BUTTON_REBUILD'
|
||||
,p_button_action=>'REDIRECT_PAGE'
|
||||
,p_button_template_options=>'#DEFAULT#'
|
||||
,p_button_template_id=>wwv_flow_api.id(9145249029569999)
|
||||
,p_button_image_alt=>'Rebuild'
|
||||
,p_button_image_alt=>'Refresh Views'
|
||||
,p_button_position=>'RIGHT_OF_TITLE'
|
||||
,p_button_redirect_url=>'f?p=&APP_ID.:955:&SESSION.::&DEBUG.:955:P955_REBUILD:Y'
|
||||
,p_button_css_classes=>'&P955_REFRESH_HOT.'
|
||||
,p_button_cattributes=>'title="Rebuild USER_SOURCE_VIEWS table"'
|
||||
,p_security_scheme=>wwv_flow_api.id(9556228749501966)
|
||||
);
|
||||
wwv_flow_api.create_page_item(
|
||||
p_id=>wwv_flow_api.id(14930610862872315)
|
||||
,p_name=>'P955_REBUILD'
|
||||
,p_item_sequence=>10
|
||||
,p_item_sequence=>30
|
||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_use_cache_before_default=>'NO'
|
||||
,p_display_as=>'NATIVE_HIDDEN'
|
||||
@ -854,7 +856,7 @@ wwv_flow_api.create_page_item(
|
||||
wwv_flow_api.create_page_item(
|
||||
p_id=>wwv_flow_api.id(14931154674872320)
|
||||
,p_name=>'P955_VIEW_NAME'
|
||||
,p_item_sequence=>20
|
||||
,p_item_sequence=>40
|
||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_display_as=>'NATIVE_HIDDEN'
|
||||
,p_attribute_01=>'Y'
|
||||
@ -862,7 +864,7 @@ wwv_flow_api.create_page_item(
|
||||
wwv_flow_api.create_page_item(
|
||||
p_id=>wwv_flow_api.id(21457026534924150)
|
||||
,p_name=>'P955_SEARCH_VIEWS'
|
||||
,p_item_sequence=>30
|
||||
,p_item_sequence=>50
|
||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_prompt=>'View Like'
|
||||
,p_display_as=>'NATIVE_TEXT_FIELD'
|
||||
@ -880,7 +882,7 @@ wwv_flow_api.create_page_item(
|
||||
wwv_flow_api.create_page_item(
|
||||
p_id=>wwv_flow_api.id(21540738826954401)
|
||||
,p_name=>'P955_SEARCH_SOURCE'
|
||||
,p_item_sequence=>50
|
||||
,p_item_sequence=>70
|
||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_prompt=>'Source Contains'
|
||||
,p_display_as=>'NATIVE_TEXT_FIELD'
|
||||
@ -898,7 +900,7 @@ wwv_flow_api.create_page_item(
|
||||
wwv_flow_api.create_page_item(
|
||||
p_id=>wwv_flow_api.id(21540881630954402)
|
||||
,p_name=>'P955_SEARCH_COLUMNS'
|
||||
,p_item_sequence=>40
|
||||
,p_item_sequence=>60
|
||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_prompt=>'Column Like'
|
||||
,p_display_as=>'NATIVE_TEXT_FIELD'
|
||||
@ -916,7 +918,15 @@ wwv_flow_api.create_page_item(
|
||||
wwv_flow_api.create_page_item(
|
||||
p_id=>wwv_flow_api.id(21540977667954403)
|
||||
,p_name=>'P955_SHOW_SEARCH'
|
||||
,p_item_sequence=>60
|
||||
,p_item_sequence=>10
|
||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_display_as=>'NATIVE_HIDDEN'
|
||||
,p_attribute_01=>'Y'
|
||||
);
|
||||
wwv_flow_api.create_page_item(
|
||||
p_id=>wwv_flow_api.id(21543913787954433)
|
||||
,p_name=>'P955_REFRESH_HOT'
|
||||
,p_item_sequence=>20
|
||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||
,p_display_as=>'NATIVE_HIDDEN'
|
||||
,p_attribute_01=>'Y'
|
||||
@ -998,8 +1008,6 @@ wwv_flow_api.create_page_process(
|
||||
''))
|
||||
,p_process_clob_language=>'PLSQL'
|
||||
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
|
||||
,p_process_when=>'P955_REBUILD'
|
||||
,p_process_when_type=>'ITEM_IS_NOT_NULL'
|
||||
);
|
||||
wwv_flow_api.create_page_process(
|
||||
p_id=>wwv_flow_api.id(21558331173182171)
|
||||
@ -1017,6 +1025,9 @@ wwv_flow_api.create_page_process(
|
||||
' :P955_VIEW_NAME := NULL;',
|
||||
' :P955_SHOW_SEARCH := ''Y'';',
|
||||
'END IF;',
|
||||
'',
|
||||
'-- make button HOT, sometimes',
|
||||
':P955_REFRESH_HOT := ''t-Button--hot'';',
|
||||
''))
|
||||
,p_process_clob_language=>'PLSQL'
|
||||
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
|
||||
|
||||
@ -267,10 +267,15 @@ CREATE OR REPLACE PACKAGE app_actions AS
|
||||
--
|
||||
-- Refresh views source (convert views source to lines)
|
||||
--
|
||||
PROCEDURE refresh_user_source_views;
|
||||
PROCEDURE refresh_user_source_views (
|
||||
in_force BOOLEAN := FALSE
|
||||
);
|
||||
|
||||
|
||||
|
||||
--
|
||||
-- Convert VIEW content (LONG) to lines in user_source_view table
|
||||
--
|
||||
PROCEDURE clob_to_lines (
|
||||
in_name VARCHAR2,
|
||||
in_clob CLOB,
|
||||
|
||||
@ -748,25 +748,62 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
|
||||
|
||||
|
||||
|
||||
PROCEDURE refresh_user_source_views
|
||||
PROCEDURE refresh_user_source_views (
|
||||
in_force BOOLEAN := FALSE
|
||||
)
|
||||
AS
|
||||
PRAGMA AUTONOMOUS_TRANSACTION;
|
||||
--
|
||||
in_table_name CONSTANT user_objects.object_name%TYPE := 'USER_SOURCE_VIEWS';
|
||||
--
|
||||
v_table_time user_objects.last_ddl_time%TYPE;
|
||||
v_views_time user_objects.last_ddl_time%TYPE;
|
||||
BEGIN
|
||||
app.log_module();
|
||||
--
|
||||
DELETE FROM user_source_views;
|
||||
--
|
||||
app.log_module(CASE WHEN in_force THEN 'Y' END);
|
||||
|
||||
-- compare timestamps
|
||||
IF NOT in_force THEN
|
||||
SELECT o.last_ddl_time INTO v_table_time
|
||||
FROM user_objects o
|
||||
WHERE o.object_name = in_table_name
|
||||
AND o.object_type = 'TABLE';
|
||||
--
|
||||
SELECT MAX(o.last_ddl_time) INTO v_views_time
|
||||
FROM user_objects o
|
||||
WHERE o.object_type = 'VIEW';
|
||||
|
||||
-- refresh not needed
|
||||
IF v_table_time > v_views_time THEN
|
||||
app.log_result('SKIPPING');
|
||||
RETURN;
|
||||
END IF;
|
||||
ELSE
|
||||
-- in force mode cleanup whole table
|
||||
DELETE FROM user_source_views; -- truncate?
|
||||
END IF;
|
||||
|
||||
-- refresh table content
|
||||
FOR c IN (
|
||||
SELECT
|
||||
v.view_name,
|
||||
DBMS_METADATA.GET_DDL('VIEW', v.view_name) AS content
|
||||
FROM user_views v
|
||||
JOIN user_objects o
|
||||
ON o.object_name = v.view_name
|
||||
AND o.object_type = 'VIEW'
|
||||
AND (o.last_ddl_time >= v_table_time OR v_table_time IS NULL)
|
||||
) LOOP
|
||||
DBMS_OUTPUT.PUT_LINE(c.view_name);
|
||||
DELETE FROM user_source_views t
|
||||
WHERE t.name = c.view_name;
|
||||
--
|
||||
app_actions.clob_to_lines(c.view_name, REGEXP_REPLACE(c.content, '^(\s*)', ''));
|
||||
END LOOP;
|
||||
--
|
||||
COMMIT;
|
||||
|
||||
-- alter table to update last refresh date
|
||||
EXECUTE IMMEDIATE 'ALTER TABLE ' || in_table_name || ' ADD tmp_col NUMBER';
|
||||
EXECUTE IMMEDIATE 'ALTER TABLE ' || in_table_name || ' DROP COLUMN tmp_col';
|
||||
--
|
||||
app.log_success();
|
||||
EXCEPTION
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user