Rem drv:
Rem
Rem $Header: license_report_pkgbody.sql 01-jul-2005.21:26:31 gsbhatia Exp $
Rem
Rem license_report_pkgbody.sql
Rem
Rem Copyright (c) 2005, Oracle. All rights reserved.
Rem
Rem NAME
Rem license_report_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 vkgarg 03/17/05 - vkgarg_bug-3996615
Rem vkgarg 03/14/05 - update to get pack labels
Rem vkgarg 03/10/05 - Created
Rem
SET ECHO ON
SET FEEDBACK 1
SET NUMWIDTH 10
SET LINESIZE 80
SET TRIMSPOOL ON
SET TAB OFF
SET PAGESIZE 100
CREATE OR REPLACE PACKAGE BODY em_licensing_report
AS
PROCEDURE consolidated_report
(
p_include_targets IN NUMBER default 0,
p_agree_access IN NUMBER DEFAULT 0,
p_target_array OUT em_license_report_array
)
IS
--p_target_array em_license_report_array;
l_include_targets NUMBER :=LTRIM(RTRIM(p_include_targets));
l_agree_access NUMBER :=LTRIM(RTRIM(p_agree_access));
l_target_counter NUMBER;
l_pack_counter NUMBER;
l_count NUMBER;
l_select_statement VARCHAR2(2000);
TYPE RefCurType IS REF CURSOR; -- define weak REF CURSOR type
l_RefCur RefCurType; -- declare cursor variable
l_target_guid mgmt_targets.target_guid%TYPE;
l_target_guid_array mgmt_target_guid_array;
l_target_type_array varchar2_table := varchar2_table();
l_target_name_array varchar2_table := varchar2_table();
l_host_name_array varchar2_table := varchar2_table();
BEGIN
IF (l_include_targets NOT IN (0,1,2)) THEN
l_include_targets:=0;
END IF;
IF (l_agree_access NOT IN (0,1,2)) THEN
l_agree_access:=0;
END IF;
IF (l_include_targets=0) AND (l_agree_access=0) THEN -- Parents with Agree Access not Confirmed
l_select_statement:= 'SELECT target_guid, target_name, target_type, host_name '||
'FROM mgmt_targets '||
'WHERE target_type IN '||
'('||
'SELECT DISTINCT(pack_target_type) '||
'FROM mgmt_licensable_target_types '||
') AND '||
'target_guid NOT IN '||
'('||
'SELECT target_guid '||
'FROM mgmt_license_confirmation'||
')';
ELSIF (l_include_targets=0) AND (l_agree_access=1) THEN -- Parents with Agree Access Confirmed
l_select_statement:= 'SELECT target_guid, target_name, target_type, host_name '||
'FROM mgmt_targets '||
'WHERE target_type IN '||
'('||
'SELECT DISTINCT(pack_target_type) '||
'FROM mgmt_licensable_target_types '||
') AND '||
'target_guid IN '||
'('||
'SELECT target_guid '||
'FROM mgmt_license_confirmation'||
')';
ELSIF (l_include_targets=0) AND (l_agree_access=2) THEN -- All parents irrespective of Agree Access status
l_select_statement:= 'SELECT target_guid, target_name, target_type, host_name '||
'FROM mgmt_targets '||
'WHERE target_type IN '||
'('||
'SELECT DISTINCT(pack_target_type) '||
'FROM mgmt_licensable_target_types '||
')';
ELSIF (l_include_targets=1) AND (l_agree_access=0) THEN -- All targets with Agree Access Not Confirmed
l_select_statement:= 'SELECT target_guid, target_name, target_type, host_name '||
'FROM mgmt_targets '||
'WHERE target_type IN '||
'('||
'SELECT DISTINCT(target_type) '||
'FROM mgmt_licensable_target_types '||
') AND '||
'target_guid NOT IN '||
'('||
'SELECT target_guid '||
'FROM mgmt_license_confirmation'||
')';
ELSIF (l_include_targets=1) AND (l_agree_access=1) THEN -- All targets with Agree Access Confirmed
l_select_statement:= 'SELECT target_guid, target_name, target_type, host_name '||
'FROM mgmt_targets '||
'WHERE target_type IN '||
'('||
'SELECT DISTINCT(target_type) '||
'FROM mgmt_licensable_target_types '||
') AND '||
'target_guid IN '||
'('||
'SELECT target_guid '||
'FROM mgmt_license_confirmation'||
')';
ELSIF (l_include_targets=1) AND (l_agree_access=2) THEN -- All targets irrespective of Agree Access Confirmed
l_select_statement:= 'SELECT target_guid, target_name, target_type, host_name '||
'FROM mgmt_targets '||
'WHERE target_type IN '||
'('||
'SELECT DISTINCT(target_type) '||
'FROM mgmt_licensable_target_types '||
')';
END IF;
OPEN l_RefCur FOR l_select_statement;
FETCH l_RefCur
BULK COLLECT INTO
l_target_guid_array, l_target_name_array, l_target_type_array, l_host_name_array;
CLOSE l_RefCur;
p_target_array:= em_license_report_array();
l_target_counter:=0;
IF (l_target_guid_array IS NOT NULL) AND (l_target_guid_array.count>0) THEN
FOR i IN 1..l_target_guid_array.count
LOOP
l_target_guid:=l_target_guid_array(i);
l_target_counter:=l_target_counter+1;
p_target_array.extend(1);
p_target_array(l_target_counter):=em_license_report_obj(NULL, NULL, NULL, NULL, NULL);
p_target_array(l_target_counter).target_type:=l_target_type_array(i);
p_target_array(l_target_counter).target_name:=l_target_name_array(i);
p_target_array(l_target_counter).host_name:=l_host_name_array(i);
p_target_array(l_target_counter).pack_license_info:=mgmt_pack_license_array();
l_pack_counter:=0;
FOR c2 IN
(
SELECT
DISTINCT pack_label,
pack_display_label
FROM
mgmt_license_definitions
ORDER BY pack_label
)
LOOP
l_pack_counter:=l_pack_counter+1;
p_target_array(l_target_counter).pack_license_info.extend(1);
p_target_array(l_target_counter).pack_license_info(l_pack_counter):=mgmt_pack_license_obj(NULL, NULL);
p_target_array(l_target_counter).pack_license_info(l_pack_counter).pack_name:=c2.pack_label;
-- First Check whether the current pack is applicable to the current target or not
SELECT count(*)
INTO l_count
FROM
mgmt_license_definitions
WHERE
target_type IN
(
SELECT distinct(pack_target_type)
FROM mgmt_licensable_target_types
WHERE target_type=p_target_array(l_target_counter).target_type
)AND
pack_label=c2.pack_label;
IF (l_count=0) THEN-- the pack/target commbi is NA
p_target_array(l_target_counter).pack_license_info(l_pack_counter).is_licensed:=2;
ELSE
-- The pack is applicable to this target. Check whether it is licensed
SELECT COUNT(*)
INTO l_count
FROM mgmt_licensed_targets
WHERE
target_guid=l_target_guid AND
pack_name=c2.pack_label;
IF (l_count>0) THEN -- Licensed
p_target_array(l_target_counter).pack_license_info(l_pack_counter).is_licensed:=1;
ELSE
p_target_array(l_target_counter).pack_license_info(l_pack_counter).is_licensed:=0;
END IF;
END IF;
END LOOP; -- END C2
IF (l_agree_access=0) THEN
p_target_array(l_target_counter).agree_access:=0;
ELSIF (l_agree_access=1) THEN
p_target_array(l_target_counter).agree_access:=1;
ELSE -- AGREE_ACCESS=2 include all
SELECT count(*)
INTO l_count
FROM mgmt_license_confirmation
WHERE target_guid=l_target_guid;
IF (l_count=0) THEN
p_target_array(l_target_counter).agree_access:=0;
ELSE
p_target_array(l_target_counter).agree_access:=1;
END IF;
END IF;
END LOOP;
END IF;
END consolidated_report;
END em_licensing_report;
/