Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
eeffe12c9a | ||
|
|
67bb97ae8a | ||
|
|
3ba440705e | ||
|
|
cc9429c3e1 | ||
|
|
2418416b9a | ||
|
|
728f3baf97 | ||
|
|
50ebe0180d | ||
|
|
fb702e6702 | ||
|
|
f878e6865b | ||
|
|
34871a7dfc | ||
|
|
e7c8ab53a2 | ||
|
|
0536ece55a | ||
|
|
1648d5dc8a | ||
|
|
2bb36d612e | ||
|
|
6c2e24f48e | ||
|
|
9bd06fdd55 | ||
|
|
54ab201504 |
@ -14,6 +14,7 @@ GRANT CREATE TRIGGER TO core;
|
|||||||
GRANT CREATE SEQUENCE TO core;
|
GRANT CREATE SEQUENCE TO core;
|
||||||
GRANT CREATE PROCEDURE TO core;
|
GRANT CREATE PROCEDURE TO core;
|
||||||
GRANT CREATE JOB TO core;
|
GRANT CREATE JOB TO core;
|
||||||
|
GRANT CREATE SYNONYM TO core;
|
||||||
--
|
--
|
||||||
--GRANT EXECUTE ON DBMS_EPG TO core;
|
--GRANT EXECUTE ON DBMS_EPG TO core;
|
||||||
--GRANT EXECUTE ON DBMS_CRYPTO TO core;
|
--GRANT EXECUTE ON DBMS_CRYPTO TO core;
|
||||||
|
|||||||
@ -1,58 +0,0 @@
|
|||||||
BEGIN
|
|
||||||
DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP MATERIALIZED VIEW NAV_AVAILABILITY_MVW');
|
|
||||||
DBMS_OUTPUT.PUT_LINE('--');
|
|
||||||
DBMS_OUTPUT.PUT_LINE('-- MATERIALIZED VIEW NAV_AVAILABILITY_MVW DROPPED');
|
|
||||||
DBMS_OUTPUT.PUT_LINE('--');
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
NULL;
|
|
||||||
END;
|
|
||||||
/
|
|
||||||
--
|
|
||||||
CREATE MATERIALIZED VIEW nav_availability_mvw
|
|
||||||
BUILD DEFERRED
|
|
||||||
REFRESH COMPLETE ON DEMAND
|
|
||||||
AS
|
|
||||||
WITH w AS (
|
|
||||||
SELECT
|
|
||||||
a.owner,
|
|
||||||
a.application_id
|
|
||||||
FROM apex_applications a
|
|
||||||
JOIN lov_app_schemas s
|
|
||||||
ON s.owner = a.owner
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
p.application_id,
|
|
||||||
p.page_id,
|
|
||||||
MIN(p.authorization_scheme) AS auth_scheme,
|
|
||||||
--
|
|
||||||
MIN(CASE WHEN a.position = 0 THEN a.package_name END) AS package_name,
|
|
||||||
MIN(CASE WHEN a.position = 0 THEN a.object_name END) AS procedure_name,
|
|
||||||
MIN(CASE WHEN a.position = 0 THEN a.pls_type END) AS data_type,
|
|
||||||
MIN(CASE WHEN a.position = 1 THEN a.argument_name END) AS argument_name
|
|
||||||
FROM apex_application_pages p
|
|
||||||
JOIN w
|
|
||||||
ON w.application_id = p.application_id
|
|
||||||
LEFT JOIN all_procedures s
|
|
||||||
ON s.owner = w.owner
|
|
||||||
AND s.object_name IN ('A' || TO_CHAR(p.application_id), 'APP', 'AUTH') -- packages
|
|
||||||
AND s.procedure_name = p.authorization_scheme
|
|
||||||
LEFT JOIN all_arguments a
|
|
||||||
ON a.owner = s.owner
|
|
||||||
AND a.object_name = s.procedure_name
|
|
||||||
AND a.package_name = s.object_name
|
|
||||||
AND a.overload IS NULL
|
|
||||||
AND ((
|
|
||||||
a.position = 0
|
|
||||||
AND a.argument_name IS NULL
|
|
||||||
AND a.in_out = 'OUT'
|
|
||||||
)
|
|
||||||
OR (
|
|
||||||
a.position = 1
|
|
||||||
AND a.data_type = 'NUMBER'
|
|
||||||
AND a.in_out = 'IN'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
GROUP BY p.application_id, p.page_id;
|
|
||||||
--
|
|
||||||
|
|
||||||
@ -1,138 +0,0 @@
|
|||||||
BEGIN
|
|
||||||
DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP MATERIALIZED VIEW NAV_OVERVIEW_MVW');
|
|
||||||
DBMS_OUTPUT.PUT_LINE('--');
|
|
||||||
DBMS_OUTPUT.PUT_LINE('-- MATERIALIZED VIEW NAV_OVERVIEW_MVW DROPPED');
|
|
||||||
DBMS_OUTPUT.PUT_LINE('--');
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
NULL;
|
|
||||||
END;
|
|
||||||
/
|
|
||||||
--
|
|
||||||
CREATE MATERIALIZED VIEW nav_overview_mvw
|
|
||||||
BUILD DEFERRED
|
|
||||||
REFRESH COMPLETE ON DEMAND
|
|
||||||
AS
|
|
||||||
WITH t AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
ROWNUM AS r#, -- to keep hierarchy sorted
|
|
||||||
t.*
|
|
||||||
FROM (
|
|
||||||
SELECT
|
|
||||||
n.app_id,
|
|
||||||
n.page_id,
|
|
||||||
n.order#,
|
|
||||||
--
|
|
||||||
REPLACE(p.page_name, '&' || 'APP_NAME.', a.application_name) AS page_name,
|
|
||||||
REPLACE(p.page_title, '&' || 'APP_NAME.', a.application_name) AS page_title,
|
|
||||||
--
|
|
||||||
p.page_alias,
|
|
||||||
p.page_group,
|
|
||||||
p.authorization_scheme,
|
|
||||||
p.page_css_classes,
|
|
||||||
p.page_mode,
|
|
||||||
p.page_template,
|
|
||||||
p.page_comment AS comments,
|
|
||||||
--
|
|
||||||
'#' AS javascript_target,
|
|
||||||
i.item_source AS javascript,
|
|
||||||
--
|
|
||||||
LEVEL - 1 AS depth,
|
|
||||||
CONNECT_BY_ROOT NVL(n.order#, n.page_id) AS page_root
|
|
||||||
FROM navigation n
|
|
||||||
JOIN apps a
|
|
||||||
ON a.app_id = n.app_id
|
|
||||||
LEFT JOIN apex_application_pages p
|
|
||||||
ON p.application_id = n.app_id
|
|
||||||
AND p.page_id = n.page_id
|
|
||||||
LEFT JOIN apex_applications a
|
|
||||||
ON a.application_id = p.application_id
|
|
||||||
LEFT JOIN apex_application_page_items i
|
|
||||||
ON i.application_id = n.app_id
|
|
||||||
AND i.item_name = 'P' || TO_CHAR(n.page_id) || '_JAVASCRIPT_TARGET'
|
|
||||||
CONNECT BY n.parent_id = PRIOR n.page_id
|
|
||||||
AND n.app_id = PRIOR n.app_id
|
|
||||||
START WITH n.parent_id IS NULL
|
|
||||||
ORDER SIBLINGS BY n.app_id, n.order#, n.page_id
|
|
||||||
) t
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
n.app_id,
|
|
||||||
n.page_id,
|
|
||||||
n.parent_id,
|
|
||||||
n.order#,
|
|
||||||
t.r#,
|
|
||||||
--
|
|
||||||
t.page_root,
|
|
||||||
t.page_root || ' ' || COALESCE (
|
|
||||||
t.page_group,
|
|
||||||
(
|
|
||||||
SELECT t.page_group
|
|
||||||
FROM t
|
|
||||||
WHERE t.app_id = n.app_id
|
|
||||||
AND t.page_id = n.parent_id
|
|
||||||
)
|
|
||||||
) AS page_group,
|
|
||||||
--
|
|
||||||
t.page_alias,
|
|
||||||
t.depth,
|
|
||||||
t.page_name,
|
|
||||||
t.page_title,
|
|
||||||
t.page_css_classes AS css_class,
|
|
||||||
t.page_template,
|
|
||||||
--
|
|
||||||
n.is_hidden,
|
|
||||||
n.is_reset,
|
|
||||||
n.is_shared,
|
|
||||||
--
|
|
||||||
CASE WHEN t.page_mode = 'Normal' THEN NULL ELSE 'Y' END AS is_modal,
|
|
||||||
CASE WHEN t.javascript IS NOT NULL THEN 'Y' END AS is_javascript,
|
|
||||||
t.javascript,
|
|
||||||
t.javascript_target,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN t.authorization_scheme LIKE '%MUST_NOT_BE_PUBLIC_USER%'
|
|
||||||
THEN app.get_icon('fa-check-square', 'MUST_NOT_BE_PUBLIC_USER')
|
|
||||||
--
|
|
||||||
WHEN t.authorization_scheme IS NULL AND n.page_id NOT IN (0, 9999)
|
|
||||||
THEN app.get_icon('fa-warning', 'Auth scheme is missing')
|
|
||||||
--
|
|
||||||
ELSE nav.get_html_a(app.get_page_url (
|
|
||||||
in_page_id => 920,
|
|
||||||
in_app_id => n.app_id,
|
|
||||||
in_names => 'P920_AUTH_SCHEME',
|
|
||||||
in_values => t.authorization_scheme
|
|
||||||
), t.authorization_scheme)
|
|
||||||
END AS auth_scheme,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN t.javascript_target IS NOT NULL
|
|
||||||
THEN t.javascript_target
|
|
||||||
--
|
|
||||||
WHEN n.page_id > 0
|
|
||||||
THEN app.get_page_url (
|
|
||||||
in_page_id => n.page_id,
|
|
||||||
in_app_id => n.app_id,
|
|
||||||
in_session_id => CASE WHEN n.page_id = 9999 THEN 0 END
|
|
||||||
)
|
|
||||||
END AS page_url,
|
|
||||||
--
|
|
||||||
t.comments,
|
|
||||||
--
|
|
||||||
'UD' AS allow_changes, -- U = update, D = delete
|
|
||||||
--
|
|
||||||
t.page_root || '.' || TO_CHAR(10000 + t.r#) || '.' || NVL(t.order#, t.page_id) || '.' || n.page_id AS sort_order
|
|
||||||
FROM navigation n
|
|
||||||
JOIN apps a
|
|
||||||
ON a.app_id = n.app_id
|
|
||||||
LEFT JOIN t
|
|
||||||
ON t.app_id = n.app_id
|
|
||||||
AND t.page_id = n.page_id
|
|
||||||
WHERE (n.app_id, n.page_id) NOT IN (
|
|
||||||
SELECT
|
|
||||||
app.get_core_app_id() AS app_id,
|
|
||||||
947 AS page_id
|
|
||||||
FROM DUAL
|
|
||||||
);
|
|
||||||
--
|
|
||||||
|
|
||||||
86
database/mviews/nav_source_pages_mv.sql
Normal file
86
database/mviews/nav_source_pages_mv.sql
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
BEGIN
|
||||||
|
DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP MATERIALIZED VIEW NAV_SOURCE_PAGES_MV');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('--');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('-- MATERIALIZED VIEW NAV_SOURCE_PAGES_MV DROPPED');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('--');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--
|
||||||
|
CREATE MATERIALIZED VIEW nav_source_pages_mv
|
||||||
|
SEGMENT CREATION IMMEDIATE
|
||||||
|
BUILD IMMEDIATE
|
||||||
|
REFRESH COMPLETE ON DEMAND
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
/**
|
||||||
|
* THIS VIEW SHOULD BE PLACED IN EACH DATABASE SCHEMA
|
||||||
|
* TO PROVIDE ACCESS TO APEX VIEWS FOR DIFFERENT SCHEMAS
|
||||||
|
* AND TO INCREASE NAVIGATION PERFORMANCE
|
||||||
|
*/
|
||||||
|
a.workspace,
|
||||||
|
a.owner,
|
||||||
|
p.application_id AS app_id,
|
||||||
|
p.page_id,
|
||||||
|
p.page_alias,
|
||||||
|
p.page_name,
|
||||||
|
p.page_title,
|
||||||
|
p.page_group,
|
||||||
|
p.page_mode,
|
||||||
|
p.page_template,
|
||||||
|
p.page_comment AS comments,
|
||||||
|
p.authorization_scheme AS auth_scheme,
|
||||||
|
--
|
||||||
|
NULLIF(MIN(s.owner || '.' || s.object_name || '.' || s.procedure_name), '..') AS procedure_name,
|
||||||
|
--
|
||||||
|
MIN(CASE WHEN g.position = 0 THEN g.pls_type END) AS data_type,
|
||||||
|
MIN(CASE WHEN g.position = 1 THEN g.argument_name END) AS page_argument,
|
||||||
|
MIN(i.item_source) AS javascript
|
||||||
|
--
|
||||||
|
FROM apex_application_pages p
|
||||||
|
JOIN apex_applications a
|
||||||
|
ON a.application_id = p.application_id
|
||||||
|
LEFT JOIN all_procedures s
|
||||||
|
ON s.owner IN (USER, USER || '_OWNER')
|
||||||
|
AND s.object_name = 'AUTH'
|
||||||
|
AND s.procedure_name = p.authorization_scheme
|
||||||
|
LEFT JOIN all_arguments g
|
||||||
|
ON g.owner = s.owner
|
||||||
|
AND g.object_name = s.procedure_name
|
||||||
|
AND g.package_name = s.object_name
|
||||||
|
AND g.overload IS NULL
|
||||||
|
AND ((
|
||||||
|
g.position = 0
|
||||||
|
AND g.argument_name IS NULL
|
||||||
|
AND g.in_out = 'OUT'
|
||||||
|
)
|
||||||
|
OR (
|
||||||
|
g.position = 1
|
||||||
|
AND g.data_type = 'NUMBER'
|
||||||
|
AND g.in_out = 'IN'
|
||||||
|
)
|
||||||
|
)
|
||||||
|
LEFT JOIN apex_application_page_items i
|
||||||
|
ON i.application_id = p.application_id
|
||||||
|
AND i.page_id = p.page_id
|
||||||
|
AND i.item_name = 'P' || TO_CHAR(i.page_id) || '_JAVASCRIPT_TARGET'
|
||||||
|
WHERE a.workspace != 'INTERNAL'
|
||||||
|
GROUP BY
|
||||||
|
a.workspace,
|
||||||
|
a.owner,
|
||||||
|
p.application_id,
|
||||||
|
p.page_id,
|
||||||
|
p.page_alias,
|
||||||
|
p.page_name,
|
||||||
|
p.page_title,
|
||||||
|
p.page_group,
|
||||||
|
p.page_mode,
|
||||||
|
p.page_template,
|
||||||
|
p.page_comment,
|
||||||
|
p.authorization_scheme
|
||||||
|
ORDER BY p.application_id, p.page_id;
|
||||||
|
--
|
||||||
|
CREATE UNIQUE INDEX uq_nav_source_pages_mv ON nav_source_pages_mv (app_id, page_id);
|
||||||
|
|
||||||
35
database/mviews/nav_source_sorted_mv.sql
Normal file
35
database/mviews/nav_source_sorted_mv.sql
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
BEGIN
|
||||||
|
DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP MATERIALIZED VIEW NAV_SOURCE_SORTED_MV');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('--');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('-- MATERIALIZED VIEW NAV_SOURCE_SORTED_MV DROPPED');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('--');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--
|
||||||
|
CREATE MATERIALIZED VIEW nav_source_sorted_mv
|
||||||
|
SEGMENT CREATION IMMEDIATE
|
||||||
|
BUILD IMMEDIATE
|
||||||
|
REFRESH COMPLETE ON DEMAND
|
||||||
|
AS
|
||||||
|
SELECT
|
||||||
|
ROWNUM AS r#, -- to keep hierarchy sorted
|
||||||
|
t.*
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
n.*,
|
||||||
|
LEVEL - 1 AS depth,
|
||||||
|
CONNECT_BY_ROOT NVL(n.order#, n.page_id) AS page_root
|
||||||
|
FROM navigation n
|
||||||
|
JOIN apps a
|
||||||
|
ON a.app_id = n.app_id
|
||||||
|
CONNECT BY n.parent_id = PRIOR n.page_id
|
||||||
|
AND n.app_id = PRIOR n.app_id
|
||||||
|
START WITH n.parent_id IS NULL
|
||||||
|
ORDER SIBLINGS BY n.app_id, n.order#, n.page_id
|
||||||
|
) t;
|
||||||
|
--
|
||||||
|
CREATE UNIQUE INDEX uq_nav_source_sorted_mv ON nav_source_sorted_mv (app_id, page_id);
|
||||||
|
|
||||||
@ -1,5 +1,5 @@
|
|||||||
-- DROP MATERIALIZED VIEW obj_modules_mvw;
|
-- DROP MATERIALIZED VIEW source_modules_mv;
|
||||||
CREATE MATERIALIZED VIEW obj_modules_mvw
|
CREATE MATERIALIZED VIEW source_modules_mv
|
||||||
BUILD DEFERRED
|
BUILD DEFERRED
|
||||||
REFRESH COMPLETE ON DEMAND
|
REFRESH COMPLETE ON DEMAND
|
||||||
AS
|
AS
|
||||||
@ -462,8 +462,7 @@ CREATE OR REPLACE PACKAGE app AS
|
|||||||
in_names VARCHAR2 := NULL,
|
in_names VARCHAR2 := NULL,
|
||||||
in_values VARCHAR2 := NULL,
|
in_values VARCHAR2 := NULL,
|
||||||
in_overload VARCHAR2 := NULL, -- JSON object to overload passed items/values
|
in_overload VARCHAR2 := NULL, -- JSON object to overload passed items/values
|
||||||
in_transform BOOLEAN := FALSE, -- to pass all page items to new page
|
in_reset CHAR := 'Y', -- reset page items
|
||||||
in_reset BOOLEAN := TRUE, -- reset page items
|
|
||||||
in_session_id sessions.session_id%TYPE := NULL,
|
in_session_id sessions.session_id%TYPE := NULL,
|
||||||
in_app_id navigation.app_id%TYPE := NULL
|
in_app_id navigation.app_id%TYPE := NULL
|
||||||
)
|
)
|
||||||
@ -1487,7 +1486,7 @@ CREATE OR REPLACE PACKAGE app AS
|
|||||||
--
|
--
|
||||||
-- Rebuild source lines for views
|
-- Rebuild source lines for views
|
||||||
--
|
--
|
||||||
PROCEDURE rebuild_user_source_views (
|
PROCEDURE rebuild_source_lines (
|
||||||
in_owner apex_applications.owner%TYPE := NULL
|
in_owner apex_applications.owner%TYPE := NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -1113,8 +1113,7 @@ CREATE OR REPLACE PACKAGE BODY app AS
|
|||||||
in_names VARCHAR2 := NULL,
|
in_names VARCHAR2 := NULL,
|
||||||
in_values VARCHAR2 := NULL,
|
in_values VARCHAR2 := NULL,
|
||||||
in_overload VARCHAR2 := NULL, -- JSON object to overload passed items/values
|
in_overload VARCHAR2 := NULL, -- JSON object to overload passed items/values
|
||||||
in_transform BOOLEAN := FALSE, -- to pass all page items to new page
|
in_reset CHAR := 'Y', -- reset page items
|
||||||
in_reset BOOLEAN := TRUE, -- reset page items
|
|
||||||
in_session_id sessions.session_id%TYPE := NULL,
|
in_session_id sessions.session_id%TYPE := NULL,
|
||||||
in_app_id navigation.app_id%TYPE := NULL
|
in_app_id navigation.app_id%TYPE := NULL
|
||||||
)
|
)
|
||||||
@ -1160,7 +1159,7 @@ CREATE OR REPLACE PACKAGE BODY app AS
|
|||||||
p_application => in_app_id,
|
p_application => in_app_id,
|
||||||
p_session => COALESCE(in_session_id, app.get_session_id()),
|
p_session => COALESCE(in_session_id, app.get_session_id()),
|
||||||
p_page => out_page_id,
|
p_page => out_page_id,
|
||||||
p_clear_cache => CASE WHEN in_reset THEN out_page_id END,
|
p_clear_cache => CASE WHEN in_reset = 'Y' THEN out_page_id END,
|
||||||
p_items => out_names,
|
p_items => out_names,
|
||||||
p_values => NULLIF(out_values, 'NULL')
|
p_values => NULLIF(out_values, 'NULL')
|
||||||
/*
|
/*
|
||||||
@ -3996,14 +3995,18 @@ CREATE OR REPLACE PACKAGE BODY app AS
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE rebuild_user_source_views (
|
PROCEDURE rebuild_source_lines (
|
||||||
in_owner apex_applications.owner%TYPE := NULL
|
in_owner apex_applications.owner%TYPE := NULL
|
||||||
)
|
)
|
||||||
AS
|
AS
|
||||||
BEGIN
|
BEGIN
|
||||||
app.log_module(in_owner);
|
app.log_module(in_owner);
|
||||||
--
|
|
||||||
DELETE FROM user_source_views t
|
-- @TODO: procedures
|
||||||
|
-- @TODO: jobs
|
||||||
|
|
||||||
|
-- refresh view content
|
||||||
|
DELETE FROM source_lines t
|
||||||
WHERE t.owner = NVL(in_owner, t.owner);
|
WHERE t.owner = NVL(in_owner, t.owner);
|
||||||
--
|
--
|
||||||
FOR c IN (
|
FOR c IN (
|
||||||
@ -4012,11 +4015,9 @@ CREATE OR REPLACE PACKAGE BODY app AS
|
|||||||
t.view_name AS name,
|
t.view_name AS name,
|
||||||
app.get_long_string('ALL_VIEWS', 'TEXT', 'VIEW_NAME', t.view_name, in_owner => t.owner) || ';' AS text
|
app.get_long_string('ALL_VIEWS', 'TEXT', 'VIEW_NAME', t.view_name, in_owner => t.owner) || ';' AS text
|
||||||
FROM all_views t
|
FROM all_views t
|
||||||
JOIN lov_app_schemas s
|
WHERE t.owner = NVL(in_owner, t.owner)
|
||||||
ON s.owner = t.owner
|
|
||||||
WHERE t.owner = NVL(in_owner, t.owner)
|
|
||||||
) LOOP
|
) LOOP
|
||||||
INSERT INTO user_source_views (owner, name, line, text)
|
INSERT INTO source_lines (owner, name, line, text)
|
||||||
SELECT
|
SELECT
|
||||||
c.owner,
|
c.owner,
|
||||||
c.name,
|
c.name,
|
||||||
|
|||||||
@ -22,7 +22,7 @@ CREATE OR REPLACE PACKAGE constants AS
|
|||||||
flag_trigger CONSTANT logs.flag%TYPE := 'G'; -- called from trigger
|
flag_trigger CONSTANT logs.flag%TYPE := 'G'; -- called from trigger
|
||||||
|
|
||||||
-- specify maximum length for trim
|
-- specify maximum length for trim
|
||||||
length_user CONSTANT PLS_INTEGER := 30; -- logs.user_id%TYPE
|
length_user CONSTANT PLS_INTEGER := 128; -- logs.user_id%TYPE
|
||||||
length_action CONSTANT PLS_INTEGER := 64; -- logs.action_name%TYPE, v_$session.action
|
length_action CONSTANT PLS_INTEGER := 64; -- logs.action_name%TYPE, v_$session.action
|
||||||
length_module CONSTANT PLS_INTEGER := 64; -- logs.module_name%TYPE
|
length_module CONSTANT PLS_INTEGER := 64; -- logs.module_name%TYPE
|
||||||
length_arguments CONSTANT PLS_INTEGER := 2000; -- logs.arguments%TYPE
|
length_arguments CONSTANT PLS_INTEGER := 2000; -- logs.arguments%TYPE
|
||||||
|
|||||||
@ -33,10 +33,16 @@ CREATE OR REPLACE PACKAGE nav AS
|
|||||||
-- Check if user have permissions to access the page
|
-- Check if user have permissions to access the page
|
||||||
--
|
--
|
||||||
FUNCTION is_page_available (
|
FUNCTION is_page_available (
|
||||||
in_page_id navigation.page_id%TYPE,
|
in_auth_scheme VARCHAR2,
|
||||||
in_app_id navigation.app_id%TYPE
|
in_app_id NUMBER,
|
||||||
|
in_page_id NUMBER,
|
||||||
|
in_procedure_name VARCHAR2,
|
||||||
|
in_data_type VARCHAR2,
|
||||||
|
in_page_argument VARCHAR2
|
||||||
)
|
)
|
||||||
RETURN CHAR;
|
RETURN CHAR
|
||||||
|
--AUTHID CURRENT_USER
|
||||||
|
RESULT_CACHE;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -102,14 +108,7 @@ CREATE OR REPLACE PACKAGE nav AS
|
|||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Refresh navigation MVW in a background job and inform user
|
-- Refresh navigation views
|
||||||
--
|
|
||||||
PROCEDURE refresh_nav_views (
|
|
||||||
in_log_id logs.log_id%TYPE,
|
|
||||||
in_user_id logs.user_id%TYPE,
|
|
||||||
in_app_id logs.app_id%TYPE,
|
|
||||||
in_lang_id users.lang_id%TYPE
|
|
||||||
);
|
|
||||||
--
|
--
|
||||||
PROCEDURE refresh_nav_views;
|
PROCEDURE refresh_nav_views;
|
||||||
|
|
||||||
|
|||||||
@ -1,99 +1,56 @@
|
|||||||
CREATE OR REPLACE PACKAGE BODY nav AS
|
CREATE OR REPLACE PACKAGE BODY nav AS
|
||||||
|
|
||||||
FUNCTION is_page_available (
|
FUNCTION is_page_available (
|
||||||
in_page_id navigation.page_id%TYPE,
|
in_auth_scheme VARCHAR2,
|
||||||
in_app_id navigation.app_id%TYPE
|
in_app_id NUMBER,
|
||||||
|
in_page_id NUMBER,
|
||||||
|
in_procedure_name VARCHAR2,
|
||||||
|
in_data_type VARCHAR2,
|
||||||
|
in_page_argument VARCHAR2
|
||||||
)
|
)
|
||||||
RETURN CHAR
|
RETURN CHAR
|
||||||
|
--AUTHID CURRENT_USER
|
||||||
|
RESULT_CACHE
|
||||||
AS
|
AS
|
||||||
v_auth_scheme apex_application_pages.authorization_scheme%TYPE;
|
out_result_bool BOOLEAN;
|
||||||
v_package_name user_procedures.object_name%TYPE;
|
out_result CHAR(1);
|
||||||
v_procedure_name user_procedures.procedure_name%TYPE;
|
|
||||||
v_data_type user_arguments.pls_type%TYPE;
|
|
||||||
v_page_argument user_arguments.argument_name%TYPE;
|
|
||||||
--
|
--
|
||||||
out_result CHAR;
|
PRAGMA UDF;
|
||||||
out_result_bool BOOLEAN;
|
|
||||||
--
|
|
||||||
PRAGMA UDF; -- SQL only
|
|
||||||
BEGIN
|
BEGIN
|
||||||
-- get auth cheme, procedure...
|
IF in_auth_scheme = 'NOBODY - HIDDEN' THEN
|
||||||
SELECT
|
RETURN 'N';
|
||||||
n.auth_scheme,
|
ELSIF (in_auth_scheme IS NULL OR in_procedure_name IS NULL) THEN
|
||||||
n.package_name,
|
RETURN 'Y';
|
||||||
n.procedure_name,
|
|
||||||
n.data_type,
|
|
||||||
n.argument_name
|
|
||||||
INTO v_auth_scheme, v_package_name, v_procedure_name, v_data_type, v_page_argument
|
|
||||||
FROM nav_availability_mvw n
|
|
||||||
WHERE n.application_id = in_app_id
|
|
||||||
AND n.page_id = in_page_id;
|
|
||||||
|
|
||||||
-- log current page
|
|
||||||
IF app.is_debug_on() AND in_page_id = app.get_page_id() THEN
|
|
||||||
app.log_action (
|
|
||||||
'IS_PAGE_AVAILABLE',
|
|
||||||
in_app_id,
|
|
||||||
in_page_id,
|
|
||||||
NVL(v_auth_scheme, '-'),
|
|
||||||
NVL(v_package_name || '.' || v_procedure_name, '-'),
|
|
||||||
NVL(v_data_type, '-'),
|
|
||||||
NVL(v_page_argument, '-')
|
|
||||||
);
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- skip global page and login/logout page
|
|
||||||
IF in_page_id IN (0, 9999) THEN
|
|
||||||
RETURN 'Y'; -- show
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- check scheme and procedure
|
|
||||||
IF v_auth_scheme IS NULL THEN
|
|
||||||
app.log_warning('AUTH_SCHEME_MISSING', in_app_id, in_page_id);
|
|
||||||
--
|
|
||||||
RETURN 'Y'; -- show, page has no authorization set
|
|
||||||
--
|
|
||||||
ELSIF v_auth_scheme IN ('MUST_NOT_BE_PUBLIC_USER') THEN
|
|
||||||
RETURN 'Y'; -- show
|
|
||||||
--
|
|
||||||
ELSIF v_procedure_name IS NULL THEN
|
|
||||||
app.log_warning('AUTH_PROCEDURE_MISSING', in_app_id, in_page_id, v_auth_scheme);
|
|
||||||
--
|
|
||||||
IF app.is_developer() THEN -- show in menu, allow access
|
|
||||||
RETURN 'Y';
|
|
||||||
END IF;
|
|
||||||
--
|
|
||||||
RETURN 'N'; -- hide, auth function is set on page but missing in AUTH package
|
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
-- call function to evaluate access
|
-- call function to evaluate access
|
||||||
IF v_data_type = 'BOOLEAN' THEN
|
IF in_data_type = 'BOOLEAN' THEN
|
||||||
IF v_page_argument IS NOT NULL THEN
|
IF in_page_argument IS NOT NULL THEN
|
||||||
-- pass page_id when neeeded
|
-- pass page_id when neeeded
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'BEGIN :r := ' || v_package_name || '.' || v_procedure_name || '(:page_id); END;'
|
'BEGIN :r := ' || in_procedure_name || '(:page_id); END;'
|
||||||
USING IN in_page_id, OUT out_result_bool;
|
USING OUT out_result_bool, IN in_page_id;
|
||||||
ELSE
|
ELSE
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'BEGIN :r := ' || v_package_name || '.' || v_procedure_name || '; END;'
|
'BEGIN :r := ' || in_procedure_name || '; END;'
|
||||||
USING OUT out_result_bool;
|
USING OUT out_result_bool;
|
||||||
END IF;
|
END IF;
|
||||||
--
|
--
|
||||||
RETURN CASE WHEN out_result_bool THEN 'Y' ELSE 'N' END;
|
RETURN CASE WHEN out_result_bool THEN 'Y' ELSE 'N' END;
|
||||||
ELSE
|
ELSE
|
||||||
IF v_page_argument IS NOT NULL THEN
|
IF in_page_argument IS NOT NULL THEN
|
||||||
-- pass page_id when neeeded
|
-- pass page_id when neeeded
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'BEGIN :r := ' || v_package_name || '.' || v_procedure_name || '(:page_id); END;'
|
'BEGIN :r := ' || in_procedure_name || '(:page_id); END;'
|
||||||
USING IN in_page_id, OUT out_result;
|
USING OUT out_result, IN in_page_id;
|
||||||
ELSE
|
ELSE
|
||||||
EXECUTE IMMEDIATE
|
EXECUTE IMMEDIATE
|
||||||
'BEGIN :r := ' || v_package_name || '.' || v_procedure_name || '; END;'
|
'BEGIN :r := ' || in_procedure_name || '; END;'
|
||||||
USING OUT out_result;
|
USING OUT out_result;
|
||||||
END IF;
|
END IF;
|
||||||
|
--
|
||||||
|
RETURN NVL(out_result, 'N');
|
||||||
END IF;
|
END IF;
|
||||||
--
|
|
||||||
RETURN NVL(out_result, 'N');
|
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
|
||||||
@ -118,8 +75,7 @@ CREATE OR REPLACE PACKAGE BODY nav AS
|
|||||||
in_names => in_names,
|
in_names => in_names,
|
||||||
in_values => in_values,
|
in_values => in_values,
|
||||||
in_overload => in_overload,
|
in_overload => in_overload,
|
||||||
in_transform => in_transform,
|
in_reset => CASE WHEN in_reset THEN 'Y' END
|
||||||
in_reset => in_reset
|
|
||||||
);
|
);
|
||||||
--
|
--
|
||||||
app.log_debug('REDIRECT', app.get_json_list(in_page_id, in_names, in_values, out_target));
|
app.log_debug('REDIRECT', app.get_json_list(in_page_id, in_names, in_values, out_target));
|
||||||
@ -270,57 +226,21 @@ CREATE OR REPLACE PACKAGE BODY nav AS
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE refresh_nav_views (
|
|
||||||
in_log_id logs.log_id%TYPE,
|
|
||||||
in_user_id logs.user_id%TYPE,
|
|
||||||
in_app_id logs.app_id%TYPE,
|
|
||||||
in_lang_id users.lang_id%TYPE
|
|
||||||
)
|
|
||||||
AS
|
|
||||||
BEGIN
|
|
||||||
DBMS_MVIEW.REFRESH('NAV_AVAILABILITY_MVW', 'C', parallelism => 2);
|
|
||||||
DBMS_MVIEW.REFRESH('NAV_OVERVIEW_MVW', 'C', parallelism => 2);
|
|
||||||
--
|
|
||||||
/*
|
|
||||||
app_actions.send_message (
|
|
||||||
in_app_id => in_app_id,
|
|
||||||
in_user_id => in_user_id,
|
|
||||||
in_message => app.get_translated_message('MVW_REFRESHED', in_app_id, in_lang_id)
|
|
||||||
);*/
|
|
||||||
--
|
|
||||||
app.log_success(TO_CHAR(in_log_id));
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
/*
|
|
||||||
app_actions.send_message (
|
|
||||||
in_app_id => in_app_id,
|
|
||||||
in_user_id => in_user_id,
|
|
||||||
in_message => app.get_translated_message('MVW_FAILED', in_app_id, in_lang_id),
|
|
||||||
in_type => 'WARNING'
|
|
||||||
);*/
|
|
||||||
COMMIT;
|
|
||||||
--
|
|
||||||
app.raise_error();
|
|
||||||
END;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PROCEDURE refresh_nav_views
|
PROCEDURE refresh_nav_views
|
||||||
AS
|
AS
|
||||||
v_log_id logs.log_id%TYPE;
|
|
||||||
v_query VARCHAR2(32767);
|
|
||||||
BEGIN
|
BEGIN
|
||||||
v_log_id := app.log_module();
|
app.log_module();
|
||||||
--
|
--
|
||||||
app.create_job (
|
FOR c IN (
|
||||||
in_job_name => 'RECALC_MVW_NAV',
|
SELECT v.mview_name
|
||||||
in_statement => 'nav.refresh_nav_views('
|
FROM user_mviews v
|
||||||
|| v_log_id || ', '''
|
WHERE v.mview_name LIKE 'NAV\_%' ESCAPE '\'
|
||||||
|| app.get_user_id() || ''', '
|
) LOOP
|
||||||
|| app.get_app_id() || ', '''
|
DBMS_MVIEW.REFRESH(c.mview_name, 'C', parallelism => 2);
|
||||||
|| app.get_user_lang() || ''''
|
app.log_result(c.mview_name);
|
||||||
|| ');'
|
END LOOP;
|
||||||
);
|
--
|
||||||
|
app.log_success();
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN app.app_exception THEN
|
WHEN app.app_exception THEN
|
||||||
RAISE;
|
RAISE;
|
||||||
|
|||||||
@ -63,14 +63,16 @@ BEGIN
|
|||||||
FROM user_objects o
|
FROM user_objects o
|
||||||
WHERE o.status != 'VALID'
|
WHERE o.status != 'VALID'
|
||||||
AND o.object_type NOT IN ('SEQUENCE')
|
AND o.object_type NOT IN ('SEQUENCE')
|
||||||
|
AND (o.object_type LIKE in_type ESCAPE '\' OR in_type IS NULL)
|
||||||
|
AND (o.object_name LIKE in_name ESCAPE '\' OR in_name IS NULL)
|
||||||
AND o.object_name != $$PLSQL_UNIT -- not this procedure
|
AND o.object_name != $$PLSQL_UNIT -- not this procedure
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT o.object_name, o.object_type
|
SELECT o.object_name, o.object_type
|
||||||
FROM user_objects o
|
FROM user_objects o
|
||||||
WHERE in_force_y = 'Y'
|
WHERE in_force_y = 'Y'
|
||||||
AND o.object_type IN ('PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER', 'VIEW', 'SYNONYM')
|
AND o.object_type IN ('PACKAGE', 'PACKAGE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER', 'VIEW', 'SYNONYM')
|
||||||
AND (o.object_type LIKE in_type OR in_type IS NULL)
|
AND (o.object_type LIKE in_type ESCAPE '\' OR in_type IS NULL)
|
||||||
AND (o.object_name LIKE in_name OR in_name IS NULL)
|
AND (o.object_name LIKE in_name ESCAPE '\' OR in_name IS NULL)
|
||||||
AND o.object_name != $$PLSQL_UNIT -- not this procedure
|
AND o.object_name != $$PLSQL_UNIT -- not this procedure
|
||||||
) o
|
) o
|
||||||
ORDER BY CASE o.object_type
|
ORDER BY CASE o.object_type
|
||||||
@ -143,8 +145,10 @@ BEGIN
|
|||||||
-- show number of invalid objects
|
-- show number of invalid objects
|
||||||
SELECT COUNT(*) INTO v_invalids
|
SELECT COUNT(*) INTO v_invalids
|
||||||
FROM user_objects o
|
FROM user_objects o
|
||||||
WHERE o.status != 'VALID'
|
WHERE o.status != 'VALID'
|
||||||
AND o.object_name != $$PLSQL_UNIT; -- not this procedure
|
AND (o.object_type LIKE in_type ESCAPE '\' OR in_type IS NULL)
|
||||||
|
AND (o.object_name LIKE in_name ESCAPE '\' OR in_name IS NULL)
|
||||||
|
AND o.object_name != $$PLSQL_UNIT; -- not this procedure
|
||||||
--
|
--
|
||||||
DBMS_OUTPUT.PUT_LINE(' -> ' || v_invalids);
|
DBMS_OUTPUT.PUT_LINE(' -> ' || v_invalids);
|
||||||
DBMS_OUTPUT.PUT_LINE('');
|
DBMS_OUTPUT.PUT_LINE('');
|
||||||
@ -155,7 +159,10 @@ BEGIN
|
|||||||
FOR c IN (
|
FOR c IN (
|
||||||
SELECT DISTINCT o.object_type, o.object_name
|
SELECT DISTINCT o.object_type, o.object_name
|
||||||
FROM user_objects o
|
FROM user_objects o
|
||||||
WHERE o.status != 'VALID'
|
WHERE o.status != 'VALID'
|
||||||
|
AND (o.object_type LIKE in_type ESCAPE '\' OR in_type IS NULL)
|
||||||
|
AND (o.object_name LIKE in_name ESCAPE '\' OR in_name IS NULL)
|
||||||
|
AND o.object_name != $$PLSQL_UNIT; -- not this procedure
|
||||||
ORDER BY o.object_type, o.object_name
|
ORDER BY o.object_type, o.object_name
|
||||||
) LOOP
|
) LOOP
|
||||||
DBMS_OUTPUT.PUT_LINE(' ' || LPAD(CASE WHEN c.object_type != v_last_type THEN c.object_type END || ' | ', 20, ' ') || c.object_name);
|
DBMS_OUTPUT.PUT_LINE(' ' || LPAD(CASE WHEN c.object_type != v_last_type THEN c.object_type END || ' | ', 20, ' ') || c.object_name);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
CREATE TABLE apps (
|
CREATE TABLE apps (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_apps_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_apps_app_id NOT NULL,
|
||||||
description_ VARCHAR2(1000),
|
description_ VARCHAR2(1000),
|
||||||
is_visible CHAR(1),
|
is_visible CHAR(1),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT ch_apps_is_visible
|
CONSTRAINT ch_apps_is_visible
|
||||||
|
|||||||
@ -1,11 +1,12 @@
|
|||||||
|
--DROP TABLE events;
|
||||||
CREATE TABLE events (
|
CREATE TABLE events (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_events_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_events_app_id NOT NULL,
|
||||||
event_id VARCHAR2(30) CONSTRAINT nn_events_event_id NOT NULL,
|
event_id VARCHAR2(30) CONSTRAINT nn_events_event_id NOT NULL,
|
||||||
event_name VARCHAR2(64),
|
event_name VARCHAR2(64),
|
||||||
event_group VARCHAR2(64),
|
event_group VARCHAR2(64),
|
||||||
description_ VARCHAR2(1000),
|
description_ VARCHAR2(1000),
|
||||||
is_active CHAR(1),
|
is_active CHAR(1),
|
||||||
updated_by VARCHAR2(30) DEFAULT NULL,
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT ch_events_is_active
|
CONSTRAINT ch_events_is_active
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
|
--DROP TABLE log_events;
|
||||||
CREATE TABLE log_events (
|
CREATE TABLE log_events (
|
||||||
log_id INTEGER CONSTRAINT nn_log_events_log_id NOT NULL,
|
log_id INTEGER CONSTRAINT nn_log_events_log_id NOT NULL,
|
||||||
log_parent INTEGER,
|
log_parent INTEGER,
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_log_events_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_log_events_app_id NOT NULL,
|
||||||
page_id NUMBER(6,0) CONSTRAINT nn_log_events_page_id NOT NULL,
|
page_id NUMBER(8,0) CONSTRAINT nn_log_events_page_id NOT NULL,
|
||||||
user_id VARCHAR2(30) CONSTRAINT nn_log_events_user_id NOT NULL,
|
user_id VARCHAR2(128) CONSTRAINT nn_log_events_user_id NOT NULL,
|
||||||
session_id INTEGER CONSTRAINT nn_log_events_session_id NOT NULL,
|
session_id INTEGER CONSTRAINT nn_log_events_session_id NOT NULL,
|
||||||
event_id VARCHAR2(30) CONSTRAINT nn_log_events_event_id NOT NULL,
|
event_id VARCHAR2(30) CONSTRAINT nn_log_events_event_id NOT NULL,
|
||||||
event_value NUMBER,
|
event_value NUMBER,
|
||||||
|
|||||||
@ -1,16 +1,18 @@
|
|||||||
|
--DROP TABLE logs;
|
||||||
CREATE TABLE logs (
|
CREATE TABLE logs (
|
||||||
log_id INTEGER CONSTRAINT nn_logs_log_id NOT NULL,
|
log_id INTEGER CONSTRAINT nn_logs_log_id NOT NULL,
|
||||||
log_parent INTEGER,
|
log_parent INTEGER,
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_logs_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_logs_app_id NOT NULL,
|
||||||
page_id NUMBER(6,0),
|
page_id NUMBER(8,0),
|
||||||
user_id VARCHAR2(30),
|
user_id VARCHAR2(128),
|
||||||
flag CHAR(1) CONSTRAINT nn_logs_flag NOT NULL,
|
flag CHAR(1) CONSTRAINT nn_logs_flag NOT NULL,
|
||||||
action_name VARCHAR2(32),
|
action_name VARCHAR2(64),
|
||||||
module_name VARCHAR2(48),
|
module_name VARCHAR2(64),
|
||||||
module_line NUMBER(8,0),
|
module_line NUMBER(8,0),
|
||||||
module_timer VARCHAR2(12),
|
module_timer VARCHAR2(12),
|
||||||
arguments VARCHAR2(2000),
|
arguments VARCHAR2(4000),
|
||||||
payload VARCHAR2(4000),
|
payload VARCHAR2(4000),
|
||||||
|
debug_id INTEGER,
|
||||||
session_id INTEGER,
|
session_id INTEGER,
|
||||||
created_at TIMESTAMP(6) CONSTRAINT nn_logs_created_at NOT NULL,
|
created_at TIMESTAMP(6) CONSTRAINT nn_logs_created_at NOT NULL,
|
||||||
--
|
--
|
||||||
|
|||||||
@ -1,11 +1,12 @@
|
|||||||
|
--DROP TABLE logs_blacklist;
|
||||||
CREATE TABLE logs_blacklist (
|
CREATE TABLE logs_blacklist (
|
||||||
app_id NUMBER(4,0),
|
app_id NUMBER(8,0),
|
||||||
flag CHAR(1),
|
flag CHAR(1),
|
||||||
user_id VARCHAR2(30),
|
user_id VARCHAR2(30),
|
||||||
page_id NUMBER(6,0),
|
page_id NUMBER(8,0),
|
||||||
module_like VARCHAR2(30),
|
module_like VARCHAR2(64),
|
||||||
action_like VARCHAR2(30),
|
action_like VARCHAR2(64),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT uq_logs_blacklist
|
CONSTRAINT uq_logs_blacklist
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
CREATE TABLE mail_queue (
|
CREATE TABLE mail_queue (
|
||||||
queue_id NUMBER(10,0) CONSTRAINT nn_mail_queue_queue_id NOT NULL,
|
queue_id NUMBER(10,0) CONSTRAINT nn_mail_queue_queue_id NOT NULL,
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_mail_queue_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_mail_queue_app_id NOT NULL,
|
||||||
event_id VARCHAR2(30),
|
event_id VARCHAR2(30),
|
||||||
role_id VARCHAR2(30),
|
role_id VARCHAR2(30),
|
||||||
template_id VARCHAR2(30),
|
template_id VARCHAR2(30),
|
||||||
schedule_id VARCHAR2(30),
|
schedule_id VARCHAR2(30),
|
||||||
user_id VARCHAR2(30),
|
user_id VARCHAR2(128),
|
||||||
lang_id VARCHAR2(5),
|
lang_id VARCHAR2(5),
|
||||||
mail_recipient VARCHAR2(4000),
|
mail_recipient VARCHAR2(4000),
|
||||||
mail_cc VARCHAR2(4000),
|
mail_cc VARCHAR2(4000),
|
||||||
@ -13,7 +13,7 @@ CREATE TABLE mail_queue (
|
|||||||
mail_sender VARCHAR2(256),
|
mail_sender VARCHAR2(256),
|
||||||
mail_subject VARCHAR2(256),
|
mail_subject VARCHAR2(256),
|
||||||
mail_body CLOB,
|
mail_body CLOB,
|
||||||
created_by VARCHAR2(30),
|
created_by VARCHAR2(128),
|
||||||
created_at DATE,
|
created_at DATE,
|
||||||
sent_at DATE,
|
sent_at DATE,
|
||||||
--
|
--
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
CREATE TABLE mail_schedules (
|
CREATE TABLE mail_schedules (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_mail_schedules_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_mail_schedules_app_id NOT NULL,
|
||||||
schedule_id VARCHAR2(30) CONSTRAINT nn_mail_schedules_schedule_id NOT NULL,
|
schedule_id VARCHAR2(30) CONSTRAINT nn_mail_schedules_schedule_id NOT NULL,
|
||||||
schedule_group VARCHAR2(64),
|
schedule_group VARCHAR2(64),
|
||||||
description_ VARCHAR2(256),
|
description_ VARCHAR2(256),
|
||||||
@ -9,7 +9,7 @@ CREATE TABLE mail_schedules (
|
|||||||
schedule_hour VARCHAR2(128),
|
schedule_hour VARCHAR2(128),
|
||||||
schedule_minute VARCHAR2(128),
|
schedule_minute VARCHAR2(128),
|
||||||
schedule_interval VARCHAR2(128),
|
schedule_interval VARCHAR2(128),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT ch_mail_schedules_hour
|
CONSTRAINT ch_mail_schedules_hour
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
CREATE TABLE mail_subscriptions (
|
CREATE TABLE mail_subscriptions (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_mail_subscriptions_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_mail_subscriptions_app_id NOT NULL,
|
||||||
event_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_event_id NOT NULL,
|
event_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_event_id NOT NULL,
|
||||||
role_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_role_id NOT NULL,
|
role_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_role_id NOT NULL,
|
||||||
schedule_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_schedule_id NOT NULL,
|
schedule_id VARCHAR2(30) CONSTRAINT nn_mail_subscriptions_schedule_id NOT NULL,
|
||||||
@ -8,7 +8,7 @@ CREATE TABLE mail_subscriptions (
|
|||||||
is_active CHAR(1),
|
is_active CHAR(1),
|
||||||
processed_log_id NUMBER,
|
processed_log_id NUMBER,
|
||||||
processed_at DATE,
|
processed_at DATE,
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT ch_mail_subscriptions_is_active
|
CONSTRAINT ch_mail_subscriptions_is_active
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
|
--DROP TABLE mail_templates;
|
||||||
CREATE TABLE mail_templates (
|
CREATE TABLE mail_templates (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_mail_templates_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_mail_templates_app_id NOT NULL,
|
||||||
template_id VARCHAR2(30) CONSTRAINT nn_mail_templates_template_id NOT NULL,
|
template_id VARCHAR2(30) CONSTRAINT nn_mail_templates_template_id NOT NULL,
|
||||||
lang_id VARCHAR2(5) CONSTRAINT nn_mail_templates_lang_id NOT NULL,
|
lang_id VARCHAR2(5) CONSTRAINT nn_mail_templates_lang_id NOT NULL,
|
||||||
template_group VARCHAR2(64),
|
template_group VARCHAR2(64),
|
||||||
@ -7,7 +8,7 @@ CREATE TABLE mail_templates (
|
|||||||
process_function VARCHAR2(64),
|
process_function VARCHAR2(64),
|
||||||
mail_subject VARCHAR2(256),
|
mail_subject VARCHAR2(256),
|
||||||
mail_body CLOB,
|
mail_body CLOB,
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT pk_mail_templates
|
CONSTRAINT pk_mail_templates
|
||||||
|
|||||||
@ -1,12 +1,13 @@
|
|||||||
|
--DROP TABLE navigation;
|
||||||
CREATE TABLE navigation (
|
CREATE TABLE navigation (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_navigation_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_navigation_app_id NOT NULL,
|
||||||
page_id NUMBER(6,0) CONSTRAINT nn_navigation_page_id NOT NULL,
|
page_id NUMBER(8,0) CONSTRAINT nn_navigation_page_id NOT NULL,
|
||||||
parent_id NUMBER(6,0),
|
parent_id NUMBER(8,0),
|
||||||
order# NUMBER(4,0),
|
order# NUMBER(4,0),
|
||||||
is_hidden CHAR(1),
|
is_hidden CHAR(1),
|
||||||
is_reset CHAR(1),
|
is_reset CHAR(1),
|
||||||
is_shared CHAR(1),
|
is_shared CHAR(1),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT ch_navigation_is_hidden
|
CONSTRAINT ch_navigation_is_hidden
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
CREATE TABLE roles (
|
CREATE TABLE roles (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_roles_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_roles_app_id NOT NULL,
|
||||||
role_id VARCHAR2(30) CONSTRAINT nn_roles_role_id NOT NULL,
|
role_id VARCHAR2(30) CONSTRAINT nn_roles_role_id NOT NULL,
|
||||||
role_name VARCHAR2(64),
|
role_name VARCHAR2(64),
|
||||||
role_group VARCHAR2(64),
|
role_group VARCHAR2(64),
|
||||||
description_ VARCHAR2(1000),
|
description_ VARCHAR2(1000),
|
||||||
is_active CHAR(1),
|
is_active CHAR(1),
|
||||||
order# NUMBER(4,0),
|
order# NUMBER(4,0),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT ch_roles_is_active
|
CONSTRAINT ch_roles_is_active
|
||||||
|
|||||||
@ -1,19 +0,0 @@
|
|||||||
CREATE TABLE roles_e$ (
|
|
||||||
ora_err_number$ NUMBER,
|
|
||||||
ora_err_mesg$ VARCHAR2(2000),
|
|
||||||
ora_err_rowid$ UROWID(4000),
|
|
||||||
ora_err_optyp$ VARCHAR2(2),
|
|
||||||
ora_err_tag$ VARCHAR2(2000),
|
|
||||||
app_id VARCHAR2(4000),
|
|
||||||
role_id VARCHAR2(32767),
|
|
||||||
role_name VARCHAR2(32767),
|
|
||||||
role_group VARCHAR2(32767),
|
|
||||||
description_ VARCHAR2(32767),
|
|
||||||
is_active VARCHAR2(32767),
|
|
||||||
order# VARCHAR2(4000),
|
|
||||||
updated_by VARCHAR2(32767),
|
|
||||||
updated_at VARCHAR2(4000)
|
|
||||||
);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE roles_e$ IS 'DML Error Logging table for "CORE"."ROLES"';
|
|
||||||
|
|
||||||
@ -1,7 +1,9 @@
|
|||||||
|
--DROP TABLE sessions;
|
||||||
CREATE TABLE sessions (
|
CREATE TABLE sessions (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_sessions_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_sessions_app_id NOT NULL,
|
||||||
session_id INTEGER CONSTRAINT nn_sessions_session_id NOT NULL,
|
session_id INTEGER CONSTRAINT nn_sessions_session_id NOT NULL,
|
||||||
user_id VARCHAR2(30) CONSTRAINT nn_sessions_user_id NOT NULL,
|
user_id VARCHAR2(128) CONSTRAINT nn_sessions_user_id NOT NULL,
|
||||||
|
persistent_items VARCHAR2(4000),
|
||||||
created_at DATE CONSTRAINT nn_sessions_created_at NOT NULL,
|
created_at DATE CONSTRAINT nn_sessions_created_at NOT NULL,
|
||||||
updated_at DATE CONSTRAINT nn_sessions_updated_at NOT NULL,
|
updated_at DATE CONSTRAINT nn_sessions_updated_at NOT NULL,
|
||||||
--
|
--
|
||||||
@ -20,9 +22,10 @@ CREATE TABLE sessions (
|
|||||||
--
|
--
|
||||||
COMMENT ON TABLE sessions IS '[CORE] List of sessions';
|
COMMENT ON TABLE sessions IS '[CORE] List of sessions';
|
||||||
--
|
--
|
||||||
COMMENT ON COLUMN sessions.app_id IS 'APEX application ID';
|
COMMENT ON COLUMN sessions.app_id IS 'APEX application ID';
|
||||||
COMMENT ON COLUMN sessions.session_id IS 'Session ID generated by APEX, used also in LOGS';
|
COMMENT ON COLUMN sessions.session_id IS 'Session ID generated by APEX, used also in LOGS';
|
||||||
COMMENT ON COLUMN sessions.user_id IS 'User ID';
|
COMMENT ON COLUMN sessions.user_id IS 'User ID';
|
||||||
COMMENT ON COLUMN sessions.created_at IS 'Time of creation';
|
COMMENT ON COLUMN sessions.persistent_items IS 'Items to retrieve after login';
|
||||||
COMMENT ON COLUMN sessions.updated_at IS 'Time of last update';
|
COMMENT ON COLUMN sessions.created_at IS 'Time of creation';
|
||||||
|
COMMENT ON COLUMN sessions.updated_at IS 'Time of last update';
|
||||||
|
|
||||||
|
|||||||
20
database/tables/setting_colors.sql
Normal file
20
database/tables/setting_colors.sql
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
--DROP TABLE setting_colors;
|
||||||
|
CREATE TABLE setting_colors (
|
||||||
|
app_id NUMBER(8,0) CONSTRAINT nn_setting_colors_app_id NOT NULL,
|
||||||
|
status_id VARCHAR2(30) CONSTRAINT nn_setting_colors_status_id NOT NULL,
|
||||||
|
treshold_min NUMBER,
|
||||||
|
treshold_max NUMBER,
|
||||||
|
color_code VARCHAR2(8),
|
||||||
|
updated_by VARCHAR2(128),
|
||||||
|
updated_at DATE,
|
||||||
|
--
|
||||||
|
CONSTRAINT pk_setting_colors
|
||||||
|
PRIMARY KEY (app_id, status_id),
|
||||||
|
--
|
||||||
|
CONSTRAINT fk_setting_colors_app_id
|
||||||
|
FOREIGN KEY (app_id)
|
||||||
|
REFERENCES apps (app_id)
|
||||||
|
);
|
||||||
|
--
|
||||||
|
COMMENT ON TABLE setting_colors IS '[CORE] List of colors for settings overrides';
|
||||||
|
|
||||||
@ -1,10 +1,11 @@
|
|||||||
|
--DROP TABLE setting_contexts;
|
||||||
CREATE TABLE setting_contexts (
|
CREATE TABLE setting_contexts (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_setting_contexts_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_setting_contexts_app_id NOT NULL,
|
||||||
context_id VARCHAR2(64) CONSTRAINT nn_setting_contexts_name NOT NULL,
|
context_id VARCHAR2(64) CONSTRAINT nn_setting_contexts_name NOT NULL,
|
||||||
context_name VARCHAR2(64),
|
context_name VARCHAR2(64),
|
||||||
description_ VARCHAR2(1000),
|
description_ VARCHAR2(1000),
|
||||||
order# NUMBER(4,0),
|
order# NUMBER(4,0),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT uq_setting_contexts
|
CONSTRAINT uq_setting_contexts
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
|
--DROP TABLE settings;
|
||||||
CREATE TABLE settings (
|
CREATE TABLE settings (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_settings_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_settings_app_id NOT NULL,
|
||||||
setting_name VARCHAR2(30) CONSTRAINT nn_settings_id NOT NULL,
|
setting_name VARCHAR2(30) CONSTRAINT nn_settings_id NOT NULL,
|
||||||
setting_value VARCHAR2(256),
|
setting_value VARCHAR2(256),
|
||||||
setting_context VARCHAR2(64),
|
setting_context VARCHAR2(64),
|
||||||
@ -8,7 +9,7 @@ CREATE TABLE settings (
|
|||||||
is_date CHAR(1),
|
is_date CHAR(1),
|
||||||
is_private CHAR(1),
|
is_private CHAR(1),
|
||||||
description_ VARCHAR2(1000),
|
description_ VARCHAR2(1000),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT ch_settings_is_active
|
CONSTRAINT ch_settings_is_active
|
||||||
|
|||||||
17
database/tables/source_lines.sql
Normal file
17
database/tables/source_lines.sql
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
CREATE TABLE source_lines (
|
||||||
|
owner VARCHAR2(30) CONSTRAINT nn_source_lines_owner NOT NULL,
|
||||||
|
name VARCHAR2(30) CONSTRAINT nn_source_lines_name NOT NULL,
|
||||||
|
line NUMBER(10,0) CONSTRAINT nn_source_lines_line NOT NULL,
|
||||||
|
text VARCHAR2(2000),
|
||||||
|
--
|
||||||
|
CONSTRAINT pk_source_lines
|
||||||
|
PRIMARY KEY (owner, name, line)
|
||||||
|
);
|
||||||
|
--
|
||||||
|
COMMENT ON TABLE source_lines IS '[CORE] User views source converted to lines';
|
||||||
|
--
|
||||||
|
COMMENT ON COLUMN source_lines.owner IS 'View owner';
|
||||||
|
COMMENT ON COLUMN source_lines.name IS 'View name';
|
||||||
|
COMMENT ON COLUMN source_lines.line IS 'Line number';
|
||||||
|
COMMENT ON COLUMN source_lines.text IS 'Line content';
|
||||||
|
|
||||||
@ -1,13 +1,14 @@
|
|||||||
|
--DROP TABLE translated_items;
|
||||||
CREATE TABLE translated_items (
|
CREATE TABLE translated_items (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_translated_items_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_translated_items_app_id NOT NULL,
|
||||||
page_id NUMBER(6,0) CONSTRAINT nn_translated_items_page_id NOT NULL,
|
page_id NUMBER(8,0) CONSTRAINT nn_translated_items_page_id NOT NULL,
|
||||||
item_name VARCHAR2(64) CONSTRAINT nn_translated_items_name NOT NULL,
|
item_name VARCHAR2(64) CONSTRAINT nn_translated_items_name NOT NULL,
|
||||||
value_en VARCHAR2(2000),
|
value_en VARCHAR2(2000),
|
||||||
value_cz VARCHAR2(2000),
|
value_cz VARCHAR2(2000),
|
||||||
value_sk VARCHAR2(2000),
|
value_sk VARCHAR2(2000),
|
||||||
value_pl VARCHAR2(2000),
|
value_pl VARCHAR2(2000),
|
||||||
value_hu VARCHAR2(2000),
|
value_hu VARCHAR2(2000),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT pk_translated_items
|
CONSTRAINT pk_translated_items
|
||||||
|
|||||||
@ -1,12 +1,13 @@
|
|||||||
|
--DROP TABLE translated_messages;
|
||||||
CREATE TABLE translated_messages (
|
CREATE TABLE translated_messages (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_translated_messages_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_translated_messages_app_id NOT NULL,
|
||||||
message VARCHAR2(256) CONSTRAINT nn_translated_messages_message NOT NULL,
|
message VARCHAR2(256) CONSTRAINT nn_translated_messages_message NOT NULL,
|
||||||
value_en VARCHAR2(2000),
|
value_en VARCHAR2(2000),
|
||||||
value_cz VARCHAR2(2000),
|
value_cz VARCHAR2(2000),
|
||||||
value_sk VARCHAR2(2000),
|
value_sk VARCHAR2(2000),
|
||||||
value_pl VARCHAR2(2000),
|
value_pl VARCHAR2(2000),
|
||||||
value_hu VARCHAR2(2000),
|
value_hu VARCHAR2(2000),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT pk_translated_messages
|
CONSTRAINT pk_translated_messages
|
||||||
|
|||||||
@ -1,11 +1,12 @@
|
|||||||
|
--DROP TABLE user_messages;
|
||||||
CREATE TABLE user_messages (
|
CREATE TABLE user_messages (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_user_messages_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_user_messages_app_id NOT NULL,
|
||||||
user_id VARCHAR2(30) CONSTRAINT nn_user_messages_user_id NOT NULL,
|
user_id VARCHAR2(128) CONSTRAINT nn_user_messages_user_id NOT NULL,
|
||||||
message_id INTEGER CONSTRAINT nn_user_messages_message_id NOT NULL,
|
message_id INTEGER CONSTRAINT nn_user_messages_message_id NOT NULL,
|
||||||
message_type VARCHAR2(16),
|
message_type VARCHAR2(16),
|
||||||
message_payload VARCHAR2(2000),
|
message_payload VARCHAR2(2000),
|
||||||
session_id INTEGER,
|
session_id INTEGER,
|
||||||
created_by VARCHAR2(30),
|
created_by VARCHAR2(128),
|
||||||
created_at DATE,
|
created_at DATE,
|
||||||
delivered_at DATE,
|
delivered_at DATE,
|
||||||
--
|
--
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
CREATE TABLE user_roles (
|
CREATE TABLE user_roles (
|
||||||
app_id NUMBER(4,0) CONSTRAINT nn_user_roles_app_id NOT NULL,
|
app_id NUMBER(8,0) CONSTRAINT nn_user_roles_app_id NOT NULL,
|
||||||
user_id VARCHAR2(30) CONSTRAINT nn_user_roles_user_id NOT NULL,
|
user_id VARCHAR2(128) CONSTRAINT nn_user_roles_user_id NOT NULL,
|
||||||
role_id VARCHAR2(30) CONSTRAINT nn_user_roles_role_id NOT NULL,
|
role_id VARCHAR2(30) CONSTRAINT nn_user_roles_role_id NOT NULL,
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT pk_user_roles
|
CONSTRAINT pk_user_roles
|
||||||
|
|||||||
@ -1,17 +0,0 @@
|
|||||||
CREATE TABLE user_source_views (
|
|
||||||
owner VARCHAR2(30) CONSTRAINT nn_user_source_views_owner NOT NULL,
|
|
||||||
name VARCHAR2(30) CONSTRAINT nn_user_source_views_name NOT NULL,
|
|
||||||
line NUMBER(10,0) CONSTRAINT nn_user_source_views_line NOT NULL,
|
|
||||||
text VARCHAR2(2000),
|
|
||||||
--
|
|
||||||
CONSTRAINT pk_user_source_views
|
|
||||||
PRIMARY KEY (owner, name, line)
|
|
||||||
);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE user_source_views IS '[CORE] User views source converted to lines';
|
|
||||||
--
|
|
||||||
COMMENT ON COLUMN user_source_views.owner IS 'View owner';
|
|
||||||
COMMENT ON COLUMN user_source_views.name IS 'View name';
|
|
||||||
COMMENT ON COLUMN user_source_views.line IS 'Line number';
|
|
||||||
COMMENT ON COLUMN user_source_views.text IS 'Line content';
|
|
||||||
|
|
||||||
@ -1,10 +1,10 @@
|
|||||||
CREATE TABLE users (
|
CREATE TABLE users (
|
||||||
user_id VARCHAR2(30) CONSTRAINT nn_users_user_id NOT NULL,
|
user_id VARCHAR2(128) CONSTRAINT nn_users_user_id NOT NULL,
|
||||||
user_login VARCHAR2(128) CONSTRAINT nn_users_login NOT NULL,
|
user_login VARCHAR2(128) CONSTRAINT nn_users_login NOT NULL,
|
||||||
user_name VARCHAR2(64),
|
user_name VARCHAR2(64),
|
||||||
lang_id VARCHAR2(5),
|
lang_id VARCHAR2(5),
|
||||||
is_active CHAR(1),
|
is_active CHAR(1),
|
||||||
updated_by VARCHAR2(30),
|
updated_by VARCHAR2(128),
|
||||||
updated_at DATE,
|
updated_at DATE,
|
||||||
--
|
--
|
||||||
CONSTRAINT ch_users_is_active
|
CONSTRAINT ch_users_is_active
|
||||||
|
|||||||
@ -1,10 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW lov_app_schemas AS
|
|
||||||
SELECT
|
|
||||||
a.owner,
|
|
||||||
a.owner AS owner_
|
|
||||||
FROM apex_applications a
|
|
||||||
WHERE a.owner NOT LIKE 'APEX%'
|
|
||||||
GROUP BY a.owner;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE lov_app_schemas IS '';
|
|
||||||
|
|
||||||
@ -7,31 +7,33 @@ WITH curr AS (
|
|||||||
app.get_page_root() AS page_root,
|
app.get_page_root() AS page_root,
|
||||||
app.get_page_group() AS page_group,
|
app.get_page_group() AS page_group,
|
||||||
app.get_user_id() AS user_id,
|
app.get_user_id() AS user_id,
|
||||||
app.get_user_name() AS user_name
|
app.get_user_name() AS user_name,
|
||||||
|
app.get_session_id() AS session_id
|
||||||
FROM DUAL
|
FROM DUAL
|
||||||
)
|
)
|
||||||
SELECT
|
SELECT
|
||||||
CASE WHEN n.parent_id IS NULL THEN 1 ELSE 2 END AS lvl,
|
CASE WHEN n.parent_id IS NULL THEN 1 ELSE 2 END AS lvl,
|
||||||
--
|
--
|
||||||
CASE
|
CASE
|
||||||
WHEN n.page_id = 100 -- home page
|
|
||||||
THEN REPLACE(n.page_name, '&' || 'ENV_NAME.', app.get_env_name() || ' &' || 'nbsp; ')
|
|
||||||
WHEN n.page_id > 0
|
WHEN n.page_id > 0
|
||||||
THEN REGEXP_REPLACE(REPLACE(n.page_name, '&' || 'APP_USER.', APEX_ESCAPE.HTML(NVL(curr.user_name, curr.user_id))), '^(&' || 'nbsp; )+', '')
|
THEN REGEXP_REPLACE(
|
||||||
|
REPLACE(
|
||||||
|
REPLACE(p.page_name, '&' || 'ENV_NAME.', app.get_env_name() || ' &' || 'nbsp; '),
|
||||||
|
'&' || 'APP_USER.', APEX_ESCAPE.HTML(NVL(curr.user_name, curr.user_id))),
|
||||||
|
'^(&' || 'nbsp; )+', '')
|
||||||
ELSE '</li></ul><ul class="EMPTY"></ul><ul><li style="display: none;">' -- a trick to split nav menu to left and right
|
ELSE '</li></ul><ul class="EMPTY"></ul><ul><li style="display: none;">' -- a trick to split nav menu to left and right
|
||||||
END AS label,
|
END AS label,
|
||||||
--
|
--
|
||||||
CASE
|
CASE
|
||||||
WHEN n.javascript IS NOT NULL
|
WHEN (p.javascript IS NOT NULL OR n.page_id = 0)
|
||||||
THEN n.page_url
|
THEN '#'
|
||||||
WHEN n.page_id > 0
|
WHEN n.page_id > 0
|
||||||
THEN APEX_PAGE.GET_URL (
|
THEN APEX_PAGE.GET_URL (
|
||||||
p_application => n.app_id,
|
p_application => n.app_id,
|
||||||
p_page => NVL(n.page_alias, TO_CHAR(n.page_id)),
|
p_page => NVL(p.page_alias, TO_CHAR(n.page_id)),
|
||||||
p_clear_cache => CASE WHEN n.is_reset = 'Y' THEN n.page_id END,
|
p_clear_cache => CASE WHEN n.is_reset = 'Y' THEN n.page_id END,
|
||||||
p_session => CASE WHEN n.page_id != 9999 THEN app.get_session_id() ELSE 0 END
|
p_session => CASE WHEN n.page_id != 9999 THEN curr.session_id ELSE 0 END
|
||||||
)
|
)
|
||||||
ELSE NVL(n.page_url, '#')
|
|
||||||
END AS target,
|
END AS target,
|
||||||
--
|
--
|
||||||
CASE
|
CASE
|
||||||
@ -44,8 +46,7 @@ SELECT
|
|||||||
--
|
--
|
||||||
CASE
|
CASE
|
||||||
WHEN n.page_id > 0
|
WHEN n.page_id > 0
|
||||||
THEN n.page_group || ' ' || n.css_class
|
THEN p.page_group
|
||||||
ELSE 'HIDDEN'
|
|
||||||
END AS attribute01,
|
END AS attribute01,
|
||||||
--
|
--
|
||||||
NULL AS attribute02, -- prepend link with element
|
NULL AS attribute02, -- prepend link with element
|
||||||
@ -58,12 +59,12 @@ SELECT
|
|||||||
CASE
|
CASE
|
||||||
WHEN n.page_id = 9999
|
WHEN n.page_id = 9999
|
||||||
THEN 'Logout'
|
THEN 'Logout'
|
||||||
ELSE n.page_title
|
ELSE p.page_title
|
||||||
END AS attribute04, -- a.title
|
END AS attribute04, -- a.title
|
||||||
--
|
--
|
||||||
n.javascript AS attribute05, -- javascript action
|
p.javascript AS attribute05, -- javascript action
|
||||||
--
|
--
|
||||||
NULL AS attribute06, -- badge left
|
NULL AS attribute06, -- badge left
|
||||||
--
|
--
|
||||||
CASE WHEN b.badge IS NOT NULL
|
CASE WHEN b.badge IS NOT NULL
|
||||||
THEN '<span class="BADGE">' || b.badge || '</badge>'
|
THEN '<span class="BADGE">' || b.badge || '</badge>'
|
||||||
@ -73,15 +74,19 @@ SELECT
|
|||||||
NULL AS attribute09,
|
NULL AS attribute09,
|
||||||
NULL AS attribute10,
|
NULL AS attribute10,
|
||||||
--
|
--
|
||||||
n.page_group,
|
n.r#
|
||||||
n.sort_order
|
FROM nav_source_sorted_mv n
|
||||||
FROM nav_overview n
|
JOIN nav_source_pages_mv p
|
||||||
|
ON p.app_id = n.app_id
|
||||||
|
AND p.page_id = n.page_id
|
||||||
CROSS JOIN curr
|
CROSS JOIN curr
|
||||||
LEFT JOIN nav_badges b
|
LEFT JOIN nav_badges b
|
||||||
ON b.page_id = n.page_id
|
ON b.page_id = n.page_id
|
||||||
WHERE n.action IS NULL
|
WHERE n.is_hidden IS NULL
|
||||||
AND n.is_hidden IS NULL
|
AND (
|
||||||
AND 'Y' = nav.is_page_available(n.page_id, n.app_id);
|
'Y' = nav.is_page_available(p.auth_scheme, p.app_id, p.page_id, p.procedure_name, p.data_type, p.page_argument)
|
||||||
|
OR n.page_id IN (0, 9999)
|
||||||
|
);
|
||||||
--
|
--
|
||||||
COMMENT ON TABLE nav_top IS '[CORE - DASHBOARD] Navigation view used for rendering top menu';
|
COMMENT ON TABLE nav_top IS '[CORE - DASHBOARD] Navigation view used for rendering top menu';
|
||||||
--
|
--
|
||||||
|
|||||||
@ -1,42 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_arguments AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$PACKAGE_NAME') AS package_name,
|
|
||||||
app.get_item('$MODULE_NAME') AS module_name,
|
|
||||||
app.get_item('$MODULE_TYPE') AS module_type, -- @TODO: implement
|
|
||||||
app.get_item('$ARGUMENT_NAME') AS argument_name,
|
|
||||||
--
|
|
||||||
UPPER(app.get_item('$SEARCH_PACKAGES')) AS search_packages,
|
|
||||||
UPPER(app.get_item('$SEARCH_MODULES')) AS search_modules
|
|
||||||
FROM DUAL
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
a.package_name,
|
|
||||||
a.object_name AS module_name,
|
|
||||||
a.overload,
|
|
||||||
NULLIF(a.position, 0) AS position,
|
|
||||||
a.argument_name,
|
|
||||||
--
|
|
||||||
CASE WHEN a.in_out IN ('IN', 'IN_OUT') THEN 'Y' END AS is_in,
|
|
||||||
CASE WHEN a.in_out IN ('OUT', 'IN_OUT') THEN 'Y' END AS is_out,
|
|
||||||
--
|
|
||||||
a.data_type,
|
|
||||||
a.data_length,
|
|
||||||
a.data_precision,
|
|
||||||
NULLIF(a.defaulted, 'N') AS is_default,
|
|
||||||
a.default_value,
|
|
||||||
--
|
|
||||||
ROW_NUMBER() OVER(ORDER BY a.package_name, a.subprogram_id, a.object_name, a.overload, a.position) AS sort#
|
|
||||||
FROM all_arguments a
|
|
||||||
JOIN x
|
|
||||||
ON a.owner = x.owner
|
|
||||||
AND a.package_name = NVL(x.package_name, a.package_name)
|
|
||||||
AND a.object_name = NVL(x.module_name, a.object_name)
|
|
||||||
AND a.argument_name = NVL(x.argument_name, a.argument_name)
|
|
||||||
--
|
|
||||||
AND (a.package_name LIKE x.search_packages || '%' ESCAPE '\' OR x.search_packages IS NULL)
|
|
||||||
AND (a.object_name LIKE x.search_modules || '%' ESCAPE '\' OR x.search_modules IS NULL);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_arguments IS '';
|
|
||||||
|
|
||||||
@ -1,104 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_columns AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name,
|
|
||||||
--
|
|
||||||
UPPER(app.get_item('$SEARCH_TABLES')) AS search_tables,
|
|
||||||
UPPER(app.get_item('$SEARCH_COLUMNS')) AS search_columns,
|
|
||||||
UPPER(app.get_item('$SEARCH_DATA_TYPE')) AS search_data_type,
|
|
||||||
app.get_number_item('$SEARCH_SIZE') AS search_size
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
c AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
c.table_name,
|
|
||||||
c.column_id,
|
|
||||||
c.column_name,
|
|
||||||
--
|
|
||||||
c.data_type ||
|
|
||||||
CASE
|
|
||||||
WHEN c.data_type LIKE '%CHAR%' OR c.data_type = 'RAW' THEN
|
|
||||||
DECODE(NVL(c.char_length, 0), 0, '',
|
|
||||||
'(' || c.char_length || DECODE(c.char_used, 'C', ' CHAR', '') || ')'
|
|
||||||
)
|
|
||||||
WHEN c.data_type = 'NUMBER' THEN
|
|
||||||
DECODE(NVL(c.data_precision || c.data_scale, 0), 0, '',
|
|
||||||
DECODE(NVL(c.data_scale, 0), 0, '(' || c.data_precision || ')',
|
|
||||||
'(' || c.data_precision || ',' || c.data_scale || ')'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
END AS data_type,
|
|
||||||
--
|
|
||||||
c.nullable,
|
|
||||||
c.data_default,
|
|
||||||
c.avg_col_len,
|
|
||||||
--
|
|
||||||
CASE WHEN c.column_name LIKE x.search_columns || '%' ESCAPE '\' THEN 'Y' END AS is_found_column,
|
|
||||||
CASE WHEN c.data_type LIKE x.search_data_type || '%' ESCAPE '\' THEN 'Y' END AS is_found_data_type,
|
|
||||||
CASE WHEN NVL(c.data_precision, c.data_length) = x.search_size THEN 'Y' END AS is_found_size
|
|
||||||
FROM all_tab_columns c
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = c.owner
|
|
||||||
JOIN all_tables t
|
|
||||||
ON t.owner = c.owner
|
|
||||||
AND t.table_name = c.table_name
|
|
||||||
CROSS JOIN x
|
|
||||||
WHERE t.table_name = NVL(x.table_name, t.table_name)
|
|
||||||
AND t.table_name != app.get_dml_table(t.table_name)
|
|
||||||
AND (c.table_name LIKE '%' || x.search_tables || '%' ESCAPE '\' OR x.search_tables IS NULL)
|
|
||||||
),
|
|
||||||
n AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
m.table_name,
|
|
||||||
m.column_name,
|
|
||||||
CASE WHEN SUM(CASE WHEN n.constraint_type = 'P' THEN 1 ELSE 0 END) > 0 THEN 'Y' END AS is_pk,
|
|
||||||
CASE WHEN SUM(CASE WHEN n.constraint_type = 'R' THEN 1 ELSE 0 END) > 0 THEN 'Y' END AS is_fk,
|
|
||||||
CASE WHEN SUM(CASE WHEN n.constraint_type = 'U' THEN 1 ELSE 0 END) > 0 THEN 'Y' END AS is_uq,
|
|
||||||
--
|
|
||||||
SUM(CASE WHEN n.constraint_type = 'C' THEN 1 ELSE 0 END) AS count_ch
|
|
||||||
FROM all_cons_columns m
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = m.owner
|
|
||||||
JOIN all_constraints n
|
|
||||||
ON n.owner = m.owner
|
|
||||||
AND n.constraint_name = m.constraint_name
|
|
||||||
AND n.constraint_type IN ('P', 'R', 'U', 'C')
|
|
||||||
CROSS JOIN x
|
|
||||||
WHERE n.table_name = NVL(x.table_name, n.table_name)
|
|
||||||
GROUP BY m.table_name, m.column_name
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
c.table_name,
|
|
||||||
c.column_id,
|
|
||||||
c.column_name,
|
|
||||||
c.column_name AS column_name_old,
|
|
||||||
c.data_type,
|
|
||||||
c.data_default,
|
|
||||||
c.avg_col_len AS avg_length,
|
|
||||||
--
|
|
||||||
n.is_pk,
|
|
||||||
n.is_uq,
|
|
||||||
n.is_fk,
|
|
||||||
--
|
|
||||||
CASE WHEN n.count_ch - CASE WHEN c.nullable = 'N' THEN 1 ELSE 0 END > 0 THEN 'Y' END AS is_ch,
|
|
||||||
--
|
|
||||||
CASE WHEN c.nullable = 'N' THEN 'Y' END AS is_nn,
|
|
||||||
--
|
|
||||||
m.comments
|
|
||||||
FROM c
|
|
||||||
CROSS JOIN x
|
|
||||||
LEFT JOIN n
|
|
||||||
ON n.table_name = c.table_name
|
|
||||||
AND n.column_name = c.column_name
|
|
||||||
LEFT JOIN all_col_comments m
|
|
||||||
ON m.owner = x.owner
|
|
||||||
AND m.table_name = c.table_name
|
|
||||||
AND m.column_name = c.column_name
|
|
||||||
WHERE 1 = 1
|
|
||||||
AND (c.is_found_column = 'Y' OR x.search_columns IS NULL)
|
|
||||||
AND (c.is_found_data_type = 'Y' OR x.search_data_type IS NULL)
|
|
||||||
AND (c.is_found_size = 'Y' OR x.search_size IS NULL);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_columns IS '';
|
|
||||||
|
|
||||||
@ -1,100 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_constraints AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
n AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
XMLTYPE(DBMS_XMLGEN.GETXML('SELECT c.constraint_name AS name, c.search_condition AS text
|
|
||||||
FROM all_constraints c
|
|
||||||
WHERE c.owner = ''' || x.owner || '''
|
|
||||||
AND c.table_name = NVL(''' || x.table_name || ''', c.table_name)
|
|
||||||
AND c.constraint_type = ''C''
|
|
||||||
')) AS constraint_source
|
|
||||||
FROM x
|
|
||||||
),
|
|
||||||
s AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
EXTRACTVALUE(s.object_value, '/ROW/NAME') AS constraint_name,
|
|
||||||
EXTRACTVALUE(s.object_value, '/ROW/TEXT') AS search_condition
|
|
||||||
FROM n
|
|
||||||
CROSS JOIN TABLE(XMLSEQUENCE(EXTRACT(n.constraint_source, '/ROWSET/ROW'))) s
|
|
||||||
),
|
|
||||||
p AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
n.table_name,
|
|
||||||
n.constraint_name,
|
|
||||||
k.table_name AS primary_table,
|
|
||||||
LISTAGG(p.column_name, ', ') WITHIN GROUP (ORDER BY p.position) AS primary_cols,
|
|
||||||
n.r_constraint_name AS primary_constraint
|
|
||||||
FROM all_constraints n
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = n.owner
|
|
||||||
AND n.table_name = NVL(x.table_name, n.table_name)
|
|
||||||
JOIN all_cons_columns c
|
|
||||||
ON c.owner = n.owner
|
|
||||||
AND c.constraint_name = n.constraint_name
|
|
||||||
JOIN all_cons_columns p
|
|
||||||
ON p.owner = n.owner
|
|
||||||
AND p.constraint_name = n.r_constraint_name
|
|
||||||
AND p.position = c.position
|
|
||||||
JOIN all_constraints k
|
|
||||||
ON k.owner = n.owner
|
|
||||||
AND k.constraint_name = n.r_constraint_name
|
|
||||||
WHERE n.constraint_type = 'R'
|
|
||||||
GROUP BY n.table_name, n.constraint_name, k.table_name, n.r_constraint_name
|
|
||||||
),
|
|
||||||
c AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
n.table_name,
|
|
||||||
n.constraint_name,
|
|
||||||
n.constraint_type,
|
|
||||||
--
|
|
||||||
LISTAGG(c.column_name, ', ') WITHIN GROUP (ORDER BY c.position) AS cols,
|
|
||||||
--
|
|
||||||
MAX(CASE WHEN s.constraint_name IS NOT NULL THEN 'Y' END) AS is_nn,
|
|
||||||
MAX(CASE WHEN n.generated = 'GENERATED NAME' THEN 'Y' END) AS is_generated,
|
|
||||||
MAX(CASE WHEN n.status = 'DISABLED' THEN 'Y' END) AS is_disabled,
|
|
||||||
MAX(CASE WHEN n.deferrable = 'DEFERRABLE' THEN 'Y' END) AS is_deferred,
|
|
||||||
--
|
|
||||||
MAX(n.delete_rule) AS delete_rule
|
|
||||||
FROM all_constraints n
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = n.owner
|
|
||||||
AND n.table_name = NVL(x.table_name, n.table_name)
|
|
||||||
JOIN all_cons_columns c
|
|
||||||
ON c.owner = n.owner
|
|
||||||
AND c.constraint_name = n.constraint_name
|
|
||||||
LEFT JOIN s
|
|
||||||
ON s.constraint_name = n.constraint_name
|
|
||||||
AND s.search_condition = '"' || c.column_name || '" IS NOT NULL'
|
|
||||||
WHERE n.table_name NOT IN (SELECT object_name FROM RECYCLEBIN)
|
|
||||||
GROUP BY n.table_name, n.constraint_name, n.constraint_type
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
c.table_name,
|
|
||||||
c.constraint_name,
|
|
||||||
c.constraint_name AS constraint_name_old,
|
|
||||||
c.constraint_type,
|
|
||||||
c.cols,
|
|
||||||
--
|
|
||||||
p.primary_table,
|
|
||||||
p.primary_cols,
|
|
||||||
p.primary_constraint,
|
|
||||||
--
|
|
||||||
c.is_nn,
|
|
||||||
c.is_generated,
|
|
||||||
c.is_disabled,
|
|
||||||
c.is_deferred,
|
|
||||||
c.delete_rule,
|
|
||||||
--
|
|
||||||
TO_CHAR(CASE c.constraint_type WHEN 'P' THEN 1 WHEN 'R' THEN 2 ELSE 3 END) || c.constraint_name AS sort#
|
|
||||||
FROM c
|
|
||||||
LEFT JOIN p
|
|
||||||
ON p.table_name = c.table_name
|
|
||||||
AND p.constraint_name = c.constraint_name;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_constraints IS '';
|
|
||||||
|
|
||||||
@ -1,66 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_constraints_fix_dt1 AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
s AS (
|
|
||||||
SELECT
|
|
||||||
a.table_name,
|
|
||||||
a.column_name,
|
|
||||||
c.position,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN a.data_type = 'NUMBER' THEN
|
|
||||||
a.data_type ||
|
|
||||||
CASE WHEN a.data_precision IS NOT NULL THEN '(' || a.data_precision || DECODE(a.data_scale, 0, '', ', ' || a.data_scale) || ')' END
|
|
||||||
WHEN a.data_type IN ('CHAR', 'VARCHAR', 'VARCHAR2') THEN
|
|
||||||
a.data_type || '(' ||
|
|
||||||
DECODE(a.char_used, 'C', a.char_length || ' CHAR', a.data_length) || ')'
|
|
||||||
ELSE a.data_type
|
|
||||||
END AS data_type,
|
|
||||||
--
|
|
||||||
n.constraint_type,
|
|
||||||
c.constraint_name,
|
|
||||||
n.r_constraint_name
|
|
||||||
FROM all_tab_columns a
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = a.owner
|
|
||||||
JOIN all_tables t
|
|
||||||
ON t.owner = a.owner
|
|
||||||
AND t.table_name = a.table_name
|
|
||||||
JOIN all_cons_columns c
|
|
||||||
ON c.owner = a.owner
|
|
||||||
AND c.table_name = a.table_name
|
|
||||||
AND c.column_name = a.column_name
|
|
||||||
JOIN all_constraints n
|
|
||||||
ON n.owner = c.owner
|
|
||||||
AND n.constraint_name = c.constraint_name
|
|
||||||
AND n.constraint_type IN ('P', 'R')
|
|
||||||
ORDER BY a.table_name, n.constraint_type, n.constraint_name, a.column_name
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
b.table_name AS foreign_table,
|
|
||||||
b.column_name AS foreign_column,
|
|
||||||
b.data_type AS foreign_type,
|
|
||||||
--
|
|
||||||
s.table_name AS parent_table,
|
|
||||||
s.column_name AS parent_column,
|
|
||||||
s.data_type AS parent_type,
|
|
||||||
--
|
|
||||||
'ALTER TABLE ' || LOWER(b.table_name) ||
|
|
||||||
' MODIFY ' || LOWER(b.column_name) || ' ' || s.data_type || ';' AS fix
|
|
||||||
FROM s
|
|
||||||
JOIN s b
|
|
||||||
ON b.r_constraint_name = s.constraint_name
|
|
||||||
AND b.position = s.position
|
|
||||||
CROSS JOIN x
|
|
||||||
WHERE b.data_type != s.data_type
|
|
||||||
AND (
|
|
||||||
x.table_name IN (b.table_name, s.table_name)
|
|
||||||
OR x.table_name IS NULL
|
|
||||||
);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_constraints_fix_dt1 IS '';
|
|
||||||
|
|
||||||
@ -1,96 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_constraints_fix_dt2 AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
s AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
a.table_name,
|
|
||||||
a.column_name,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN a.data_type = 'NUMBER' THEN
|
|
||||||
a.data_type ||
|
|
||||||
CASE WHEN a.data_precision IS NOT NULL THEN '(' || a.data_precision || DECODE(a.data_scale, 0, '', ', ' || a.data_scale) || ')' END
|
|
||||||
--
|
|
||||||
WHEN a.data_type IN ('CHAR', 'VARCHAR', 'VARCHAR2') THEN
|
|
||||||
a.data_type || '(' ||
|
|
||||||
DECODE(a.char_used, 'C', a.char_length || ' CHAR', a.data_length) || ')'
|
|
||||||
--
|
|
||||||
ELSE a.data_type
|
|
||||||
END AS data_type
|
|
||||||
FROM all_tab_columns a
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = a.owner
|
|
||||||
JOIN all_tables t
|
|
||||||
ON t.owner = a.owner
|
|
||||||
AND t.table_name = a.table_name
|
|
||||||
LEFT JOIN all_mviews m
|
|
||||||
ON m.owner = a.owner
|
|
||||||
AND m.mview_name = a.table_name
|
|
||||||
LEFT JOIN obj_constraints_fix_dt1 d
|
|
||||||
ON d.foreign_table = a.table_name
|
|
||||||
AND d.foreign_column = a.column_name
|
|
||||||
WHERE t.table_name NOT LIKE '%$' ESCAPE '\' -- skip DML err tables, audit tables...
|
|
||||||
AND m.mview_name IS NULL -- skip materialized views
|
|
||||||
AND d.foreign_table IS NULL -- skip columns marked as FK errors
|
|
||||||
),
|
|
||||||
t AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
s.column_name,
|
|
||||||
s.data_type,
|
|
||||||
--
|
|
||||||
COUNT(DISTINCT s.data_type) OVER (PARTITION BY s.column_name) AS count_types
|
|
||||||
FROM s
|
|
||||||
GROUP BY s.column_name, s.data_type
|
|
||||||
),
|
|
||||||
r AS (
|
|
||||||
-- unmatching column data types
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
t.*
|
|
||||||
FROM t
|
|
||||||
CROSS JOIN x
|
|
||||||
WHERE (
|
|
||||||
t.column_name IN (
|
|
||||||
SELECT c.column_name
|
|
||||||
FROM all_tab_cols c
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = c.owner
|
|
||||||
AND x.table_name = c.table_name
|
|
||||||
)
|
|
||||||
OR x.table_name IS NULL
|
|
||||||
)
|
|
||||||
AND t.count_types > 1
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
r.column_name,
|
|
||||||
s.data_type,
|
|
||||||
--
|
|
||||||
LISTAGG(nav.get_html_a(app_actions.get_object_link('TABLE', s.table_name), s.table_name), ', ')
|
|
||||||
WITHIN GROUP (ORDER BY s.table_name) AS list_tables,
|
|
||||||
--
|
|
||||||
COUNT(s.table_name) AS count_tables,
|
|
||||||
--
|
|
||||||
app.get_icon (
|
|
||||||
CASE
|
|
||||||
WHEN r.data_type = (SELECT MAX(s.data_type) FROM s WHERE s.table_name = x.table_name AND s.column_name = r.column_name)
|
|
||||||
THEN NULL
|
|
||||||
--
|
|
||||||
WHEN x.table_name IS NOT NULL
|
|
||||||
THEN 'fa-check-square'
|
|
||||||
END
|
|
||||||
) AS action_fix,
|
|
||||||
--
|
|
||||||
'ALTER TABLE ' || NVL(LOWER(x.table_name), '?') ||
|
|
||||||
' MODIFY ' || LOWER(r.column_name) || ' ' || r.data_type || ';' AS fix
|
|
||||||
FROM r
|
|
||||||
CROSS JOIN x
|
|
||||||
JOIN s
|
|
||||||
ON s.column_name = r.column_name
|
|
||||||
AND s.data_type != r.data_type
|
|
||||||
GROUP BY x.table_name, r.column_name, r.data_type, s.data_type;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_constraints_fix_dt2 IS '';
|
|
||||||
|
|
||||||
@ -1,48 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_indexes AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
c AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
c.table_owner,
|
|
||||||
c.table_name,
|
|
||||||
c.index_name,
|
|
||||||
LISTAGG(c.column_name, ', ') WITHIN GROUP (ORDER BY c.column_position) AS list_columns
|
|
||||||
FROM all_ind_columns c
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = c.table_owner
|
|
||||||
AND c.table_name = NVL(x.table_name, c.table_name)
|
|
||||||
WHERE c.table_name NOT IN (SELECT object_name FROM RECYCLEBIN)
|
|
||||||
GROUP BY c.table_owner, c.table_name, c.index_name
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
i.table_name,
|
|
||||||
i.index_name,
|
|
||||||
i.index_type,
|
|
||||||
--
|
|
||||||
CASE WHEN i.uniqueness = 'UNIQUE' THEN 'Y' END AS is_unique,
|
|
||||||
CASE WHEN i.constraint_index = 'YES' THEN 'Y' END AS is_constraint,
|
|
||||||
CASE WHEN NVL(i.funcidx_status, i.status) = 'VALID' THEN 'Y' END AS is_valid,
|
|
||||||
CASE WHEN i.compression = 'ENABLED' THEN 'Y' END AS is_compressed,
|
|
||||||
CASE WHEN i.partitioned = 'YES' THEN 'Y' END AS is_partitioned,
|
|
||||||
CASE WHEN i.visibility = 'VISIBLE' THEN 'Y' END AS is_visible,
|
|
||||||
--
|
|
||||||
c.list_columns,
|
|
||||||
--
|
|
||||||
i.num_rows,
|
|
||||||
i.distinct_keys,
|
|
||||||
i.leaf_blocks,
|
|
||||||
i.tablespace_name,
|
|
||||||
i.last_analyzed
|
|
||||||
FROM all_indexes i
|
|
||||||
JOIN c
|
|
||||||
ON c.table_owner = i.table_owner
|
|
||||||
AND c.table_name = i.table_name
|
|
||||||
AND c.index_name = i.index_name
|
|
||||||
WHERE i.generated = 'N';
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_indexes IS '';
|
|
||||||
|
|
||||||
@ -1,51 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_indexes_missing AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
f AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
t.table_name,
|
|
||||||
t.constraint_name AS index_name,
|
|
||||||
LISTAGG(t.column_name, ', ') WITHIN GROUP (ORDER BY t.position) AS cols
|
|
||||||
FROM all_cons_columns t
|
|
||||||
JOIN all_constraints n
|
|
||||||
ON n.owner = t.owner
|
|
||||||
AND n.constraint_name = t.constraint_name
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = n.owner
|
|
||||||
AND n.table_name = NVL(x.table_name, n.table_name)
|
|
||||||
WHERE n.constraint_type = 'R'
|
|
||||||
AND n.table_name NOT IN (SELECT object_name FROM RECYCLEBIN)
|
|
||||||
GROUP BY t.table_name, t.constraint_name
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
app.get_icon('fa-plus-square') AS action,
|
|
||||||
app.get_page_url(951,
|
|
||||||
in_names => 'P951_TABLE_NAME,P951_INDEX_NAME,P951_INDEX_ADD',
|
|
||||||
in_values => f.table_name || ',' || f.index_name || ',Y'
|
|
||||||
) AS action_url,
|
|
||||||
--
|
|
||||||
f.table_name,
|
|
||||||
f.index_name,
|
|
||||||
f.cols,
|
|
||||||
--
|
|
||||||
'CREATE INDEX ' || RPAD(f.index_name, 30) ||
|
|
||||||
' ON ' || RPAD(f.table_name, 30) || ' (' || f.cols || ') COMPUTE STATISTICS;' AS fix
|
|
||||||
FROM f
|
|
||||||
LEFT JOIN (
|
|
||||||
SELECT i.table_name, i.index_name, LISTAGG(i.column_name, ', ') WITHIN GROUP (ORDER BY i.column_position) AS cols
|
|
||||||
FROM all_ind_columns i
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = i.table_owner
|
|
||||||
AND i.table_name = NVL(x.table_name, i.table_name)
|
|
||||||
GROUP BY i.table_name, i.index_name
|
|
||||||
) i
|
|
||||||
ON i.table_name = f.table_name
|
|
||||||
AND i.cols LIKE f.cols || '%'
|
|
||||||
WHERE i.index_name IS NULL;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_indexes_missing IS '';
|
|
||||||
|
|
||||||
@ -1,122 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_modules AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$PACKAGE_NAME') AS package_name,
|
|
||||||
app.get_item('$MODULE_NAME') AS module_name,
|
|
||||||
app.get_item('$MODULE_TYPE') AS module_type,
|
|
||||||
app.get_item('$ARGUMENT_NAME') AS argument_name,
|
|
||||||
--
|
|
||||||
UPPER(app.get_item('$SEARCH_PACKAGES')) AS search_packages,
|
|
||||||
UPPER(app.get_item('$SEARCH_MODULES')) AS search_modules,
|
|
||||||
UPPER(app.get_item('$SEARCH_ARGUMENTS')) AS search_arguments,
|
|
||||||
LOWER(app.get_item('$SEARCH_SOURCE')) AS search_source
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
t AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
t.*,
|
|
||||||
x.argument_name,
|
|
||||||
x.search_arguments,
|
|
||||||
x.search_source
|
|
||||||
FROM obj_modules_mvw t
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = t.owner
|
|
||||||
AND t.package_name = NVL(x.package_name, t.package_name)
|
|
||||||
AND t.module_name = NVL(x.module_name, t.module_name)
|
|
||||||
--AND SUBSTR(t.module_type, 1, 1) = NVL(x.module_type, SUBSTR(t.module_type, 1, 1))
|
|
||||||
--
|
|
||||||
AND (t.package_name LIKE x.search_packages || '%' ESCAPE '\' OR x.search_packages IS NULL)
|
|
||||||
AND (t.module_name LIKE x.search_modules || '%' ESCAPE '\' OR x.search_modules IS NULL)
|
|
||||||
),
|
|
||||||
a AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
t.package_name,
|
|
||||||
t.module_name,
|
|
||||||
t.subprogram_id
|
|
||||||
FROM t
|
|
||||||
JOIN all_arguments a
|
|
||||||
ON a.owner = t.owner
|
|
||||||
AND a.package_name = t.package_name
|
|
||||||
AND a.object_name = t.module_name
|
|
||||||
AND a.subprogram_id = t.subprogram_id
|
|
||||||
AND a.argument_name LIKE t.search_arguments || '%' ESCAPE '\'
|
|
||||||
AND (a.argument_name = t.argument_name OR t.argument_name IS NULL)
|
|
||||||
GROUP BY t.package_name, t.module_name, t.subprogram_id
|
|
||||||
),
|
|
||||||
s AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
t.package_name,
|
|
||||||
t.module_name,
|
|
||||||
t.subprogram_id
|
|
||||||
FROM t
|
|
||||||
JOIN all_source s
|
|
||||||
ON s.owner = t.owner
|
|
||||||
AND s.name = t.package_name
|
|
||||||
AND s.line BETWEEN t.body_start AND t.body_end
|
|
||||||
AND s.text LIKE '%' || t.search_source || '%' ESCAPE '\'
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
t.owner,
|
|
||||||
t.package_name,
|
|
||||||
t.module_name,
|
|
||||||
t.subprogram_id,
|
|
||||||
t.overload,
|
|
||||||
t.group_name,
|
|
||||||
t.is_function,
|
|
||||||
t.is_private,
|
|
||||||
t.is_autonomous,
|
|
||||||
t.is_cached,
|
|
||||||
t.is_definer,
|
|
||||||
t.args_in,
|
|
||||||
t.args_out,
|
|
||||||
t.spec_start,
|
|
||||||
t.spec_end,
|
|
||||||
t.spec_lines,
|
|
||||||
t.body_start,
|
|
||||||
t.body_end,
|
|
||||||
t.count_lines,
|
|
||||||
t.count_statements,
|
|
||||||
t.comment_
|
|
||||||
FROM t
|
|
||||||
WHERE (
|
|
||||||
(t.package_name, t.module_name, t.subprogram_id) IN (
|
|
||||||
SELECT a.package_name, a.module_name, a.subprogram_id
|
|
||||||
FROM a
|
|
||||||
)
|
|
||||||
OR (
|
|
||||||
t.argument_name IS NULL
|
|
||||||
AND t.search_arguments IS NULL
|
|
||||||
)
|
|
||||||
)
|
|
||||||
AND (
|
|
||||||
(t.package_name, t.module_name, t.subprogram_id) IN (
|
|
||||||
SELECT s.package_name, s.module_name, s.subprogram_id
|
|
||||||
FROM s
|
|
||||||
)
|
|
||||||
OR (
|
|
||||||
t.search_source IS NULL
|
|
||||||
)
|
|
||||||
);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_modules IS 'Find package modules (procedures and functions) and their boundaries (start-end lines)';
|
|
||||||
--
|
|
||||||
COMMENT ON COLUMN obj_modules.package_name IS 'Package name';
|
|
||||||
COMMENT ON COLUMN obj_modules.module_name IS 'Module name';
|
|
||||||
COMMENT ON COLUMN obj_modules.overload IS 'Overload ID';
|
|
||||||
COMMENT ON COLUMN obj_modules.group_name IS 'Group name to have similar modules grouped together';
|
|
||||||
COMMENT ON COLUMN obj_modules.is_function IS 'Module type (function)';
|
|
||||||
COMMENT ON COLUMN obj_modules.is_private IS 'Flag for private procedures';
|
|
||||||
COMMENT ON COLUMN obj_modules.is_autonomous IS 'Contains autonomous transaction';
|
|
||||||
COMMENT ON COLUMN obj_modules.is_cached IS 'Has RESULT_CACHE activated';
|
|
||||||
COMMENT ON COLUMN obj_modules.is_definer IS 'Auth as definer';
|
|
||||||
COMMENT ON COLUMN obj_modules.args_in IS 'Number of IN arguments';
|
|
||||||
COMMENT ON COLUMN obj_modules.args_out IS 'Number of OUT arguments';
|
|
||||||
COMMENT ON COLUMN obj_modules.spec_start IS 'Module start in specification';
|
|
||||||
COMMENT ON COLUMN obj_modules.spec_end IS 'Module end in specification';
|
|
||||||
COMMENT ON COLUMN obj_modules.spec_lines IS 'Lines in specification';
|
|
||||||
COMMENT ON COLUMN obj_modules.body_start IS 'Module start in body';
|
|
||||||
COMMENT ON COLUMN obj_modules.body_end IS 'Module end in body';
|
|
||||||
COMMENT ON COLUMN obj_modules.count_lines IS 'Lines in body';
|
|
||||||
COMMENT ON COLUMN obj_modules.comment_ IS 'Description from package spec';
|
|
||||||
|
|
||||||
@ -1,13 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_overview AS
|
|
||||||
SELECT
|
|
||||||
INITCAP(o.object_type) AS object_type,
|
|
||||||
COUNT(*) AS count_objects,
|
|
||||||
--
|
|
||||||
app_actions.get_object_link(o.object_type) AS page_link
|
|
||||||
FROM all_objects o
|
|
||||||
WHERE o.owner = app.get_owner()
|
|
||||||
AND o.object_type NOT IN ('PACKAGE BODY', 'TABLE PARTITION')
|
|
||||||
GROUP BY o.object_type;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_overview IS '';
|
|
||||||
|
|
||||||
@ -1,28 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_packages AS
|
|
||||||
SELECT
|
|
||||||
t.package_name,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN REGEXP_LIKE(t.package_name, '^A\d+$') THEN 'CORE - Application roles...'
|
|
||||||
WHEN REGEXP_LIKE(t.package_name, '^S\d+$') THEN 'CORE - Application settings'
|
|
||||||
WHEN t.package_name IN ('APP', 'APP_ACTIONS', 'GEN') THEN 'CORE'
|
|
||||||
END AS package_group,
|
|
||||||
--
|
|
||||||
NULLIF(COUNT(*) - SUM(CASE WHEN t.is_function IS NOT NULL THEN 1 ELSE 0 END), 0) AS count_procedures,
|
|
||||||
NULLIF(SUM(CASE WHEN t.is_function IS NOT NULL THEN 1 ELSE 0 END), 0) AS count_functions,
|
|
||||||
--
|
|
||||||
SUM(t.count_lines) AS count_lines,
|
|
||||||
SUM(t.count_statements) AS count_statements,
|
|
||||||
--
|
|
||||||
MAX(o.last_ddl_time) AS last_ddl_time,
|
|
||||||
--
|
|
||||||
NULL AS desc_
|
|
||||||
FROM obj_modules t
|
|
||||||
JOIN all_objects o
|
|
||||||
ON o.owner = t.owner
|
|
||||||
AND o.object_name = t.package_name
|
|
||||||
AND o.object_type = 'PACKAGE'
|
|
||||||
GROUP BY t.package_name;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_packages IS 'List of packages';
|
|
||||||
|
|
||||||
@ -1,77 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_packages_settings AS
|
|
||||||
WITH s AS (
|
|
||||||
SELECT
|
|
||||||
s.name AS object_name,
|
|
||||||
s.type AS object_type,
|
|
||||||
--
|
|
||||||
CASE WHEN s.plsql_code_type = 'INTERPRETED' THEN 'Y' END AS is_interpreted,
|
|
||||||
s.plsql_optimize_level,
|
|
||||||
--
|
|
||||||
CASE WHEN s.plscope_settings LIKE '%IDENTIFIERS:ALL%' THEN 'Y' END AS is_scope_identifiers,
|
|
||||||
CASE WHEN s.plscope_settings LIKE '%STATEMENTS:ALL%' THEN 'Y' END AS is_scope_statements,
|
|
||||||
--
|
|
||||||
CASE WHEN s.plsql_warnings LIKE '%ENABLE:INFORMATIONAL%' OR s.plsql_warnings LIKE '%ENABLE:ALL%' THEN 'Y' END AS is_warning_informational,
|
|
||||||
CASE WHEN s.plsql_warnings LIKE '%ENABLE:PERFORMANCE%' OR s.plsql_warnings LIKE '%ENABLE:ALL%' THEN 'Y' END AS is_warning_performance,
|
|
||||||
CASE WHEN s.plsql_warnings LIKE '%ENABLE:SEVERE%' OR s.plsql_warnings LIKE '%ENABLE:ALL%' THEN 'Y' END AS is_warning_severe,
|
|
||||||
--
|
|
||||||
CASE WHEN s.plsql_debug = 'TRUE' THEN 'Y' END AS is_plsql_debug,
|
|
||||||
CASE WHEN s.nls_length_semantics = 'CHAR' THEN 'Y' END AS is_nls_char,
|
|
||||||
--
|
|
||||||
s.plsql_ccflags
|
|
||||||
FROM all_plsql_object_settings s
|
|
||||||
WHERE s.owner = app.get_owner()
|
|
||||||
AND s.type LIKE 'PACKAGE%'
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
CASE
|
|
||||||
WHEN s.is_interpreted = 'Y'
|
|
||||||
AND s.plsql_optimize_level <= 2
|
|
||||||
AND s.is_scope_identifiers = 'Y'
|
|
||||||
AND s.is_scope_statements = 'Y'
|
|
||||||
THEN NULL
|
|
||||||
ELSE app.get_icon('fa-warning', 'This package is not available for analysis')
|
|
||||||
END AS action_check,
|
|
||||||
--
|
|
||||||
s.object_name,
|
|
||||||
s.object_type,
|
|
||||||
--
|
|
||||||
s.is_interpreted,
|
|
||||||
s.plsql_optimize_level,
|
|
||||||
s.is_scope_identifiers,
|
|
||||||
s.is_scope_statements,
|
|
||||||
s.is_warning_informational,
|
|
||||||
s.is_warning_performance,
|
|
||||||
s.is_warning_severe,
|
|
||||||
s.is_plsql_debug,
|
|
||||||
s.is_nls_char,
|
|
||||||
s.plsql_ccflags
|
|
||||||
FROM s
|
|
||||||
MINUS
|
|
||||||
SELECT
|
|
||||||
CASE
|
|
||||||
WHEN s.is_interpreted = 'Y'
|
|
||||||
AND s.plsql_optimize_level <= 2
|
|
||||||
AND s.is_scope_identifiers = 'Y'
|
|
||||||
AND s.is_scope_statements = 'Y'
|
|
||||||
THEN NULL
|
|
||||||
ELSE app.get_icon('fa-warning', 'This package is not available for analysis')
|
|
||||||
END AS action_check,
|
|
||||||
--
|
|
||||||
s.object_name,
|
|
||||||
'PACKAGE BODY' AS object_type,
|
|
||||||
--
|
|
||||||
s.is_interpreted,
|
|
||||||
s.plsql_optimize_level,
|
|
||||||
s.is_scope_identifiers,
|
|
||||||
s.is_scope_statements,
|
|
||||||
s.is_warning_informational,
|
|
||||||
s.is_warning_performance,
|
|
||||||
s.is_warning_severe,
|
|
||||||
s.is_plsql_debug,
|
|
||||||
s.is_nls_char,
|
|
||||||
s.plsql_ccflags
|
|
||||||
FROM s
|
|
||||||
WHERE s.object_type = 'PACKAGE';
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_packages_settings IS 'PL/SQL settings related to packages';
|
|
||||||
|
|
||||||
@ -1,59 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_partitions AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
p AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
p.*,
|
|
||||||
--
|
|
||||||
'SELECT p.high_value' || CHR(10) ||
|
|
||||||
'FROM all_tab_partitions p' || CHR(10) ||
|
|
||||||
'WHERE p.table_owner = ''' || x.owner || '''' || CHR(10) ||
|
|
||||||
' AND p.table_name = ''' || p.table_name || '''' || CHR(10) ||
|
|
||||||
' AND p.partition_name = ''' || p.partition_name || '''' AS query_
|
|
||||||
FROM all_tab_partitions p
|
|
||||||
JOIN x
|
|
||||||
ON x.table_name = p.table_name
|
|
||||||
),
|
|
||||||
r AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
p.partition_name,
|
|
||||||
LTRIM(RTRIM(h.high_value, ' )'), '( ') AS high_value
|
|
||||||
FROM p,
|
|
||||||
-- trick to convert LONG to VARCHAR2 on the fly
|
|
||||||
XMLTABLE('/ROWSET/ROW'
|
|
||||||
PASSING (DBMS_XMLGEN.GETXMLTYPE(p.query_))
|
|
||||||
COLUMNS high_value VARCHAR2(4000) PATH 'HIGH_VALUE'
|
|
||||||
) h
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
p.partition_position,
|
|
||||||
p.partition_name,
|
|
||||||
p.partition_name AS partition_name_old,
|
|
||||||
p.high_value,
|
|
||||||
--
|
|
||||||
LTRIM(REGEXP_SUBSTR(r.high_value, '[^,' || ']+', 1, 1)) AS header_1,
|
|
||||||
LTRIM(REGEXP_SUBSTR(r.high_value, '[^,' || ']+', 1, 2)) AS header_2,
|
|
||||||
LTRIM(REGEXP_SUBSTR(r.high_value, '[^,' || ']+', 1, 3)) AS header_3,
|
|
||||||
LTRIM(REGEXP_SUBSTR(r.high_value, '[^,' || ']+', 1, 4)) AS header_4,
|
|
||||||
--
|
|
||||||
TO_NUMBER(EXTRACTVALUE(XMLTYPE(DBMS_XMLGEN.GETXML(
|
|
||||||
'SELECT /*+ PARALLEL(p,4) */ COUNT(*) AS r ' ||
|
|
||||||
'FROM ' || p.table_name || ' PARTITION (' || p.partition_name || ') p'
|
|
||||||
)), '/ROWSET/ROW/R')) AS count_rows,
|
|
||||||
--
|
|
||||||
p.subpartition_count AS subpartitions,
|
|
||||||
--
|
|
||||||
p.read_only,
|
|
||||||
p.read_only AS read_only_old,
|
|
||||||
--
|
|
||||||
app.get_icon('fa-trash-o', 'Truncate partition (delete also data)') AS action_truncate
|
|
||||||
FROM p
|
|
||||||
JOIN r
|
|
||||||
ON r.partition_name = p.partition_name;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_partitions IS '';
|
|
||||||
|
|
||||||
@ -1,56 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_sequences AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
m AS (
|
|
||||||
-- map sequences to tables (based on column name)
|
|
||||||
SELECT
|
|
||||||
c.table_name,
|
|
||||||
MIN(c.column_name) AS column_name,
|
|
||||||
s.sequence_name
|
|
||||||
FROM all_constraints n
|
|
||||||
JOIN x
|
|
||||||
ON n.owner = x.owner
|
|
||||||
JOIN all_cons_columns c
|
|
||||||
ON c.owner = n.owner
|
|
||||||
AND c.constraint_name = n.constraint_name
|
|
||||||
LEFT JOIN all_tab_columns d
|
|
||||||
ON d.owner = c.owner
|
|
||||||
AND d.table_name = c.table_name
|
|
||||||
AND d.column_name = c.column_name
|
|
||||||
AND d.column_id = 1
|
|
||||||
AND d.data_type = 'NUMBER'
|
|
||||||
LEFT JOIN all_sequences s
|
|
||||||
ON s.sequence_owner = c.owner
|
|
||||||
AND (
|
|
||||||
s.sequence_name = c.column_name
|
|
||||||
OR s.sequence_name = 'SEQ_' || c.table_name
|
|
||||||
OR s.sequence_name = c.table_name || '_SEQ'
|
|
||||||
)
|
|
||||||
WHERE n.constraint_type = 'P'
|
|
||||||
GROUP BY c.table_name, c.constraint_name, s.sequence_name
|
|
||||||
HAVING COUNT(c.table_name) = 1
|
|
||||||
AND MAX(c.position) = 1
|
|
||||||
AND MAX(d.data_type) = 'NUMBER'
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
s.sequence_name,
|
|
||||||
s.min_value,
|
|
||||||
s.max_value,
|
|
||||||
s.increment_by,
|
|
||||||
NULLIF(s.cycle_flag, 'N') AS cycle_flag,
|
|
||||||
NULLIF(s.order_flag, 'N') AS order_flag,
|
|
||||||
s.cache_size,
|
|
||||||
s.last_number,
|
|
||||||
m.table_name,
|
|
||||||
m.column_name
|
|
||||||
FROM all_sequences s
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = s.sequence_owner
|
|
||||||
LEFT JOIN m
|
|
||||||
ON m.sequence_name = s.sequence_name;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_sequences IS '';
|
|
||||||
|
|
||||||
@ -1,174 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_tables AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name,
|
|
||||||
app.get_dml_owner() AS dml_owner,
|
|
||||||
--
|
|
||||||
UPPER(app.get_item('$SEARCH_TABLES')) AS search_tables,
|
|
||||||
UPPER(app.get_item('$SEARCH_COLUMNS')) AS search_columns,
|
|
||||||
UPPER(app.get_item('$SEARCH_DATA_TYPE')) AS search_data_type,
|
|
||||||
app.get_number_item('$SEARCH_SIZE') AS search_size
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
c AS (
|
|
||||||
-- search for tables, columns, data types, count columns, pass table comment
|
|
||||||
SELECT
|
|
||||||
c.table_name,
|
|
||||||
MAX(m.comments) AS comments,
|
|
||||||
COUNT(*) AS count_cols,
|
|
||||||
--
|
|
||||||
MAX(CASE WHEN c.column_name LIKE x.search_columns || '%' ESCAPE '\' THEN 'Y' END) AS is_found_column,
|
|
||||||
MAX(CASE WHEN c.data_type LIKE x.search_data_type || '%' ESCAPE '\' THEN 'Y' END) AS is_found_data_type,
|
|
||||||
MAX(CASE WHEN NVL(c.data_precision, c.data_length) = x.search_size THEN 'Y' END) AS is_found_size
|
|
||||||
FROM user_tab_columns c
|
|
||||||
LEFT JOIN user_tab_comments m
|
|
||||||
ON m.table_name = c.table_name
|
|
||||||
CROSS JOIN x
|
|
||||||
WHERE c.table_name = NVL(x.table_name, c.table_name)
|
|
||||||
AND (c.table_name LIKE '%' || x.search_tables || '%' ESCAPE '\' OR x.search_tables IS NULL)
|
|
||||||
GROUP BY c.table_name
|
|
||||||
),
|
|
||||||
n AS (
|
|
||||||
-- constraints overview
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
c.table_name,
|
|
||||||
NULLIF(SUM(CASE WHEN c.constraint_type = 'P' THEN 1 ELSE 0 END), 0) AS count_pk,
|
|
||||||
NULLIF(SUM(CASE WHEN c.constraint_type = 'U' THEN 1 ELSE 0 END), 0) AS count_uq,
|
|
||||||
NULLIF(SUM(CASE WHEN c.constraint_type = 'R' THEN 1 ELSE 0 END), 0) AS count_fk
|
|
||||||
FROM user_constraints c
|
|
||||||
CROSS JOIN x
|
|
||||||
WHERE c.table_name = NVL(x.table_name, c.table_name)
|
|
||||||
AND c.constraint_type IN ('P', 'U', 'R')
|
|
||||||
GROUP BY c.table_name
|
|
||||||
),
|
|
||||||
i AS (
|
|
||||||
-- indexes overview
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
i.table_name,
|
|
||||||
COUNT(i.table_name) AS count_ix
|
|
||||||
FROM user_indexes i
|
|
||||||
CROSS JOIN x
|
|
||||||
LEFT JOIN user_constraints c
|
|
||||||
ON c.constraint_name = i.index_name
|
|
||||||
WHERE i.table_name = NVL(x.table_name, i.table_name)
|
|
||||||
AND i.index_type != 'LOB'
|
|
||||||
AND c.constraint_name IS NULL
|
|
||||||
GROUP BY i.table_name
|
|
||||||
),
|
|
||||||
g AS (
|
|
||||||
-- triggers overview
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
g.table_name,
|
|
||||||
COUNT(g.table_name) AS count_trg
|
|
||||||
FROM user_triggers g
|
|
||||||
CROSS JOIN x
|
|
||||||
WHERE g.table_name = NVL(x.table_name, g.table_name)
|
|
||||||
GROUP BY g.table_name
|
|
||||||
),
|
|
||||||
p AS (
|
|
||||||
-- partitions count
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
p.table_name,
|
|
||||||
COUNT(*) AS partitions
|
|
||||||
FROM user_tab_partitions p
|
|
||||||
CROSS JOIN x
|
|
||||||
WHERE p.table_name = NVL(x.table_name, p.table_name)
|
|
||||||
GROUP BY p.table_name
|
|
||||||
),
|
|
||||||
d AS (
|
|
||||||
-- dml tables
|
|
||||||
SELECT
|
|
||||||
t.table_name,
|
|
||||||
a.table_name AS dml_handler,
|
|
||||||
NULLIF(COUNT(i.line), 0) AS count_references
|
|
||||||
FROM all_tables a
|
|
||||||
JOIN x
|
|
||||||
ON x.dml_owner = a.owner
|
|
||||||
JOIN user_tables t
|
|
||||||
ON a.table_name = app.get_dml_table(t.table_name)
|
|
||||||
LEFT JOIN user_identifiers i
|
|
||||||
ON i.object_type = 'PACKAGE BODY'
|
|
||||||
AND i.name = a.table_name
|
|
||||||
AND i.type = 'TABLE'
|
|
||||||
GROUP BY t.table_name, a.table_name
|
|
||||||
),
|
|
||||||
m AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
m.mview_name
|
|
||||||
FROM user_mviews m
|
|
||||||
)
|
|
||||||
--
|
|
||||||
SELECT
|
|
||||||
t.table_name,
|
|
||||||
c.count_cols,
|
|
||||||
t.num_rows AS count_rows,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN c.comments LIKE '[%]%'
|
|
||||||
THEN REGEXP_SUBSTR(c.comments, '^\[([^]]+)\]', 1, 1, NULL, 1)
|
|
||||||
ELSE REGEXP_SUBSTR(t.table_name, '^[^_]+')
|
|
||||||
END AS table_group,
|
|
||||||
--
|
|
||||||
CASE WHEN n.count_pk IS NOT NULL THEN 'Y' END AS is_pk,
|
|
||||||
CASE WHEN n.count_uq IS NOT NULL THEN 'Y' END AS is_uq,
|
|
||||||
--
|
|
||||||
n.count_fk,
|
|
||||||
i.count_ix,
|
|
||||||
g.count_trg,
|
|
||||||
--
|
|
||||||
p.partitions AS count_partitions,
|
|
||||||
d.count_references AS dml_references,
|
|
||||||
d.dml_handler,
|
|
||||||
--
|
|
||||||
CASE WHEN d.table_name IS NOT NULL THEN 'Y' END AS is_dml_handler,
|
|
||||||
CASE WHEN t.temporary = 'Y' THEN 'Y' END AS is_temp,
|
|
||||||
CASE WHEN t.iot_type = 'IOT' THEN 'Y' END AS is_iot,
|
|
||||||
CASE WHEN t.row_movement = 'ENABLED' THEN 'Y' END AS is_row_mov,
|
|
||||||
CASE WHEN t.read_only = 'YES' THEN 'Y' END AS is_read_only,
|
|
||||||
--
|
|
||||||
o.last_ddl_time,
|
|
||||||
TRUNC(SYSDATE) - TRUNC(t.last_analyzed) AS last_analyzed, -- in days
|
|
||||||
--
|
|
||||||
LTRIM(RTRIM(REGEXP_REPLACE(c.comments, '^\[[^]]+\]\s*', ''))) AS comments,
|
|
||||||
--
|
|
||||||
t.avg_row_len,
|
|
||||||
--
|
|
||||||
ROUND(t.blocks * 8, 2) AS fragmented_kb,
|
|
||||||
ROUND(t.num_rows * t.avg_row_len / 1024, 2) AS actual_kb,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN ROUND(t.blocks * 8, 2) > 0
|
|
||||||
THEN ROUND(t.blocks * 8, 2) - ROUND(t.num_rows * t.avg_row_len / 1024, 2)
|
|
||||||
END AS wasted_kb,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN ROUND(t.blocks * 8, 2) > 0 AND ROUND(t.num_rows * t.avg_row_len / 1024, 2) > 0
|
|
||||||
THEN FLOOR((ROUND(t.blocks * 8, 2) - ROUND(t.num_rows * t.avg_row_len / 1024, 2)) / ROUND(t.blocks * 8, 2) * 100)
|
|
||||||
END AS wasted_perc,
|
|
||||||
--
|
|
||||||
t.cache,
|
|
||||||
t.result_cache,
|
|
||||||
t.buffer_pool
|
|
||||||
FROM user_tables t
|
|
||||||
JOIN user_objects o
|
|
||||||
ON o.object_name = t.table_name
|
|
||||||
AND o.object_type = 'TABLE' -- skip views
|
|
||||||
CROSS JOIN x
|
|
||||||
JOIN c ON c.table_name = t.table_name
|
|
||||||
--
|
|
||||||
LEFT JOIN n ON n.table_name = t.table_name
|
|
||||||
LEFT JOIN i ON i.table_name = t.table_name
|
|
||||||
LEFT JOIN g ON g.table_name = t.table_name
|
|
||||||
LEFT JOIN p ON p.table_name = t.table_name
|
|
||||||
LEFT JOIN d ON d.table_name = t.table_name
|
|
||||||
LEFT JOIN m ON m.mview_name = t.table_name -- skip mviews
|
|
||||||
--
|
|
||||||
WHERE t.table_name = NVL(x.table_name, t.table_name)
|
|
||||||
AND t.table_name != app.get_dml_table(t.table_name)
|
|
||||||
AND m.mview_name IS NULL
|
|
||||||
AND (c.is_found_column = 'Y' OR x.search_columns IS NULL)
|
|
||||||
AND (c.is_found_data_type = 'Y' OR x.search_data_type IS NULL)
|
|
||||||
AND (c.is_found_size = 'Y' OR x.search_size IS NULL);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_tables IS '';
|
|
||||||
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_tables_ref_down AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
t AS (
|
|
||||||
SELECT
|
|
||||||
r.table_name,
|
|
||||||
p.table_name AS referenced_table,
|
|
||||||
p.constraint_name AS primary_key_name,
|
|
||||||
r.constraint_name AS foreign_key_name
|
|
||||||
FROM all_constraints r
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = r.owner
|
|
||||||
JOIN all_constraints p
|
|
||||||
ON r.r_constraint_name = p.constraint_name
|
|
||||||
AND r.constraint_type = 'R'
|
|
||||||
WHERE p.constraint_type = 'P'
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
t.table_name AS table_name_,
|
|
||||||
t.table_name,
|
|
||||||
NULL AS foreign_key_name,
|
|
||||||
NULL AS primary_key_name
|
|
||||||
FROM all_tables t
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = t.owner
|
|
||||||
AND x.table_name = t.table_name
|
|
||||||
UNION ALL
|
|
||||||
--
|
|
||||||
SELECT
|
|
||||||
t.table_name AS table_name_,
|
|
||||||
--
|
|
||||||
'<span style="margin-left: ' || (LEVEL * 2) || 'rem;">' || t.table_name || '</span>' AS table_name,
|
|
||||||
'<span style="margin-left: ' || (LEVEL * 2) || 'rem;">' || t.foreign_key_name || '</span>' AS foreign_key_name,
|
|
||||||
t.primary_key_name
|
|
||||||
FROM t
|
|
||||||
CONNECT BY NOCYCLE t.referenced_table = PRIOR t.table_name
|
|
||||||
START WITH t.referenced_table = (SELECT x.table_name FROM x);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_tables_ref_down IS '';
|
|
||||||
|
|
||||||
@ -1,21 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_tables_ref_objects AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_app_id() AS app_id,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
'<span style="margin-left: 2rem;">' || d.name || '</SPAN>' AS ref_name,
|
|
||||||
LISTAGG(d.type, ', ') WITHIN GROUP (ORDER BY d.type) AS ref_type,
|
|
||||||
--
|
|
||||||
app_actions.get_object_link(REPLACE(MIN(d.type), ' BODY', ''), d.name) AS ref_link
|
|
||||||
FROM all_dependencies d
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = d.referenced_owner
|
|
||||||
AND x.table_name = d.referenced_name
|
|
||||||
GROUP BY d.name;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_tables_ref_objects IS '';
|
|
||||||
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_tables_ref_pages AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_app_id() AS app_id,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
r.page_id,
|
|
||||||
r.page_id || ' - ' || p.page_title || ', ' || r.region_name AS page_name,
|
|
||||||
r.table_name AS supplemental_info,
|
|
||||||
--
|
|
||||||
CASE WHEN r.table_name = x.table_name
|
|
||||||
THEN r.page_id
|
|
||||||
END AS list_badge,
|
|
||||||
--
|
|
||||||
CASE WHEN r.table_name = x.table_name
|
|
||||||
THEN 0
|
|
||||||
ELSE ROW_NUMBER() OVER (ORDER BY r.page_id, r.region_name) END AS sort# ------- order#
|
|
||||||
FROM apex_application_page_regions r
|
|
||||||
JOIN apex_application_pages p
|
|
||||||
ON p.application_id = r.application_id
|
|
||||||
AND p.page_id = r.page_id
|
|
||||||
JOIN x
|
|
||||||
ON x.app_id = r.application_id
|
|
||||||
WHERE r.query_type_code = 'TABLE'
|
|
||||||
AND (
|
|
||||||
r.table_name = x.table_name
|
|
||||||
OR r.table_name IN (
|
|
||||||
SELECT DISTINCT d.name AS view_name
|
|
||||||
FROM all_dependencies d
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = d.referenced_owner
|
|
||||||
AND d.type = 'VIEW'
|
|
||||||
CONNECT BY NOCYCLE d.referenced_name = PRIOR d.name
|
|
||||||
AND d.referenced_type = 'VIEW'
|
|
||||||
START WITH d.referenced_name = x.table_name
|
|
||||||
AND d.referenced_type = 'TABLE'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_tables_ref_pages IS '';
|
|
||||||
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_tables_ref_up AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
t AS (
|
|
||||||
SELECT
|
|
||||||
r.table_name,
|
|
||||||
p.table_name AS referenced_table,
|
|
||||||
p.constraint_name AS primary_key_name,
|
|
||||||
r.constraint_name AS foreign_key_name
|
|
||||||
FROM all_constraints r
|
|
||||||
JOIN all_constraints p
|
|
||||||
ON r.owner = p.owner
|
|
||||||
AND r.r_constraint_name = p.constraint_name
|
|
||||||
AND r.constraint_type = 'R'
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = p.owner
|
|
||||||
WHERE p.constraint_type = 'P'
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
t.table_name AS table_name_,
|
|
||||||
t.table_name,
|
|
||||||
NULL AS foreign_key_name,
|
|
||||||
NULL AS primary_key_name
|
|
||||||
FROM all_tables t
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = t.owner
|
|
||||||
AND x.table_name = t.table_name
|
|
||||||
UNION ALL
|
|
||||||
--
|
|
||||||
SELECT
|
|
||||||
t.referenced_table AS table_name_,
|
|
||||||
--
|
|
||||||
'<span style="margin-left: ' || (LEVEL * 2) || 'rem;">' || t.referenced_table || '</span>' AS table_name,
|
|
||||||
'<span style="margin-left: ' || (LEVEL * 2) || 'rem;">' || t.foreign_key_name || '</span>' AS foreign_key_name,
|
|
||||||
t.primary_key_name
|
|
||||||
FROM t
|
|
||||||
CONNECT BY NOCYCLE PRIOR t.referenced_table = t.table_name
|
|
||||||
START WITH t.table_name = (SELECT x.table_name FROM x);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_tables_ref_up IS '';
|
|
||||||
|
|
||||||
@ -1,89 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_triggers AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_app_id() AS app_id,
|
|
||||||
app.get_item('$TABLE_NAME') AS table_name,
|
|
||||||
app.get_item('$TRIGGER_NAME') AS trigger_name,
|
|
||||||
app.get_date_item('G_TODAY') AS today
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
r AS (
|
|
||||||
SELECT /* materialize */
|
|
||||||
l.action_name AS table_name,
|
|
||||||
COUNT(l.log_id) AS count_calls,
|
|
||||||
SUM(TO_NUMBER(REGEXP_SUBSTR(l.arguments, '"inserted":"?(\d+)', 1, 1, NULL, 1))) AS count_inserted,
|
|
||||||
SUM(TO_NUMBER(REGEXP_SUBSTR(l.arguments, '"updated":"?(\d+)', 1, 1, NULL, 1))) AS count_updated,
|
|
||||||
SUM(TO_NUMBER(REGEXP_SUBSTR(l.arguments, '"deleted":"?(\d+)', 1, 1, NULL, 1))) AS count_deleted
|
|
||||||
FROM x
|
|
||||||
JOIN logs l
|
|
||||||
ON l.created_at >= x.today
|
|
||||||
AND l.created_at < x.today + 1
|
|
||||||
AND l.app_id = x.app_id
|
|
||||||
AND l.flag = 'G'
|
|
||||||
AND l.action_name = NVL(x.table_name, l.action_name)
|
|
||||||
GROUP BY l.action_name
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
t.table_name,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN c.comments LIKE '[%]%'
|
|
||||||
THEN REGEXP_SUBSTR(c.comments, '^\[([^]]+)\]', 1, 1, NULL, 1)
|
|
||||||
ELSE REGEXP_SUBSTR(t.table_name, '^[^_]+')
|
|
||||||
END AS table_group,
|
|
||||||
--
|
|
||||||
g.trigger_name,
|
|
||||||
g.trigger_type,
|
|
||||||
g.base_object_type,
|
|
||||||
--
|
|
||||||
CASE WHEN g.when_clause IS NOT NULL THEN 'Y' END AS is_when,
|
|
||||||
CASE WHEN g.status != 'ENABLED' THEN 'Y' END AS is_disabled,
|
|
||||||
CASE WHEN g.instead_of_row = 'YES' THEN 'Y' END AS is_instead_of,
|
|
||||||
CASE WHEN g.before_statement = 'YES' THEN 'Y' END AS is_before_statement,
|
|
||||||
CASE WHEN g.before_row = 'YES' THEN 'Y' END AS is_before_row,
|
|
||||||
CASE WHEN g.after_row = 'YES' THEN 'Y' END AS is_after_row,
|
|
||||||
CASE WHEN g.after_statement = 'YES' THEN 'Y' END AS is_after_statement,
|
|
||||||
--
|
|
||||||
CASE
|
|
||||||
WHEN g.trigger_name = t.table_name || '__' -- default trigger name
|
|
||||||
AND g.trigger_type = 'COMPOUND'
|
|
||||||
AND g.triggering_event = 'INSERT OR UPDATE OR DELETE'
|
|
||||||
AND g.before_statement = 'YES'
|
|
||||||
AND g.before_row = 'YES'
|
|
||||||
AND g.after_row = 'YES'
|
|
||||||
AND g.after_statement = 'YES'
|
|
||||||
AND g.status = 'ENABLED'
|
|
||||||
THEN 'Y'
|
|
||||||
END AS is_valid,
|
|
||||||
--
|
|
||||||
r.count_calls,
|
|
||||||
r.count_inserted,
|
|
||||||
r.count_updated,
|
|
||||||
r.count_deleted,
|
|
||||||
--
|
|
||||||
o.last_ddl_time
|
|
||||||
FROM all_tables t
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = t.owner
|
|
||||||
LEFT JOIN all_triggers g
|
|
||||||
ON g.owner = x.owner
|
|
||||||
AND g.table_name = t.table_name
|
|
||||||
AND g.trigger_name = NVL(x.trigger_name, g.trigger_name)
|
|
||||||
LEFT JOIN all_objects o
|
|
||||||
ON o.owner = g.owner
|
|
||||||
AND o.object_name = g.trigger_name
|
|
||||||
LEFT JOIN all_mviews v
|
|
||||||
ON v.owner = t.owner
|
|
||||||
AND v.mview_name = t.table_name
|
|
||||||
LEFT JOIN r
|
|
||||||
ON r.table_name = g.table_name
|
|
||||||
LEFT JOIN all_tab_comments c
|
|
||||||
ON c.owner = t.owner
|
|
||||||
AND c.table_name = t.table_name
|
|
||||||
WHERE t.table_name = NVL(x.table_name, t.table_name)
|
|
||||||
AND t.table_name != app.get_dml_table(t.table_name)
|
|
||||||
AND v.mview_name IS NULL;
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_triggers IS '';
|
|
||||||
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_view_columns AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_item('$VIEW_NAME') AS view_name,
|
|
||||||
--
|
|
||||||
UPPER(app.get_item('$SEARCH_VIEWS')) AS search_views,
|
|
||||||
UPPER(app.get_item('$SEARCH_COLUMNS')) AS search_columns
|
|
||||||
--UPPER(app.get_item('$SEARCH_DATA_TYPE')) AS search_data_type,
|
|
||||||
--app.get_number_item('$SEARCH_SIZE') AS search_size
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
c AS (
|
|
||||||
SELECT
|
|
||||||
c.table_name AS view_name,
|
|
||||||
c.column_id,
|
|
||||||
c.column_name,
|
|
||||||
--
|
|
||||||
c.data_type ||
|
|
||||||
CASE
|
|
||||||
WHEN c.data_type LIKE '%CHAR%' OR c.data_type = 'RAW' THEN
|
|
||||||
DECODE(NVL(c.char_length, 0), 0, '',
|
|
||||||
'(' || c.char_length || DECODE(c.char_used, 'C', ' CHAR', '') || ')'
|
|
||||||
)
|
|
||||||
WHEN c.data_type = 'NUMBER' THEN
|
|
||||||
DECODE(NVL(c.data_precision || c.data_scale, 0), 0, '',
|
|
||||||
DECODE(NVL(c.data_scale, 0), 0, '(' || c.data_precision || ')',
|
|
||||||
'(' || c.data_precision || ',' || c.data_scale || ')'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
END AS data_type,
|
|
||||||
--
|
|
||||||
c.nullable,
|
|
||||||
c.data_default,
|
|
||||||
c.avg_col_len,
|
|
||||||
--
|
|
||||||
CASE WHEN c.column_name LIKE x.search_columns || '%' ESCAPE '\' THEN 'Y' END AS is_found_column
|
|
||||||
--CASE WHEN c.data_type LIKE x.search_data_type || '%' ESCAPE '\' THEN 'Y' END AS is_found_data_type,
|
|
||||||
--CASE WHEN NVL(c.data_precision, c.data_length) = x.search_size THEN 'Y' END AS is_found_size
|
|
||||||
FROM all_tab_columns c
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = c.owner
|
|
||||||
JOIN all_views t
|
|
||||||
ON t.owner = c.owner
|
|
||||||
AND t.view_name = c.table_name
|
|
||||||
WHERE t.view_name = NVL(x.view_name, t.view_name)
|
|
||||||
AND t.view_name != app.get_dml_table(t.view_name)
|
|
||||||
AND (c.table_name LIKE '%' || x.search_views || '%' ESCAPE '\' OR x.search_views IS NULL)
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
c.view_name,
|
|
||||||
c.column_id,
|
|
||||||
c.column_name,
|
|
||||||
c.column_name AS column_name_old,
|
|
||||||
c.data_type,
|
|
||||||
c.data_default,
|
|
||||||
c.avg_col_len AS avg_length,
|
|
||||||
--
|
|
||||||
CASE WHEN c.nullable = 'N' THEN 'Y' END AS is_nn,
|
|
||||||
--
|
|
||||||
m.comments
|
|
||||||
FROM c
|
|
||||||
CROSS JOIN x
|
|
||||||
LEFT JOIN all_col_comments m
|
|
||||||
ON m.owner = x.owner
|
|
||||||
AND m.table_name = c.view_name
|
|
||||||
AND m.column_name = c.column_name
|
|
||||||
WHERE 1 = 1
|
|
||||||
AND (c.is_found_column = 'Y' OR x.search_columns IS NULL)
|
|
||||||
--AND (c.is_found_data_type = 'Y' OR x.search_data_type IS NULL)
|
|
||||||
--AND (c.is_found_size = 'Y' OR x.search_size IS NULL);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_view_columns IS '';
|
|
||||||
|
|
||||||
@ -1,145 +0,0 @@
|
|||||||
CREATE OR REPLACE FORCE VIEW obj_views AS
|
|
||||||
WITH x AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
app.get_owner() AS owner,
|
|
||||||
app.get_app_id() AS app_id,
|
|
||||||
app.get_core_app_id() AS core_app_id,
|
|
||||||
app.get_item('$VIEW_NAME') AS view_name,
|
|
||||||
--
|
|
||||||
UPPER(app.get_item('$SEARCH_VIEWS')) AS search_views,
|
|
||||||
UPPER(app.get_item('$SEARCH_COLUMNS')) AS search_columns,
|
|
||||||
LOWER(app.get_item('$SEARCH_SOURCE')) AS search_source
|
|
||||||
FROM DUAL
|
|
||||||
),
|
|
||||||
r AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
d.name AS view_name,
|
|
||||||
--
|
|
||||||
NULLIF(SUM(CASE WHEN d.referenced_type IN ('TABLE', 'VIEW') THEN 1 ELSE 0 END), 0) AS count_references,
|
|
||||||
--
|
|
||||||
LISTAGG(CASE WHEN d.referenced_type = 'TABLE'
|
|
||||||
THEN nav.get_html_a(app_actions.get_object_link(d.referenced_type, d.referenced_name), d.referenced_name) END, ', ')
|
|
||||||
WITHIN GROUP (ORDER BY d.referenced_name)
|
|
||||||
AS referenced_tables,
|
|
||||||
--
|
|
||||||
LISTAGG(CASE WHEN d.referenced_type = 'VIEW'
|
|
||||||
THEN nav.get_html_a(app_actions.get_object_link(d.referenced_type, d.referenced_name), d.referenced_name) END, ', ')
|
|
||||||
WITHIN GROUP (ORDER BY d.referenced_name)
|
|
||||||
AS referenced_views
|
|
||||||
FROM all_dependencies d
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = d.owner
|
|
||||||
WHERE d.type = 'VIEW'
|
|
||||||
AND d.name = NVL(x.view_name, d.name)
|
|
||||||
AND (d.name LIKE '%' || x.search_views || '%' ESCAPE '\' OR x.search_views IS NULL)
|
|
||||||
GROUP BY d.name
|
|
||||||
),
|
|
||||||
u AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
d.referenced_name AS view_name,
|
|
||||||
--
|
|
||||||
LISTAGG(nav.get_html_a(app_actions.get_object_link(d.type, d.name), d.name), ', ')
|
|
||||||
WITHIN GROUP (ORDER BY d.name) AS used_in_objects
|
|
||||||
FROM all_dependencies d
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = d.owner
|
|
||||||
WHERE d.referenced_type = 'VIEW'
|
|
||||||
GROUP BY d.referenced_name
|
|
||||||
),
|
|
||||||
p AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
r.table_name,
|
|
||||||
LISTAGG(DISTINCT nav.get_html_a(app.get_page_url(910, 'P910_PAGE_ID', r.page_id), r.page_id), ', ')
|
|
||||||
WITHIN GROUP (ORDER BY r.page_id) AS used_on_pages
|
|
||||||
FROM apex_application_page_regions r
|
|
||||||
JOIN x
|
|
||||||
ON x.app_id = r.application_id
|
|
||||||
WHERE r.query_type_code = 'TABLE'
|
|
||||||
GROUP BY r.table_name
|
|
||||||
),
|
|
||||||
s AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
s.name AS view_name,
|
|
||||||
COUNT(s.line) AS count_lines,
|
|
||||||
--
|
|
||||||
MAX(CASE WHEN LOWER(s.text) LIKE '%' || x.search_source || '%' ESCAPE '\' THEN 'Y' END) AS is_found_text
|
|
||||||
FROM obj_views_source s
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = s.owner
|
|
||||||
GROUP BY s.name
|
|
||||||
),
|
|
||||||
v AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
v.view_name,
|
|
||||||
v.read_only,
|
|
||||||
v.bequeath,
|
|
||||||
o.last_ddl_time
|
|
||||||
FROM all_views v
|
|
||||||
JOIN all_objects o
|
|
||||||
ON o.owner = v.owner
|
|
||||||
AND o.object_name = v.view_name
|
|
||||||
AND o.object_type = 'VIEW'
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = v.owner
|
|
||||||
WHERE v.view_name = NVL(x.view_name, v.view_name)
|
|
||||||
AND (v.view_name LIKE '%' || x.search_views || '%' ESCAPE '\' OR x.search_views IS NULL)
|
|
||||||
),
|
|
||||||
c AS (
|
|
||||||
SELECT /*+ MATERIALIZE */
|
|
||||||
c.table_name AS view_name,
|
|
||||||
COUNT(c.column_name) AS count_columns,
|
|
||||||
--
|
|
||||||
LOWER(LISTAGG(c.column_name, ', ') WITHIN GROUP (ORDER BY c.column_id)) AS list_columns,
|
|
||||||
--
|
|
||||||
MAX(CASE WHEN c.column_name LIKE x.search_columns || '%' ESCAPE '\' THEN 'Y' END) AS is_found_column
|
|
||||||
FROM all_tab_cols c
|
|
||||||
JOIN x
|
|
||||||
ON x.owner = c.owner
|
|
||||||
WHERE c.table_name = NVL(x.view_name, c.table_name)
|
|
||||||
AND (c.table_name LIKE '%' || x.search_views || '%' ESCAPE '\' OR x.search_views IS NULL)
|
|
||||||
GROUP BY c.table_name
|
|
||||||
)
|
|
||||||
SELECT
|
|
||||||
CASE
|
|
||||||
WHEN c.comments LIKE '[%]%'
|
|
||||||
THEN REGEXP_SUBSTR(c.comments, '^\[([^]]+)\]', 1, 1, NULL, 1)
|
|
||||||
ELSE REGEXP_SUBSTR(REGEXP_REPLACE(v.view_name, '^P\d+$', 'PAGE#'), '^[^_]+')
|
|
||||||
END ||
|
|
||||||
CASE WHEN REGEXP_SUBSTR(REGEXP_REPLACE(v.view_name, '^P\d+$', 'PAGE#'), '^[^_]+') = 'OBJ'
|
|
||||||
AND p.used_on_pages IS NOT NULL
|
|
||||||
THEN ' - ' || app.get_page_title(REGEXP_REPLACE(p.used_on_pages, '<.*?>', ''), x.core_app_id)
|
|
||||||
END AS view_group,
|
|
||||||
--
|
|
||||||
v.view_name,
|
|
||||||
--
|
|
||||||
c.count_columns,
|
|
||||||
c.list_columns,
|
|
||||||
s.count_lines,
|
|
||||||
--
|
|
||||||
u.used_in_objects,
|
|
||||||
p.used_on_pages,
|
|
||||||
r.referenced_tables,
|
|
||||||
r.referenced_views,
|
|
||||||
r.count_references,
|
|
||||||
--
|
|
||||||
NULLIF(v.read_only, 'N') AS is_readonly,
|
|
||||||
CASE WHEN v.bequeath = 'DEFINER' THEN 'Y' END AS is_definer,
|
|
||||||
LTRIM(RTRIM(REGEXP_REPLACE(c.comments, '^\[[^]]+\]\s*', ''))) AS comments,
|
|
||||||
--
|
|
||||||
v.last_ddl_time
|
|
||||||
FROM v
|
|
||||||
CROSS JOIN x
|
|
||||||
JOIN c ON c.view_name = v.view_name
|
|
||||||
LEFT JOIN r ON r.view_name = v.view_name
|
|
||||||
LEFT JOIN u ON u.view_name = v.view_name
|
|
||||||
LEFT JOIN p ON p.table_name = v.view_name
|
|
||||||
LEFT JOIN s ON s.view_name = v.view_name
|
|
||||||
LEFT JOIN all_tab_comments c
|
|
||||||
ON c.owner = x.owner
|
|
||||||
AND c.table_name = v.view_name
|
|
||||||
--
|
|
||||||
WHERE (c.is_found_column = 'Y' OR x.search_columns IS NULL)
|
|
||||||
AND (s.is_found_text = 'Y' OR x.search_source IS NULL);
|
|
||||||
--
|
|
||||||
COMMENT ON TABLE obj_views IS '';
|
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ v AS (
|
|||||||
COUNT(*) AS references
|
COUNT(*) AS references
|
||||||
FROM (
|
FROM (
|
||||||
SELECT REPLACE(RTRIM(REGEXP_SUBSTR(UPPER(s.text), x.package_name || '\.' || REPLACE(x.prefix, '_', '\_') || '[^(]*')), x.package_name || '.', '') AS procedure_name
|
SELECT REPLACE(RTRIM(REGEXP_SUBSTR(UPPER(s.text), x.package_name || '\.' || REPLACE(x.prefix, '_', '\_') || '[^(]*')), x.package_name || '.', '') AS procedure_name
|
||||||
FROM obj_views_source s
|
FROM source_lines s
|
||||||
JOIN x
|
JOIN x
|
||||||
ON x.owner = s.owner
|
ON x.owner = s.owner
|
||||||
WHERE UPPER(s.text) LIKE '%' || x.package_name || '.' || x.prefix || '%'
|
WHERE UPPER(s.text) LIKE '%' || x.package_name || '.' || x.prefix || '%'
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user