Rem drv:
Rem
Rem $Header: mgmt_license_pkgbody.sql 01-jul-2005.21:26:29 gsbhatia Exp $
Rem
Rem mgmt_license_pkgbody.sql
Rem
Rem Copyright (c) 2005, Oracle. All rights reserved.
Rem
Rem NAME
Rem mgmt_license_pkgbody.sql -
Rem
Rem DESCRIPTION
Rem
Rem
Rem NOTES
Rem
Rem
Rem MODIFIED (MM/DD/YY)
Rem gsbhatia 07/01/05 - New repmgr header impl
Rem bram 05/29/05 - Changed Standalone(licensing) query
Rem bram 02/15/05 - Modified the no validation routines
Rem to contain only pack name and target_guid in
Rem license_check api call.
Rem
Rem paachary 02/13/05 - paachary_license_api
Rem paachary 02/10/05 - Created
Rem
CREATE OR REPLACE PACKAGE BODY mgmt_license
AS
-- Procedure : validate_target_type
-- Private Routine
-- Purpose : The input target type is validated and checked if it belongs to a valid licensable target type
-- In case of target type being HOST, ASM etc, then appropriate msg is returned.
-- It only allows parent licensable targt types or iAS member targets.
-- Input Parameters : p_target_type -> input target type
-- Output Parameters : p_txn_msg_array -> This array contains sucess and failure msgs.
-- p_return_status -> Returns a Number: 0 -> Any failure occured during processing.
-- 1 -> If the entire processing is a success.
PROCEDURE validate_target_type
(
p_target_type IN VARCHAR2,
p_txn_msg_array OUT SMP_EMD_STRING_ARRAY,
p_return_status OUT NUMBER
)
IS
l_count NUMBER DEFAULT 0;
l_member_count NUMBER DEFAULT 0;
p_txn_msg_counter NUMBER DEFAULT 0;
BEGIN
p_return_status := 1;
-- this if for parent licensable target type
p_txn_msg_array := SMP_EMD_STRING_ARRAY();
SELECT
count(*)
INTO
l_count
FROM
mgmt_licensable_target_types
WHERE
target_type = p_target_type;
IF (l_count = 0) THEN
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Failure -'||p_target_type||' is a not valid target type';
p_return_status := 0;
RETURN;
END IF;
SELECT
count(*)
INTO
l_count
FROM
mgmt_licensable_target_types
WHERE
pack_target_type = p_target_type;
IF (l_count > 0) THEN
-- this is a valid parent licenable target type
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Success -'||p_target_type||' is a valid licensable target type';
p_return_status := 1;
ELSE
-- this is for iAS member target
SELECT
count(*)
INTO
l_member_count
FROM
mgmt_licensable_target_types
WHERE
target_type=p_target_type AND
pack_target_type = MGMT_GLOBAL.G_IAS_TARGET_TYPE and
target_type not in (MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE, MGMT_GLOBAL.G_HOST_TARGET_TYPE);
IF (l_member_count > 0) THEN
-- this is a valid iAS member target type
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Success -'||p_target_type||' is a valid licensable target type';
p_return_status := 1;
ELSE
-- this is a child target type
-- cannot directly grant / revoke license on packs directly to a child
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Failure -cannot grant / revoke license on packs directly to a child target type '||p_target_type;
p_return_status := 0;
END IF;
END IF;
END validate_target_type;
-- Procedure : validate_pack_list
-- Private Routine
-- Purpose : To populate the pack array list with packs applicable to the input target type.
-- If input target type is not a licensable parent target type, then the input target type
-- is checked if there are any parent target types corresponding to the input target type.
-- In case the input pack list is empty, the routine populates the another array of pack lists
-- with all teh valid packs corresponding to the input target type.
-- In case the input pack list contains some packs, then the input target type
-- is checked if there are any parent target types corresponding to the input target type.
-- Only the valid pack list array is returned back.
-- Input Parameters : p_target_type -> input target type
-- p_pack_list_array -> input pack list (NULL signifies "ALL").
-- Output Parameters : p_valid_pack_list_array -> output pack list containing only valid packs applicable to target type.
-- p_txn_msg_array -> This array contains sucess and failure msgs.
-- p_return_status -> Returns a Number: 0 -> Any failure occured during processing.
-- 1 -> If the entire processing is a success.
PROCEDURE validate_pack_list
(
p_target_type IN VARCHAR2,
p_pack_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_valid_pack_list_array OUT SMP_EMD_STRING_ARRAY,
p_txn_msg_array OUT SMP_EMD_STRING_ARRAY,
p_return_status OUT NUMBER
)
IS
p_valid_pack_counter NUMBER DEFAULT 0;
l_count NUMBER DEFAULT 0;
l_pack_count NUMBER DEFAULT 0;
p_txn_msg_counter NUMBER DEFAULT 0;
BEGIN
p_return_status := 1;
p_txn_msg_array:= SMP_EMD_STRING_ARRAY();
p_valid_pack_list_array := SMP_EMD_STRING_ARRAY();
IF (p_pack_list_array IS NULL OR p_pack_list_array.COUNT= 0) THEN
SELECT
count(*)
INTO
l_count
FROM
mgmt_licensable_target_types
WHERE
pack_target_type= p_target_type;
IF (l_count >0) then
FOR c_pack_list IN
(
SELECT
pack_label
FROM
mgmt_license_definitions
WHERE
target_type = p_target_type
)
LOOP
p_valid_pack_list_array.extend;
p_valid_pack_counter := p_valid_pack_counter + 1;
p_valid_pack_list_array(p_valid_pack_counter) := c_pack_list.pack_label;
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Success -'||p_valid_pack_list_array(p_valid_pack_counter)||' is a valid pack for '||p_target_type;
p_return_status := 1;
END LOOP;
ELSIF (l_count = 0) THEN
FOR c_parent_target_type IN
(
SELECT
pack_target_type
FROM
mgmt_licensable_target_types
WHERE
target_type = p_target_type
)
LOOP
FOR c_pack_list IN
(
SELECT
pack_label
FROM
mgmt_license_definitions
WHERE
target_type = c_parent_target_type.pack_target_type
)
LOOP
p_valid_pack_list_array.extend;
p_valid_pack_counter := p_valid_pack_counter + 1;
p_valid_pack_list_array(p_valid_pack_counter) := c_pack_list.pack_label;
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Success -'||p_valid_pack_list_array(p_valid_pack_counter)||' is a valid pack for '||p_target_type;
END LOOP;
END LOOP;
END IF;
ELSE
FOR p_pack_list_counter in 1..p_pack_list_array.COUNT
LOOP
SELECT
count(*)
INTO
l_count
FROM
mgmt_licensable_target_types
WHERE
pack_target_type= p_target_type;
IF (l_count >0) THEN
SELECT
COUNT(*)
INTO
l_pack_count
FROM
mgmt_license_definitions
where
pack_label = p_pack_list_array(p_pack_list_counter) and
target_type = p_target_type;
IF (l_pack_count = 0) THEN
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Failure - Not a valid combination: '||p_pack_list_array(p_pack_list_counter)||' and '||p_target_type;
p_return_status := 0;
ELSE
p_valid_pack_list_array.extend;
p_valid_pack_counter := p_valid_pack_counter + 1;
p_valid_pack_list_array(p_valid_pack_counter) := p_pack_list_array(p_pack_list_counter);
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Success -'||p_valid_pack_list_array(p_valid_pack_counter)||' is a valid pack for '||p_target_type;
END IF;
ELSIF (l_count = 0) THEN
FOR c_parent_target_type IN
(
SELECT
pack_target_type
FROM
mgmt_licensable_target_types
WHERE
target_type = p_target_type
)
LOOP
SELECT
count(*)
INTO
l_pack_count
FROM
mgmt_license_definitions
WHERE
pack_label = p_pack_list_array(p_pack_list_counter) and
target_type = c_parent_target_type.pack_target_type;
IF (l_pack_count = 0) THEN
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Failure - Not a valid combination: '||p_pack_list_array(p_pack_list_counter)||' and '||p_target_type;
p_return_status := 0;
ELSE
p_valid_pack_list_array.extend;
p_valid_pack_counter := p_valid_pack_counter + 1;
p_valid_pack_list_array(p_valid_pack_counter) := p_pack_list_array(p_pack_list_counter);
p_txn_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_txn_msg_array(p_txn_msg_counter) := 'Success -'||p_valid_pack_list_array(p_valid_pack_counter)||' is a valid pack for '||p_target_type;
END IF;
END LOOP;
END IF;
END LOOP;
END IF;
END validate_pack_list;
-- Procedure : validate_target_list
-- Private Routine
-- Purpose : To populate the target array list with targets belonging to the input target type.
-- This routine is used to populate all the targets applicable to the target type, in case
-- the input target array list is empty.
-- In case the input target array list contains some targets, then the targets are validated
-- and appropriate msg is returned. The routine returns only the valid list of target array.
-- Input Parameters : p_target_type -> input target type
-- p_target_list_array -> input pack list (NULL signifies "ALL").
-- Output Parameters : p_valid_target_list_array -> output target list containing only valid targets applicable to target type.
-- p_txn_msg_array -> This array contains sucess and failure msgs.
-- p_return_status -> Returns a Number: 0 -> Any failure occured during processing.
-- 1 -> If the entire processing is a success.
PROCEDURE validate_target_list
(
p_target_type IN VARCHAR2,
p_target_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_no_validate_flag IN VARCHAR2 DEFAULT NULL,
p_valid_target_list_array OUT SMP_EMD_STRING_ARRAY,
p_txn_msg_array OUT SMP_EMD_STRING_ARRAY,
p_return_status OUT NUMBER
)
IS
p_is_rac BOOLEAN DEFAULT FALSE;
p_valid_target_counter NUMBER DEFAULT 0;
p_txn_msg_counter NUMBER DEFAULT 0;
l_count NUMBER DEFAULT 0;
p_target_guid mgmt_targets.target_guid%type;
BEGIN
p_return_status := 1;
p_valid_target_list_array := SMP_EMD_STRING_ARRAY();
p_txn_msg_array := SMP_EMD_STRING_ARRAY();
IF (p_target_list_array IS NULL OR p_target_list_array.COUNT = 0) THEN
FOR c_target_list IN
(
SELECT
target_name,
target_guid
FROM
mgmt_targets
WHERE
target_type = p_target_type
)
LOOP
p_is_rac := FALSE;
p_valid_target_counter := p_valid_target_counter + 1;
p_txn_msg_counter := p_txn_msg_counter + 1;
IF (p_target_type = MGMT_GLOBAL.G_DATABASE_TARGET_TYPE) THEN
IF (p_no_validate_flag IS NULL) THEN
p_is_rac := em_rac_license.is_racmember
(
p_target_type => p_target_type,
p_target_guid => c_target_list.target_guid
);
END IF;
END IF;
IF (p_is_rac = TRUE) THEN
p_txn_msg_array.extend;
p_txn_msg_array(p_txn_msg_counter) := 'Failure - Cannot directly grant / revoke license to RAC database instance: '||c_target_list.target_name;
p_return_status := 0;
ELSE
p_valid_target_list_array.extend;
p_valid_target_list_array(p_valid_target_counter) := c_target_list.target_name;
p_txn_msg_array.extend;
p_txn_msg_array(p_txn_msg_counter) := 'Success - '||c_target_list.target_name||' is a valid target of '||p_target_type;
END IF;
END LOOP;
ELSE
FOR p_target_list_counter in 1..p_target_list_array.COUNT
LOOP
p_is_rac := FALSE;
p_valid_target_counter := p_valid_target_counter + 1;
p_txn_msg_counter := p_txn_msg_counter + 1;
SELECT
count(*)
INTO
l_count
FROM
mgmt_targets
WHERE
target_name = p_target_list_array(p_target_list_counter) AND
target_type = p_target_type;
IF (l_count = 0) THEN
p_txn_msg_array.extend;
p_txn_msg_array(p_txn_msg_counter) := 'Failure - '||p_target_list_array(p_target_list_counter)||' is not a valid target of '||p_target_type;
p_return_status := 0;
ELSE
p_target_guid := mgmt_target.get_target_guid
(
target_name_in=>p_target_list_array(p_target_list_counter),
target_type_in=>p_target_type
);
IF(p_target_type = MGMT_GLOBAL.G_DATABASE_TARGET_TYPE) THEN
IF (p_no_validate_flag IS NULL) THEN
p_is_rac := em_rac_license.is_racmember
(
p_target_type => p_target_type,
p_target_guid => p_target_guid
);
END IF;
END IF;
IF (p_is_rac = TRUE) THEN
p_txn_msg_array.extend;
p_txn_msg_array(p_txn_msg_counter) := 'Failure - Cannot directly grant / revoke license to RAC database instance for '||p_target_list_array(p_target_list_counter);
p_return_status := 0;
ELSE
p_valid_target_list_array.extend;
p_valid_target_list_array(p_valid_target_counter) := p_target_list_array(p_target_list_counter);
p_txn_msg_array.extend;
p_txn_msg_array(p_txn_msg_counter) := 'Success - '||p_target_list_array(p_target_list_counter)||' is a valid target of '||p_target_type;
END IF;
END IF;
END LOOP;
END IF;
END validate_target_list;
-- Procedure : is_target_standalone
-- Private Routine
-- Purpose : This routine is used to validate whether the iAS member target type is a standalone target type
-- Input Parameters : p_target_guid -> input target guid
-- Output Parameters : TRUE -> If target is a standalone target
-- FALSE -> If target is associated with the iAS in the system.
FUNCTION is_target_standalone
(
p_target_guid IN VARCHAR2
)
RETURN BOOLEAN
IS
l_count NUMBER DEFAULT 0;
BEGIN
SELECT
count(*)
INTO
l_count
FROM
mgmt_targets
WHERE
target_guid
IN
(
SELECT
source_target_guid
FROM
mgmt_target_assocs
WHERE
assoc_target_guid= p_target_guid
) AND
target_type = MGMT_GLOBAL.G_IAS_TARGET_TYPE;
IF (l_count = 0) THEN
RETURN TRUE; -- the target is a standalone target
ELSE
RETURN FALSE;
END IF;
END is_target_standalone;
PROCEDURE grant_license_with_validation
(
p_target_type IN VARCHAR2,
p_pack_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_target_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_transctional_msg_array OUT SMP_EMD_STRING_ARRAY,
p_return_status OUT NUMBER
)
IS
p_valid_target_list_array SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
p_valid_pack_list_array SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
p_txn_msg_array SMP_EMD_STRING_ARRAY;
p_txn_msg_counter NUMBER DEFAULT 0;
p_is_standalone BOOLEAN DEFAULT FALSE;
l_current_license_status VARCHAR2(10);
l_member_count NUMBER DEFAULT 0;
p_target_guid mgmt_targets.target_guid%type;
is_failure NUMBER DEFAULT 1;
BEGIN
p_transctional_msg_array := SMP_EMD_STRING_ARRAY();
is_failure := 1;
validate_target_type
(
p_target_type,
p_txn_msg_array,
p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i in 1..p_txn_msg_array.COUNT
LOOP
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_return_status = 0) THEN
RETURN;
END IF;
validate_target_list
(
p_target_type => p_target_type,
p_target_list_array => p_target_list_array,
p_valid_target_list_array => p_valid_target_list_array,
p_txn_msg_array => p_txn_msg_array,
p_return_status => p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i in 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_valid_target_list_array IS NULL OR p_valid_target_list_array.COUNT = 0) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid Target(s) of target type '||p_target_type;
is_failure := 0;
END IF;
validate_pack_list
(
p_target_type,
p_pack_list_array,
p_valid_pack_list_array,
p_txn_msg_array,
p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i IN 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_valid_pack_list_array IS NULL OR p_valid_pack_list_array.COUNT = 0) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid Pack(s) of target type '||p_target_type;
is_failure := 0;
END IF;
IF ((p_valid_pack_list_array IS NULL OR p_valid_pack_list_array.COUNT = 0) OR
(p_valid_target_list_array IS NULL OR p_valid_target_list_array.COUNT = 0)) THEN
p_return_status := is_failure;
RETURN;
END IF;
-- if p_target_type= ias_member_type (no host, website)
-- check whether he is a standalone target or not
-- If yes, insert records into mgmt_licensed_targets
-- If Not, return an error message
SELECT
count(*)
INTO
l_member_count
FROM
mgmt_licensable_target_types
WHERE
target_type=p_target_type AND
pack_target_type = MGMT_GLOBAL.G_IAS_TARGET_TYPE and
target_type not in (MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE, MGMT_GLOBAL.G_HOST_TARGET_TYPE, MGMT_GLOBAL.G_IAS_TARGET_TYPE);
IF (l_member_count > 0) THEN
FOR p_packs_counter IN 1..p_valid_pack_list_array.COUNT
LOOP
FOR p_targets_counter IN 1..p_valid_target_list_array.COUNT
LOOP
p_target_guid := mgmt_target.get_target_guid
(
target_name_in=>p_valid_target_list_array(p_targets_counter),
target_type_in=>p_target_type
);
p_is_standalone := is_target_standalone
(
p_target_guid
);
IF (p_is_standalone = TRUE) THEN
l_current_license_status:= em_license.is_target_pack_licensed
(
p_target_guid=>p_target_guid,
p_pack_label=>p_valid_pack_list_array(p_packs_counter),
p_from_target_guid => p_target_guid
);
IF (l_current_license_status='FALSE') THEN
INSERT INTO
mgmt_licensed_targets
(
target_guid,
pack_name,
from_target_guid
)
VALUES
(
p_target_guid,
p_valid_pack_list_array(p_packs_counter),
p_target_guid
);
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - Licensing for '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter)||' successfully processed';
ELSE
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - target '||p_valid_target_list_array(p_targets_counter)||' already licensed on '||p_valid_pack_list_array(p_packs_counter);
END IF;
ELSE -- standalone false
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Cannot grant license on '||p_valid_pack_list_array(p_packs_counter)||' to '||p_valid_target_list_array(p_targets_counter)||'. It is not a standalone target';
is_failure := 0;
END IF;
END LOOP;
END LOOP;
ELSE -- other than ias member targets
FOR p_packs_counter IN 1..p_valid_pack_list_array.COUNT
LOOP
FOR p_targets_counter IN 1..p_valid_target_list_array.COUNT
LOOP
BEGIN
em_license.grant_license
(
p_target_type => p_target_type,
p_target_name => p_valid_target_list_array(p_targets_counter),
p_pack_label => p_valid_pack_list_array(p_packs_counter)
);
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - Licensing for '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter)||' successfully processed';
EXCEPTION
WHEN OTHERS THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - processing '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter);
p_transctional_msg_array(p_txn_msg_counter) := p_transctional_msg_array(p_txn_msg_counter)||':'||sqlerrm;
is_failure := 0;
END;
END LOOP;
END LOOP;
END IF;
COMMIT WORK;
p_return_status := is_failure;
END grant_license_with_validation;
PROCEDURE revoke_license_with_validation
(
p_target_type IN VARCHAR2,
p_pack_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_target_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_transctional_msg_array OUT SMP_EMD_STRING_ARRAY,
p_return_status OUT NUMBER
)
IS
p_valid_target_list_array SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
p_valid_pack_list_array SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
p_txn_msg_array SMP_EMD_STRING_ARRAY;
p_txn_msg_counter NUMBER DEFAULT 0;
p_is_standalone BOOLEAN DEFAULT FALSE;
l_current_license_status VARCHAR2(10);
l_member_count NUMBER DEFAULT 0;
p_target_guid mgmt_targets.target_guid%type;
is_failure NUMBER DEFAULT 1;
BEGIN
p_transctional_msg_array := SMP_EMD_STRING_ARRAY();
p_return_status := 1;
validate_target_type
(
p_target_type,
p_txn_msg_array,
p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i in 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_return_status = 0) THEN
RETURN;
END IF;
validate_target_list
(
p_target_type => p_target_type,
p_target_list_array => p_target_list_array,
p_valid_target_list_array => p_valid_target_list_array,
p_txn_msg_array => p_txn_msg_array,
p_return_status => p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i in 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_valid_target_list_array IS NULL OR p_valid_target_list_array.COUNT = 0) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid Target(s) of target type '||p_target_type;
is_failure := 0;
END IF;
validate_pack_list
(
p_target_type,
p_pack_list_array,
p_valid_pack_list_array,
p_txn_msg_array,
p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i IN 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_valid_pack_list_array IS NULL OR p_valid_pack_list_array.COUNT = 0) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid Pack(s) of target type '||p_target_type;
is_failure := 0;
END IF;
IF ((p_valid_pack_list_array IS NULL OR p_valid_pack_list_array.COUNT = 0) OR
(p_valid_target_list_array IS NULL OR p_valid_target_list_array.COUNT = 0)) THEN
p_return_status := is_failure;
RETURN;
END IF;
-- if p_target_type= ias_member_type (no host, website)
-- check whether he is a standalone target or not
-- If yes, insert records into mgmt_licensed_targets
-- If Not, return an error message
SELECT
count(*)
INTO
l_member_count
FROM
mgmt_licensable_target_types
WHERE
target_type=p_target_type AND
pack_target_type = MGMT_GLOBAL.G_IAS_TARGET_TYPE and
target_type not in (MGMT_GLOBAL.G_WEBSITE_TARGET_TYPE, MGMT_GLOBAL.G_HOST_TARGET_TYPE,MGMT_GLOBAL.G_IAS_TARGET_TYPE);
IF (l_member_count > 0) THEN
FOR p_packs_counter IN 1..p_valid_pack_list_array.COUNT
LOOP
FOR p_targets_counter IN 1..p_valid_target_list_array.COUNT
LOOP
p_target_guid := mgmt_target.get_target_guid
(
target_name_in=>p_valid_target_list_array(p_targets_counter),
target_type_in=>p_target_type
);
p_is_standalone := is_target_standalone
(
p_target_guid
);
IF (p_is_standalone = TRUE) THEN
l_current_license_status:= em_license.is_target_pack_licensed
(
p_target_guid=>p_target_guid,
p_pack_label=>p_valid_pack_list_array(p_packs_counter),
p_from_target_guid => p_target_guid
);
IF (l_current_license_status='TRUE') THEN
DELETE
mgmt_licensed_targets
WHERE
from_target_guid = p_target_guid AND
pack_name = p_valid_pack_list_array(p_packs_counter);
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - Licensing for '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter)||' successfully processed';
ELSE
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - target '||p_valid_target_list_array(p_targets_counter)||' not licensed on pack '||p_valid_pack_list_array(p_packs_counter);
END IF;
ELSE -- standalone false
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Cannot revoke license on '||p_valid_pack_list_array(p_packs_counter)||' from '||p_valid_target_list_array(p_targets_counter)||'. It is not a standalone target';
is_failure := 0;
END IF;
END LOOP;
END LOOP;
ELSE -- other than ias member targets
FOR p_packs_counter IN 1..p_valid_pack_list_array.COUNT
LOOP
FOR p_targets_counter IN 1..p_valid_target_list_array.COUNT
LOOP
BEGIN
em_license.revoke_license
(
p_target_type => p_target_type,
p_target_name => p_valid_target_list_array(p_targets_counter),
p_pack_label => p_valid_pack_list_array(p_packs_counter)
);
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - Licensing for '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter)||' successfully processed';
EXCEPTION
WHEN OTHERS THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - processing '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter);
p_transctional_msg_array(p_txn_msg_counter) := p_transctional_msg_array(p_txn_msg_counter)||':'||sqlerrm;
is_failure := 0;
END;
END LOOP;
END LOOP;
END IF;
COMMIT WORK;
p_return_status := is_failure;
END revoke_license_with_validation;
PROCEDURE grant_license_no_validation
(
p_target_type IN VARCHAR2,
p_pack_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_target_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_transctional_msg_array OUT SMP_EMD_STRING_ARRAY,
p_return_status OUT NUMBER
)
IS
p_valid_target_list_array SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
p_valid_pack_list_array SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
p_target_guid mgmt_targets.target_guid%type;
l_count NUMBER DEFAULT 0;
p_txn_msg_counter NUMBER DEFAULT 0;
p_txn_msg_array SMP_EMD_STRING_ARRAY;
l_current_license_status VARCHAR2(10) DEFAULT 'FALSE';
is_failure NUMBER DEFAULT 1;
BEGIN
p_transctional_msg_array := SMP_EMD_STRING_ARRAY();
p_return_status := 1;
SELECT
count(*)
INTO
l_count
FROM
mgmt_licensable_target_types
WHERE
target_type = p_target_type;
IF (l_count =0 ) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid licensable target type '||p_target_type;
p_return_status := 0;
RETURN;
END IF;
validate_pack_list
(
p_target_type,
p_pack_list_array,
p_valid_pack_list_array,
p_txn_msg_array,
p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i IN 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_valid_pack_list_array IS NULL OR p_valid_pack_list_array.COUNT = 0) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid Pack(s) of target type '||p_target_type;
p_return_status := 0;
RETURN;
END IF;
validate_target_list
(
p_target_type => p_target_type,
p_target_list_array => p_target_list_array,
p_no_validate_flag => 'no_validate',
p_valid_target_list_array => p_valid_target_list_array,
p_txn_msg_array => p_txn_msg_array,
p_return_status => p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i IN 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_valid_target_list_array IS NULL OR p_valid_target_list_array.COUNT = 0) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid Target(s) of target type '||p_target_type;
p_return_status := 0;
RETURN;
END IF;
FOR p_packs_counter IN 1..p_valid_pack_list_array.COUNT
LOOP
FOR p_targets_counter IN 1..p_valid_target_list_array.COUNT
LOOP
BEGIN
p_target_guid := mgmt_target.get_target_guid
(
target_name_in=>p_valid_target_list_array(p_targets_counter),
target_type_in=>p_target_type
);
l_current_license_status:= em_license.is_target_pack_licensed
(
p_target_guid=>p_target_guid,
p_pack_label=>p_valid_pack_list_array(p_packs_counter)
);
IF (l_current_license_status='FALSE') THEN
INSERT INTO
mgmt_licensed_targets
(
target_guid,
pack_name,
from_target_guid
)
VALUES
(
p_target_guid,
p_valid_pack_list_array(p_packs_counter),
p_target_guid
);
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - Licensing for '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter)||' successfully processed';
ELSE
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - target '||p_valid_target_list_array(p_targets_counter)||' already licensed on '||p_valid_pack_list_array(p_packs_counter);
END IF;
EXCEPTION
WHEN OTHERS THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - processing '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter);
p_transctional_msg_array(p_txn_msg_counter) := p_transctional_msg_array(p_txn_msg_counter)||':'||sqlerrm;
is_failure := 0;
END;
END LOOP;
END LOOP;
COMMIT WORK;
p_return_status := is_failure;
END grant_license_no_validation;
PROCEDURE revoke_license_no_validation
(
p_target_type IN VARCHAR2,
p_pack_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_target_list_array IN SMP_EMD_STRING_ARRAY DEFAULT NULL,
p_transctional_msg_array OUT SMP_EMD_STRING_ARRAY,
p_return_status OUT NUMBER
)
IS
p_valid_target_list_array SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
p_valid_pack_list_array SMP_EMD_STRING_ARRAY := SMP_EMD_STRING_ARRAY();
p_target_guid mgmt_targets.target_guid%type;
l_count NUMBER DEFAULT 0;
p_txn_msg_counter NUMBER DEFAULT 0;
p_txn_msg_array SMP_EMD_STRING_ARRAY;
l_current_license_status VARCHAR2(10) DEFAULT 'FALSE';
is_failure NUMBER DEFAULT 1;
BEGIN
p_transctional_msg_array := SMP_EMD_STRING_ARRAY();
p_return_status := 1;
SELECT
count(*)
INTO
l_count
FROM
mgmt_licensable_target_types
WHERE
target_type = p_target_type;
IF (l_count =0 ) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid licensable target type '||p_target_type;
p_return_status := 0;
RETURN;
END IF;
validate_pack_list
(
p_target_type,
p_pack_list_array,
p_valid_pack_list_array,
p_txn_msg_array,
p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i IN 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_valid_pack_list_array IS NULL OR p_valid_pack_list_array.COUNT = 0) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid Pack(s) of target type '||p_target_type;
p_return_status := 0;
RETURN;
END IF;
validate_target_list
(
p_target_type => p_target_type,
p_target_list_array => p_target_list_array,
p_no_validate_flag => 'no_validate',
p_valid_target_list_array => p_valid_target_list_array,
p_txn_msg_array => p_txn_msg_array,
p_return_status => p_return_status
);
IF (p_return_status = 0) THEN
is_failure := 0;
END IF;
p_txn_msg_counter := p_txn_msg_counter + p_txn_msg_array.COUNT;
p_transctional_msg_array.extend(p_txn_msg_array.COUNT);
FOR i IN 1..p_txn_msg_array.COUNT
LOOP
p_txn_msg_counter := p_txn_msg_counter +1;
p_transctional_msg_array.extend;
p_transctional_msg_array(p_txn_msg_counter) := p_txn_msg_array(i);
END LOOP;
IF (p_valid_target_list_array IS NULL OR p_valid_target_list_array.COUNT = 0) THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - Invalid target(s) of target type '||p_target_type;
p_return_status := 0;
RETURN;
END IF;
FOR p_packs_counter IN 1..p_valid_pack_list_array.COUNT
LOOP
FOR p_targets_counter IN 1..p_valid_target_list_array.COUNT
LOOP
BEGIN
p_target_guid := mgmt_target.get_target_guid
(
target_name_in=>p_valid_target_list_array(p_targets_counter),
target_type_in=>p_target_type
);
l_current_license_status:= em_license.is_target_pack_licensed
(
p_target_guid=>p_target_guid,
p_pack_label=>p_valid_pack_list_array(p_packs_counter)
);
IF (l_current_license_status='TRUE') THEN
DELETE
mgmt_licensed_targets
WHERE
target_guid = p_target_guid AND
pack_name = p_valid_pack_list_array(p_packs_counter);
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - Licensing for '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter)||' successfully processed';
ELSE
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Success - target '||p_valid_target_list_array(p_targets_counter)||' not licensed on pack '||p_valid_pack_list_array(p_packs_counter);
END IF;
EXCEPTION
WHEN OTHERS THEN
p_transctional_msg_array.extend;
p_txn_msg_counter := p_txn_msg_counter + 1;
p_transctional_msg_array(p_txn_msg_counter) := 'Failure - processing '||p_valid_target_list_array(p_targets_counter)||' and '||p_valid_pack_list_array(p_packs_counter);
p_transctional_msg_array(p_txn_msg_counter) := p_transctional_msg_array(p_txn_msg_counter)||':'||sqlerrm;
is_failure := 0;
END;
END LOOP;
END LOOP;
COMMIT WORK;
p_return_status := is_failure;
END revoke_license_no_validation;
END mgmt_license;
/
SHOW ERRORS;