Rem drv:
Rem
Rem $Header:
Rem
Rem credentials_ui_pkgbody.sql
Rem
Rem Copyright (c) 2004, 2007, Oracle. All rights reserved.
Rem
Rem NAME
Rem credentials_ui_pkgbody.sql -
Rem
Rem DESCRIPTION
Rem Preferred Credentials PL/SQL routines
Rem
Rem NOTES
Rem
Rem
Rem MODIFIED (MM/DD/YY)
Rem nqureshi 07/04/07 - support for delete pdp setting cli
Rem nqureshi 05/23/07 - backporting procedures
Rem nqureshi 04/21/07 - pdp backport
Rem gsbhatia 07/01/05 - New repmgr header impl
Rem jpyang 05/18/05 - get_creds_summary should use current user not
Rem SYSMAN
Rem kmanicka 03/04/05 - move to EMDW_LOG from dbms_output
Rem sjconnol 07/27/04 - sjconnol_bug-3785403
Rem sjconnol 07/27/03 - Creation
Rem
CREATE OR REPLACE PACKAGE BODY MGMT_CREDENTIALS_UI AS
--
-- Name: get_creds_summary
--
-- Package: MGMT_CREDENTIALS_UI
--
-- Purpose:
-- Get pref creds summary info for pref creds home page
--
PROCEDURE get_creds_summary (targettype OUT MGMT_CREDS_LOUTPUT, numtargets OUT MGMT_CREDS_SOUTPUT, defset OUT MGMT_CREDS_SOUTPUT, numset OUT MGMT_CREDS_SOUTPUT) IS
hascreds NUMBER;
i BINARY_INTEGER;
BEGIN
targettype := MGMT_CREDS_LOUTPUT();
numtargets := MGMT_CREDS_SOUTPUT();
defset := MGMT_CREDS_SOUTPUT();
numset := MGMT_CREDS_SOUTPUT();
i := 0;
FOR res IN (SELECT unique(target_type) from mgmt_targets)
LOOP
SELECT count(DISTINCT set_name) INTO hascreds FROM MGMT_CREDENTIAL_SETS WHERE target_type=res.target_type AND set_usage != 'MONITORING' AND set_context_type != 'CONTAINER';
IF (hascreds > 0) THEN
IF EMDW_LOG.p_is_debug_set THEN
EMDW_LOG.debug(res.target_type,EM_CREDENTIAL.MODULE_NAME);
END IF;
i := i + 1;
targettype.EXTEND(1);
numtargets.EXTEND(1);
defset.EXTEND(1);
numset.EXTEND(1);
targettype(i) := res.target_type;
select count(target_name) INTO numtargets(i) from mgmt_targets where target_type = res.target_type;
select count(credential_set_name) INTO defset(i) from mgmt_enterprise_credentials where target_type = res.target_type and user_name = mgmt_user.get_current_em_user();
select count(unique(mt.target_guid)) INTO numset(i) from mgmt_target_credentials mt, mgmt_targets t where mt.target_guid = t.target_guid and t.target_type = res.target_type and mt.user_name = mgmt_user.get_current_em_user();
END IF;
END LOOP;
END get_creds_summary;
-- deletes the PDP settings
PROCEDURE delete_pdp_settings(p_setting_guid_in IN MGMT_USER_GUID_ARRAY)
IS
l_op_guids MGMT_USER_GUID_ARRAY;
BEGIN
SELECT operation_guid BULK COLLECT INTO l_op_guids
FROM MGMT_UPDATE_PDP_DATA_MAP
WHERE setting_guid IN
( SELECT * FROM TABLE(CAST(p_setting_guid_in AS MGMT_USER_GUID_ARRAY)));
FORALL i in 1..p_setting_guid_in.LAST
DELETE FROM MGMT_PDP_SETTINGS
WHERE setting_guid = p_setting_guid_in(i);
FORALL i in 1..p_setting_guid_in.LAST
DELETE FROM MGMT_PDP_SETTING_VALUES
WHERE setting_guid =p_setting_guid_in(i);
IF l_op_guids IS NULL OR l_op_guids.COUNT = 0 THEN
RETURN;
END IF;
FORALL i in 1..l_op_guids.LAST
DELETE FROM MGMT_UPDATE_PDP_DATA_COPY
WHERE operation_guid = l_op_guids(i);
FORALL i in 1..l_op_guids.LAST
DELETE FROM MGMT_UPDATE_PDP_DATA_MAP
WHERE operation_guid = l_op_guids(i);
FOR i in 1..l_op_guids.COUNT
LOOP
BEGIN
MGMT_TARGET_UPDATE.delete_operation_data(l_op_guids(i));
EXCEPTION
-- user may have deleteed the execution from other sources so cat the exception and ignore
WHEN OTHERS THEN
NULL;
END;
END LOOP;
END delete_pdp_settings;
-- create the PDP settings
PROCEDURE create_pdp_settings(p_setting_name_in IN VARCHAR ,
p_setting_type_in IN VARCHAR ,
p_setting_values_in IN MGMT_PDP_ACTUAL_SETTING_ARRAY,
p_setting_status_in IN NUMBER,
p_error_code_out OUT VARCHAR)
IS
l_count NUMBER;
l_setting_guid MGMT_PDP_SETTINGS.SETTING_GUID%TYPE;
BEGIN
SELECT COUNT(1) INTO l_count
FROM MGMT_PDP_SETTINGS
WHERE SETTING_NAME= p_setting_name_in
AND CREATED_BY = MGMT_USER.get_current_em_user ;
IF l_count != 0 THEN
p_error_code_out := 'SETTING_ALREADY_EXIST';
return;
END IF;
l_setting_guid := sys_guid();
INSERT INTO MGMT_PDP_SETTINGS (SETTING_GUID,SETTING_NAME,PDP_TYPE,CREATED_BY,LAST_MODIFIED,IS_ENABLED)
values(l_setting_guid,p_setting_name_in,p_setting_type_in,
MGMT_USER.get_current_em_user,sysdate(),p_setting_status_in );
IF p_setting_status_in = 1 THEN
FOR i IN 1..p_setting_values_in.COUNT
LOOP
INSERT INTO MGMT_PDP_SETTING_VALUES( setting_guid,value_name,value )
VALUES (l_setting_guid,
p_setting_values_in(i).pdp_value_name,
p_setting_values_in(i).pdp_value);
END LOOP;
UPDATE MGMT_PDP_SETTINGS SET last_modified=sysdate
WHERE setting_guid=l_setting_guid;
END IF;
END;
PROCEDURE get_flattened_aggr_targets
( p_target_list IN OUT MGMT_JOB_TARGET_list )
IS
BEGIN
MGMT_JOB_UI.get_flattened_aggr_targets(p_target_list,MGMT_GLOBAL.G_HOST_TARGET_TYPE);
END;
--
-- PROCEDURE apply_pdp
--
-- PURPOSE:
-- procedure to apply a pdp to a specified destination list.
--
-- Convenience procedure to apply a pdp to a specified destination list.
--
-- p_pdp_guid The source template name
-- p_target_type The target type
-- p_destination_list The set of destination targets
-- p_copy_common_only_flags An array that is as large as the number of
-- destination targets. For each target, it specifies whether to copy the common
-- thresholds only (1) or all the thresholds (0) from the source.
-- p_update_master_agents This is a flag that indicates how to deal with multi-agent
-- targets in the destination list. If set to true (1), the master agent as well as all the
-- standby agents monitoring the multi-agent target are updated. If set to false (0),
-- only the standby agents are updated, but not the master.
-- p_schedule An optional schedule
--
PROCEDURE apply_pdp(
p_setting_guid_in IN RAW,
p_setting_values_in IN MGMT_PDP_ACTUAL_SETTING_ARRAY,
p_setting_status_in IN NUMBER,
p_pdp_type_in IN VARCHAR2,
p_destination_list IN MGMT_JOB_TARGET_LIST,
p_update_master_agents IN NUMBER DEFAULT 1
)
IS
l_data_set_guid RAW(16);
l_operation_guid RAW(16);
l_data_guids MGMT_USER_GUID_ARRAY;
l_destination_list MGMT_JOB_TARGET_LIST := p_destination_list;
BEGIN
IF ( (p_destination_list IS NULL) OR (p_destination_list.COUNT <= 0) ) THEN
raise_application_error(MGMT_GLOBAL.INVALID_PARAMS_ERR,
'Destination target list to apply_pdp is empty.');
ELSE
get_flattened_aggr_targets( l_destination_list);
l_data_guids := MGMT_USER_GUID_ARRAY();
-- Create template_copy and get its associated data_set_guid
l_data_set_guid := MGMT_TARGET_UPDATE.submit_pdp_data(
p_setting_guid_in,
NULL, -- target_name
MGMT_GLOBAL.G_HOST_TARGET_TYPE, --target_type
p_setting_status_in,
p_pdp_type_in,
p_setting_values_in);
l_data_guids := MGMT_USER_GUID_ARRAY();
l_data_guids.extend(1);
l_data_guids(1) := l_data_set_guid;
l_operation_guid := MGMT_TARGET_UPDATE.submit_update_operation(l_data_guids,
l_destination_list,
p_update_master_agents,
NULL);
INSERT INTO MGMT_UPDATE_PDP_DATA_MAP
(operation_guid,setting_guid,applied_by)
VALUES (l_operation_guid,p_setting_guid_in,mgmt_user.get_current_em_user());
-- now insert into the copy table to get the details later
INSERT INTO MGMT_UPDATE_PDP_DATA_COPY
(operation_guid, setting_name, SETTING_VALUE)
VALUES (l_operation_guid, 'SETTING_STATUS',
p_setting_status_in );
INSERT INTO MGMT_UPDATE_PDP_DATA_COPY
(operation_guid, setting_name, SETTING_VALUE)
VALUES (l_operation_guid, 'SETTING_TYPE',
p_pdp_type_in );
FOR j in 1..p_setting_values_in.count LOOP
INSERT INTO MGMT_UPDATE_PDP_DATA_COPY
(operation_guid, setting_name, SETTING_VALUE)
VALUES (l_operation_guid, p_setting_values_in(j).PDP_VALUE_NAME,
p_setting_values_in(j).PDP_VALUE );
END LOOP;
END IF;
END apply_pdp;
PROCEDURE REMOVE_PDP_SETTING(p_target_name_in IN VARCHAR2,p_target_type_in IN VARCHAR2 )
IS
l_target_guid mgmt_targets.target_guid%TYPE;
BEGIN
l_target_guid := mgmt_target.get_target_guid(p_target_name_in,p_target_type_in);
DELETE FROM MGMT_PDP_HOST_SETTING
WHERE TARGET_GUID=l_target_guid;
END REMOVE_PDP_SETTING;
PROCEDURE INSERT_PDP_SETTING( p_target_name_in IN VARCHAR2,
p_target_type_in IN VARCHAR2 ,
p_setting_type_in IN VARCHAR2 ,
p_setting_values_in IN SMP_EMD_NVPAIR_ARRAY )
IS
l_target_guid mgmt_targets.target_guid%TYPE;
BEGIN
l_target_guid := mgmt_target.get_target_guid(p_target_name_in,p_target_type_in);
REMOVE_PDP_SETTING(p_target_name_in,p_target_type_in);
FOR i IN 1..p_setting_values_in.COUNT
LOOP
INSERT INTO MGMT_PDP_HOST_SETTING(TARGET_GUID, PDP_TYPE
,PDP_SETTING_NAME,PDP_SETTING_VALUE )
VALUES (l_target_guid,p_setting_type_in,
p_setting_values_in(i).NAME,
p_setting_values_in(i).VALUE) ;
END LOOP;
END INSERT_PDP_SETTING;
-- return pdpd settings information for viewPdpSetings page
PROCEDURE GET_PDP_SETTINGS( p_setting_guid_in IN RAW,
p_settings_cur OUT CURSOR_TYPE )
IS
BEGIN
IF p_setting_guid_in IS NOT NULL THEN
OPEN p_settings_cur FOR
SELECT s.setting_guid, s.setting_name , v.value_name, v.value, s.pdp_type,s.created_by,
s.last_modified , s.is_enabled , nvl(ap.apply_pending_count,0) as apply_pending_count
FROM MGMT_PDP_SETTINGS s, MGMT_PDP_SETTING_VALUES v,
(SELECT pm.setting_guid, count(od.DESTINATION_TARGET_GUID) as apply_pending_count
FROM MGMT_UPDATE_OPERATIONS_DETAILS od,
MGMT_UPDATE_PDP_DATA_MAP pm
WHERE pm.operation_guid = od.operation_guid
AND od.execution_status IN(MGMT_JOB_ENGINE.SCHEDULED_STATUS,MGMT_JOB_ENGINE.EXECUTING_STATUS )
GROUP BY pm.setting_guid) ap
WHERE s.setting_guid = ap.setting_guid(+)
AND s.setting_guid = v.setting_guid(+)
AND s.setting_guid = p_setting_guid_in;
ELSE
OPEN p_settings_cur FOR
SELECT s.setting_guid, s.setting_name , v.value_name, v.value, s.pdp_type,s.created_by,
s.last_modified , s.is_enabled , nvl(ap.apply_pending_count,0) as apply_pending_count
FROM MGMT_PDP_SETTINGS s, MGMT_PDP_SETTING_VALUES v,
(SELECT pm.setting_guid, count(od.DESTINATION_TARGET_GUID) as apply_pending_count
FROM MGMT_UPDATE_OPERATIONS_DETAILS od,
MGMT_UPDATE_PDP_DATA_MAP pm
WHERE pm.operation_guid = od.operation_guid
AND od.execution_status IN(MGMT_JOB_ENGINE.SCHEDULED_STATUS,MGMT_JOB_ENGINE.EXECUTING_STATUS )
GROUP BY pm.setting_guid) ap
WHERE s.setting_guid = ap.setting_guid(+)
AND s.setting_guid = v.setting_guid(+);
END IF;
END GET_PDP_SETTINGS;
PROCEDURE VLDTE_PDP_STNG_NMES_AND_SUBMIT( p_setting_names_in IN MGMT_SHORT_STRING_ARRAY,
p_invalid_settings_cur OUT CURSOR_TYPE,
p_has_error_out OUT NUMBER)
IS
l_invalid_setting_cnt INTEGER :=0;
l_invalid_settings MGMT_SHORT_STRING_ARRAY;
l_user_guids MGMT_USER_GUID_ARRAY;
BEGIN
IF p_setting_names_in IS NOT NULL THEN
SELECT column_value
BULK COLLECT INTO l_invalid_settings
FROM TABLE(CAST(p_setting_names_in AS MGMT_SHORT_STRING_ARRAY)) s
WHERE NOT EXISTS (SELECT 1 FROM MGMT_PDP_SETTINGS
WHERE setting_name = s.column_value
AND CREATED_BY = mgmt_user.get_current_em_user());
IF l_invalid_settings.COUNT = 0 THEN
SELECT SETTING_GUID
BULK COLLECT INTO l_user_guids
FROM MGMT_PDP_SETTINGS s
WHERE EXISTS (SELECT 1
FROM TABLE(CAST(p_setting_names_in AS MGMT_SHORT_STRING_ARRAY))
WHERE column_value = s.setting_name)
AND s.CREATED_BY = mgmt_user.get_current_em_user();
delete_pdp_settings(l_user_guids);
ELSE
p_has_error_out :=1;
OPEN p_invalid_settings_cur FOR
SELECT * FROM TABLE(l_invalid_settings);
END IF;
END IF;
END VLDTE_PDP_STNG_NMES_AND_SUBMIT;
END MGMT_CREDENTIALS_UI;
/
SHOW ERRORS;