-- Create sql in-place upgrade patch for some Siebel miv option
-- inside miv_siebel.xml. The sql will be shown (as much as
-- possible) in-line with associated segment of miv_siebel.xml.
-- The xml will be set off from the sql by commenting each
-- line with "--miv_siebel.xml->".
--
-- Bug #'s/Siebel miv property updated
-- 9048066: business domain filter was not supported when importing siebel data
--
SET SERVEROUTPUT ON
SET LINESIZE 500
-- ##########################################################################
DECLARE -- Outer block for utility functions/variables BUGBUG: Should these be packagized (uprop_util)
-- ##########################################################################
SCRIPTID CONSTANT VARCHAR2(40) := 'bug 9048066'; -- For output logging
EOL CONSTANT VARCHAR2(01) := CHR(10); -- new line
TRACEON CONSTANT BOOLEAN := TRUE; -- Provide function level trace output
OUTINITED BOOLEAN := FALSE; -- Flag indicating output has been enabled
-- Record definitions for the various views
-- Handy sql to make record definitions (some hand editing required (in sqlworksheet anyway)
-- ==========================================================================
TYPE CMPWBMIVView IS RECORD (
-- ==========================================================================
WORKSPACEID CMPWBMIVView_r.WORKSPACEID%TYPE DEFAULT 1 -- NUMBER(9,0) 1
,DELETIONPARENT CMPWBMIVView_r.DELETIONPARENT%TYPE DEFAULT null -- NUMBER(9,0) 2
,AGGREGATEDSIGNATURE CMPWBMIVView_r.AGGREGATEDSIGNATURE%TYPE DEFAULT null --sysdate -- TIMESTAMP(6) 3
,CLASSNAME CMPWBMIVView_r.CLASSNAME%TYPE DEFAULT 'CMPWBMIVView' -- VARCHAR2(255) 4
,COMPLETED CMPWBMIVView_r.COMPLETED%TYPE DEFAULT 0 -- CHAR(1) 5
,CREATEDBY CMPWBMIVView_r.CREATEDBY%TYPE DEFAULT 'OWBSYS' -- VARCHAR2(40) 6
,CREATIONTIMESTAMP CMPWBMIVView_r.CREATIONTIMESTAMP%TYPE DEFAULT null --sysdate -- DATE 7
,CUSTOMERDELETABLE CMPWBMIVView_r.CUSTOMERDELETABLE%TYPE DEFAULT 0 -- CHAR(1) 8
,CUSTOMERRENAMABLE CMPWBMIVView_r.CUSTOMERRENAMABLE%TYPE DEFAULT 0 -- CHAR(1) 9
,DELETEINOVERRIDE CMPWBMIVView_r.DELETEINOVERRIDE%TYPE DEFAULT 0 -- CHAR(1) 10
,DESCRIPTION CMPWBMIVView_r.DESCRIPTION%TYPE DEFAULT null --DEFINITIONKEY -- VARCHAR2(4000) 11
,EDITABLE CMPWBMIVView_r.EDITABLE%TYPE DEFAULT 0 -- CHAR(1) 12
,ELEMENTID CMPWBMIVView_r.ELEMENTID%TYPE DEFAULT null --ELEMENTID -- NUMBER(9,0) 13
,IMPORTED CMPWBMIVView_r.IMPORTED%TYPE DEFAULT 0 -- CHAR(1) 14
,LOGICALNAME CMPWBMIVView_r.LOGICALNAME%TYPE DEFAULT null --NAME -- VARCHAR2(1000) 15
,METADATASIGNATURE CMPWBMIVView_r.METADATASIGNATURE%TYPE DEFAULT null --METADATASIGNATURE -- VARCHAR2(255) 16
,NAME CMPWBMIVView_r.NAME%TYPE DEFAULT null --NAME -- VARCHAR2(1000) 17
,NOTE CMPWBMIVView_r.NOTE%TYPE DEFAULT null -- VARCHAR2(4000) 18
,NOTM CMPWBMIVView_r.NOTM%TYPE DEFAULT 0 -- NUMBER(9,0) 19
,OVERRIDEATTRIBUTES CMPWBMIVView_r.OVERRIDEATTRIBUTES%TYPE DEFAULT 0 -- CHAR(1) 20
,OVERRIDECHILDREN CMPWBMIVView_r.OVERRIDECHILDREN%TYPE DEFAULT 0 -- CHAR(1) 21
,OVERRIDEROLES CMPWBMIVView_r.OVERRIDEROLES%TYPE DEFAULT 0 -- CHAR(1) 22
,PERSISTENT CMPWBMIVView_r.PERSISTENT%TYPE DEFAULT 1 -- CHAR(1) 23
,SEEDED CMPWBMIVView_r.SEEDED%TYPE DEFAULT 1 -- CHAR(1) 24
,STRONGTYPENAME CMPWBMIVView_r.STRONGTYPENAME%TYPE DEFAULT null -- VARCHAR2(255) 25
,UOID CMPWBMIVView_r.UOID%TYPE DEFAULT null --UOID -- VARCHAR2(40) 26
,UPDATEDBY CMPWBMIVView_r.UPDATEDBY%TYPE DEFAULT 'OWBSYS' -- VARCHAR2(40) 27
,UPDATETIMESTAMP CMPWBMIVView_r.UPDATETIMESTAMP%TYPE DEFAULT null --sysdate -- DATE 28
,ICONOBJECT CMPWBMIVView_r.ICONOBJECT%TYPE DEFAULT null -- NUMBER(9,0) 29
,FIRSTCLASSOBJECT CMPWBMIVView_r.FIRSTCLASSOBJECT%TYPE DEFAULT null -- NUMBER(9,0) 30
,ISDEFAULT CMPWBMIVView_r.ISDEFAULT%TYPE DEFAULT '1' -- CHAR(1) 31
,VIEWTEXT CMPWBMIVView_r.VIEWTEXT%TYPE DEFAULT null -- CLOB 32
,VIEWTYPE CMPWBMIVView_r.VIEWTYPE%TYPE DEFAULT 'SQL' -- VARCHAR2(40) 33
,MIVDEFINITION CMPWBMIVView_r.MIVDEFINITION%TYPE DEFAULT null -- NUMBER(9,0) 34
);
-- **************************************************************************
-- **************************************************************************
-- Useful functions/procedures
-- **************************************************************************
-- **************************************************************************
-- ==========================================================================
-- put message to output (uses DBMS_OUTPUT)
PROCEDURE put(msg VARCHAR2) IS
-- ==========================================================================
BEGIN
IF NOT OUTINITED THEN
OUTINITED := TRUE;
DBMS_OUTPUT.ENABLE(200000);
put('DBMS_OUTPUT Enabled.');
END IF;
IF (LENGTH(msg) + LENGTH(SCRIPTID) + 2) > 255 THEN
-- 10.1 database can't handle messages with length > 255
--DBMS_OUTPUT.put_line('Message length > 255');
--DBMS_OUTPUT.put_line(SUBSTR(msg, 0, 255));
-- Break the string up into lines or 255-byte chunks
DECLARE
l_msg_line VARCHAR2(255);
l_eol_index NUMBER;
l_curr_index NUMBER;
l_msg_len NUMBER := LENGTH(msg);
l_loop_index NUMBER := 0;
BEGIN
DBMS_OUTPUT.PUT_LINE(SCRIPTID || ':');
l_eol_index := 1;
l_curr_index := 1;
l_loop_index := 0;
WHILE (l_curr_index < l_msg_len AND l_loop_index < 10) LOOP
l_eol_index := INSTR(msg, EOL, l_curr_index);
--DBMS_OUTPUT.put_line('l_eol_index = ' || TO_CHAR(l_eol_index));
IF (l_eol_index <= 0) OR (l_eol_index - l_curr_index) > 255 THEN
l_msg_line := SUBSTR(msg, l_curr_index, 255);
l_curr_index := l_curr_index + 255;
ELSE
l_msg_line := SUBSTR(msg, l_curr_index, l_eol_index - l_curr_index);
l_curr_index := l_eol_index + 1;
END IF;
DBMS_OUTPUT.PUT_LINE(l_msg_line);
l_loop_index := l_loop_index + 1;
END LOOP;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
ELSE
DBMS_OUTPUT.put_line(SCRIPTID || ': ' || msg);
END IF;
END;
-- ==========================================================================
-- put message to output controlled by TRACEON variable (uses put)
PROCEDURE putTrace(msg VARCHAR2) IS
-- ==========================================================================
BEGIN
IF TRACEON THEN
put(msg);
END IF;
END;
-- ==========================================================================
-- return next element id for new objects
FUNCTION getNextElementId RETURN NUMBER
-- ==========================================================================
IS
l_id NUMBER;
BEGIN
SELECT cwmseq.nextval
INTO l_id
FROM DUAL;
RETURN l_id;
END;
-- ==========================================================================
-- CMPWBMIVView
FUNCTION newCMPWBMIVView(
workspaceId IN NUMBER DEFAULT 0
,elementId IN NUMBER DEFAULT 0
,uoid IN VARCHAR2 DEFAULT null
,logicalName IN VARCHAR2 DEFAULT null
,name IN VARCHAR2 DEFAULT null
,metadataSignature IN VARCHAR2 DEFAULT null
,firstClassObject IN NUMBER DEFAULT 0
,mivDefinition IN NUMBER DEFAULT 0
,viewText IN CLOB
) RETURN CMPWBMIVView
-- ==========================================================================
IS
mivView CMPWBMIVView;
BEGIN
mivView.WORKSPACEID := workspaceId;
mivView.AGGREGATEDSIGNATURE := SYSDATE;
mivView.CREATIONTIMESTAMP := SYSDATE;
mivView.ELEMENTID := elementId;
mivView.UOID := uoid;
mivView.LOGICALNAME := logicalName;
mivView.METADATASIGNATURE := metadataSignature;
mivView.NAME := name;
mivView.UOID := uoid;
mivView.UPDATETIMESTAMP := SYSDATE;
mivView.FIRSTCLASSOBJECT := firstClassObject;
mivView.MIVDEFINITION := mivDefinition;
mivView.VIEWTEXT := viewText;
RETURN mivView;
END newCMPWBMIVView;
-- ==========================================================================
PROCEDURE AddCMPWBMIVView(
p_mivView IN CMPWBMIVView
)
-- ==========================================================================
IS
l_count NUMBER := 0;
BEGIN
select count(1) into l_count from CMPWBMIVView_r where
NAME = p_mivView.NAME
and MIVDEFINITION = p_mivView.MIVDEFINITION
and WORKSPACEID = p_mivView.WORKSPACEID
and VIEWTYPE = p_mivView.VIEWTYPE;
If l_count = 1 then
put('Found CMPWBMIVView with name ''' || p_mivView.NAME ||'''. Will update it.' || EOL);
update CMPWBMIVView_r set VIEWTEXT = p_mivView.VIEWTEXT where NAME = p_mivView.NAME
and MIVDEFINITION = p_mivView.MIVDEFINITION
and WORKSPACEID = p_mivView.WORKSPACEID
and VIEWTYPE = p_mivView.VIEWTYPE;
else
If l_count = 0 then
put('Add CMPWBMIVView with name ''' || p_mivView.NAME ||'''.' || EOL);
insert into CMPWBMIVView_r VALUES p_mivView;
else
put('Error! Found ' || l_count || ' CMPWBMIVViews with same name ''' || p_mivView.NAME || '''!' || EOL);
end if;
end if;
END;
-- ==========================================================================
-- return the id (elementid) for the MIVDefinition defined by the input parameters
FUNCTION getMivDefinitionId(
p_owningFolder IN NUMBER,
p_mivDefinitionName IN VARCHAR2
) RETURN NUMBER
-- ==========================================================================
IS
l_owningFolder NUMBER := p_owningFolder;
l_mivDefinitionName VARCHAR2(255) := p_mivDefinitionName;
l_mivDefinitionId NUMBER;
BEGIN
putTrace('getMivDefinitionId(' || l_owningFolder || ', ' || l_mivDefinitionName || ')');
SELECT ELEMENTID
INTO l_mivDefinitionId
FROM CMPWBMIVDefinition_r
WHERE NAME = l_mivDefinitionName and OWNINGFOLDER = l_owningFolder;
putTrace('RETURN ' || l_mivDefinitionId || EOL);
RETURN l_mivDefinitionId;
END getMivDefinitionId;
-- ==========================================================================
-- return the id (elementid) for the CMPWBMIVView defined by the input parameters
FUNCTION getCMPWBMIVViewId(
p_workspaceId IN NUMBER,
p_mivDefinition IN NUMBER,
p_mivViewName IN VARCHAR2
) RETURN NUMBER
-- ==========================================================================
IS
l_workspaceId NUMBER := p_workspaceId;
l_mivDefinition NUMBER := p_mivDefinition;
l_mivViewName VARCHAR2(255) := p_mivViewName;
l_mivViewId NUMBER;
BEGIN
putTrace('getCMPWBMIVViewId(' || l_workspaceId || ', ' || l_mivDefinition || ', ' || l_mivViewName || ')');
SELECT ELEMENTID
INTO l_mivViewId
FROM CMPWBMIVView_r
WHERE WORKSPACEID = l_workspaceId and NAME = l_mivViewName and MIVDEFINITION = l_mivDefinition;
putTrace('RETURN ' || l_mivViewId || EOL);
RETURN l_mivViewId;
END getCMPWBMIVViewId;
-- ##########################################################################
-- ##########################################################################
BEGIN -- Outer block - utility functions/variables now defined
-- ##########################################################################
-- ##########################################################################
-- =======================================================
DECLARE -- Inner block for utility function/variable usage
-- aka 'user' declarations
-- =======================================================
mivView CMPWBMIVView := null;
l_mivDefinitionId NUMBER;
l_mivViewId NUMBER;
l_mivBusinessAreaId NUMBER := getNextElementId;
l_mivBusinessAreaObjectsId NUMBER := getNextElementId;
l_mivBusinessAreaUOID VARCHAR2(40) := RAWTOHEX(SYS_GUID());
l_mivBusinessAreaObjectsUOID VARCHAR2(40) := RAWTOHEX(SYS_GUID());
-- =======================================================
BEGIN -- start handling miv definition options defined in miv_siebel.xml
-- =======================================================
FOR x in (select elementId from CMPWorkspace_r) LOOP
put('Processing workspace [id: ' || x.elementId || ']' || EOL);
l_mivDefinitionId := getMivDefinitionId(x.elementId, 'SIEBEL');
mivView := newCMPWBMIVView(
x.elementId --workspaceId
,l_mivBusinessAreaId --elementId
,l_mivBusinessAreaUOID --UOID
,'miv_business_areas' --logicalname
,'miv_business_areas' --name
,'cea123f7bf058f4c8994c5a9c666bf30' --metadataSignature
,l_mivDefinitionId --firstClassObject
,l_mivDefinitionId --mivDefinition
,'select * from (
select ''1'' business_area_id,
''0'' parent_business_area_id,
''Siebel Business Component'' business_area_name,
''Siebel Business Component'' business_name,
''Siebel Business Component'' description
from dual
union
select DISTINCT BC.row_id business_area_id,
''1'' parent_business_area_id,
BC.name business_area_name,
BC.name business_name,
BC.comments description
from S_BUSCOMP BC,
S_REPOSITORY REPO_1
where BC.repository_id = REPO_1.row_id and REPO_1.name = ''Siebel Repository''
) order by parent_business_area_id, business_area_name
'
);
AddCMPWBMIVView(mivView);
mivView := newCMPWBMIVView(
x.elementId --workspaceId
,l_mivBusinessAreaObjectsId --elementId
,l_mivBusinessAreaObjectsUOID --UOID
,'miv_business_area_objects' --logicalname
,'miv_business_area_objects' --name
,'014b2180c98b7e5b15fcce49ed97025b' --metadataSignature
,l_mivDefinitionId --firstClassObject
,l_mivDefinitionId --mivDefinition
,'
select distinct a.name object_name,
b.buscomp_id parent_business_area_id,
''TABLE'' type,
a.desc_text description
from S_TABLE a,
( select table_name, row_id as buscomp_id, repository_id from S_BUSCOMP
union
select distinct dest_tbl_name as table_name, buscomp_id, repository_id from S_JOIN
union
select distinct join_name as table_name, buscomp_id, repository_id from S_FIELD t_field
where join_name is not null and
not exists (select dest_tbl_name from S_JOIN t_join
where t_join.name = t_field.join_name and t_join.buscomp_id = t_field.buscomp_id )
) b,
S_REPOSITORY c
where a.name = b.table_name and a.repository_id = b.repository_id and a.repository_id = c.row_id and c.name = ''Siebel Repository''
'
);
AddCMPWBMIVView(mivView);
l_mivViewId := getCMPWBMIVViewId(x.elementId,l_mivDefinitionId,'miv_capabilities');
put('Update miv_capabilities of CMPWBMIVView: [ elementId: ' || l_mivViewId || ']' || EOL);
update CMPWBMIVVIEW_R set VIEWTEXT = '
true
false
false
true
false
false
true
true
false
false
true
false
true
true
false
'
where ELEMENTID = l_mivViewId and WORKSPACEID = x.elementId;
put('End processing workspace [id: ' || x.elementId || ']' || EOL);
END LOOP;
-- =======================================================
END; -- Inner block for utility function/variable usage
-- =======================================================
-- ##########################################################################
END; -- Outer block for utility functions/variables
-- ##########################################################################
/