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(
|
wwv_flow_api.create_page_button(
|
||||||
p_id=>wwv_flow_api.id(21547186191979378)
|
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_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||||
,p_button_name=>'SEARCH'
|
,p_button_name=>'SEARCH'
|
||||||
,p_button_action=>'SUBMIT'
|
,p_button_action=>'SUBMIT'
|
||||||
@ -832,20 +832,22 @@ wwv_flow_api.create_page_button(
|
|||||||
p_id=>wwv_flow_api.id(14930403398872313)
|
p_id=>wwv_flow_api.id(14930403398872313)
|
||||||
,p_button_sequence=>40
|
,p_button_sequence=>40
|
||||||
,p_button_plug_id=>wwv_flow_api.id(14220162747378949)
|
,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_static_id=>'BUTTON_REBUILD'
|
||||||
,p_button_action=>'REDIRECT_PAGE'
|
,p_button_action=>'REDIRECT_PAGE'
|
||||||
,p_button_template_options=>'#DEFAULT#'
|
,p_button_template_options=>'#DEFAULT#'
|
||||||
,p_button_template_id=>wwv_flow_api.id(9145249029569999)
|
,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_position=>'RIGHT_OF_TITLE'
|
||||||
,p_button_redirect_url=>'f?p=&APP_ID.:955:&SESSION.::&DEBUG.:955:P955_REBUILD:Y'
|
,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_button_cattributes=>'title="Rebuild USER_SOURCE_VIEWS table"'
|
||||||
|
,p_security_scheme=>wwv_flow_api.id(9556228749501966)
|
||||||
);
|
);
|
||||||
wwv_flow_api.create_page_item(
|
wwv_flow_api.create_page_item(
|
||||||
p_id=>wwv_flow_api.id(14930610862872315)
|
p_id=>wwv_flow_api.id(14930610862872315)
|
||||||
,p_name=>'P955_REBUILD'
|
,p_name=>'P955_REBUILD'
|
||||||
,p_item_sequence=>10
|
,p_item_sequence=>30
|
||||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||||
,p_use_cache_before_default=>'NO'
|
,p_use_cache_before_default=>'NO'
|
||||||
,p_display_as=>'NATIVE_HIDDEN'
|
,p_display_as=>'NATIVE_HIDDEN'
|
||||||
@ -854,7 +856,7 @@ wwv_flow_api.create_page_item(
|
|||||||
wwv_flow_api.create_page_item(
|
wwv_flow_api.create_page_item(
|
||||||
p_id=>wwv_flow_api.id(14931154674872320)
|
p_id=>wwv_flow_api.id(14931154674872320)
|
||||||
,p_name=>'P955_VIEW_NAME'
|
,p_name=>'P955_VIEW_NAME'
|
||||||
,p_item_sequence=>20
|
,p_item_sequence=>40
|
||||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||||
,p_display_as=>'NATIVE_HIDDEN'
|
,p_display_as=>'NATIVE_HIDDEN'
|
||||||
,p_attribute_01=>'Y'
|
,p_attribute_01=>'Y'
|
||||||
@ -862,7 +864,7 @@ wwv_flow_api.create_page_item(
|
|||||||
wwv_flow_api.create_page_item(
|
wwv_flow_api.create_page_item(
|
||||||
p_id=>wwv_flow_api.id(21457026534924150)
|
p_id=>wwv_flow_api.id(21457026534924150)
|
||||||
,p_name=>'P955_SEARCH_VIEWS'
|
,p_name=>'P955_SEARCH_VIEWS'
|
||||||
,p_item_sequence=>30
|
,p_item_sequence=>50
|
||||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||||
,p_prompt=>'View Like'
|
,p_prompt=>'View Like'
|
||||||
,p_display_as=>'NATIVE_TEXT_FIELD'
|
,p_display_as=>'NATIVE_TEXT_FIELD'
|
||||||
@ -880,7 +882,7 @@ wwv_flow_api.create_page_item(
|
|||||||
wwv_flow_api.create_page_item(
|
wwv_flow_api.create_page_item(
|
||||||
p_id=>wwv_flow_api.id(21540738826954401)
|
p_id=>wwv_flow_api.id(21540738826954401)
|
||||||
,p_name=>'P955_SEARCH_SOURCE'
|
,p_name=>'P955_SEARCH_SOURCE'
|
||||||
,p_item_sequence=>50
|
,p_item_sequence=>70
|
||||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||||
,p_prompt=>'Source Contains'
|
,p_prompt=>'Source Contains'
|
||||||
,p_display_as=>'NATIVE_TEXT_FIELD'
|
,p_display_as=>'NATIVE_TEXT_FIELD'
|
||||||
@ -898,7 +900,7 @@ wwv_flow_api.create_page_item(
|
|||||||
wwv_flow_api.create_page_item(
|
wwv_flow_api.create_page_item(
|
||||||
p_id=>wwv_flow_api.id(21540881630954402)
|
p_id=>wwv_flow_api.id(21540881630954402)
|
||||||
,p_name=>'P955_SEARCH_COLUMNS'
|
,p_name=>'P955_SEARCH_COLUMNS'
|
||||||
,p_item_sequence=>40
|
,p_item_sequence=>60
|
||||||
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
,p_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||||
,p_prompt=>'Column Like'
|
,p_prompt=>'Column Like'
|
||||||
,p_display_as=>'NATIVE_TEXT_FIELD'
|
,p_display_as=>'NATIVE_TEXT_FIELD'
|
||||||
@ -916,7 +918,15 @@ wwv_flow_api.create_page_item(
|
|||||||
wwv_flow_api.create_page_item(
|
wwv_flow_api.create_page_item(
|
||||||
p_id=>wwv_flow_api.id(21540977667954403)
|
p_id=>wwv_flow_api.id(21540977667954403)
|
||||||
,p_name=>'P955_SHOW_SEARCH'
|
,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_item_plug_id=>wwv_flow_api.id(14220162747378949)
|
||||||
,p_display_as=>'NATIVE_HIDDEN'
|
,p_display_as=>'NATIVE_HIDDEN'
|
||||||
,p_attribute_01=>'Y'
|
,p_attribute_01=>'Y'
|
||||||
@ -998,8 +1008,6 @@ wwv_flow_api.create_page_process(
|
|||||||
''))
|
''))
|
||||||
,p_process_clob_language=>'PLSQL'
|
,p_process_clob_language=>'PLSQL'
|
||||||
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
|
,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(
|
wwv_flow_api.create_page_process(
|
||||||
p_id=>wwv_flow_api.id(21558331173182171)
|
p_id=>wwv_flow_api.id(21558331173182171)
|
||||||
@ -1017,6 +1025,9 @@ wwv_flow_api.create_page_process(
|
|||||||
' :P955_VIEW_NAME := NULL;',
|
' :P955_VIEW_NAME := NULL;',
|
||||||
' :P955_SHOW_SEARCH := ''Y'';',
|
' :P955_SHOW_SEARCH := ''Y'';',
|
||||||
'END IF;',
|
'END IF;',
|
||||||
|
'',
|
||||||
|
'-- make button HOT, sometimes',
|
||||||
|
':P955_REFRESH_HOT := ''t-Button--hot'';',
|
||||||
''))
|
''))
|
||||||
,p_process_clob_language=>'PLSQL'
|
,p_process_clob_language=>'PLSQL'
|
||||||
,p_error_display_location=>'INLINE_IN_NOTIFICATION'
|
,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)
|
-- 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 (
|
PROCEDURE clob_to_lines (
|
||||||
in_name VARCHAR2,
|
in_name VARCHAR2,
|
||||||
in_clob CLOB,
|
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
|
AS
|
||||||
PRAGMA AUTONOMOUS_TRANSACTION;
|
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
|
BEGIN
|
||||||
app.log_module();
|
app.log_module(CASE WHEN in_force THEN 'Y' END);
|
||||||
--
|
|
||||||
DELETE FROM user_source_views;
|
-- 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 (
|
FOR c IN (
|
||||||
SELECT
|
SELECT
|
||||||
v.view_name,
|
v.view_name,
|
||||||
DBMS_METADATA.GET_DDL('VIEW', v.view_name) AS content
|
DBMS_METADATA.GET_DDL('VIEW', v.view_name) AS content
|
||||||
FROM user_views v
|
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
|
) 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*)', ''));
|
app_actions.clob_to_lines(c.view_name, REGEXP_REPLACE(c.content, '^(\s*)', ''));
|
||||||
END LOOP;
|
END LOOP;
|
||||||
--
|
--
|
||||||
COMMIT;
|
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();
|
app.log_success();
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user