DBA Data[Home] [Help]

PACKAGE BODY: APPS.FND_IMP_CONV_PKG

Source


1 PACKAGE BODY FND_IMP_CONV_PKG AS
2 /* $Header: afimpconvb.pls 120.2 2005/07/15 04:18:48 pchallag noship $ */
3 
4 /*  0 - new
5     1 - nice upgrade
6     2 - hard upgrade
7     3 - not applied
8 */
9 FUNCTION compare_rcsid(rcsname1 varchar2, rcsname2 varchar2)
10 RETURN INTEGER IS
11   x INTEGER := 0;
12   rcsid1 FND_IMP_RCSID;
13   rcsid2 FND_IMP_RCSID;
14 BEGIN
15   if(rcsname1 IS NULL) then
16     return 0;
17   end if;
18   rcsid1 := get_rcsid(rcsname1);
19   rcsid2 := get_rcsid(rcsname2);
20   x := compare_rcsid(rcsid1, rcsid2);
21   if(x = 0 or x = -1) then return 3; end if;
22   if(rcsid1(1) = 2) then return 1; end if;
23   return 2;
24 END compare_rcsid;
25 
26 FUNCTION get_rcsname(rcsname varchar2)
27 RETURN VARCHAR2 IS
28   ret varchar2(300);
29   rcsid FND_IMP_RCSID;
30 BEGIN
31   rcsid := get_rcsid(rcsname);
32   ret := rcsid(1) || '> ';
33   for i in 2..11 loop
34     ret := ret || rcsid(i) || '_';
35   end loop;
36   return ret;
37 END get_rcsname;
38 
39 FUNCTION get_rcsid(rcsname varchar2)
40 RETURN FND_IMP_RCSID IS
41   x INTEGER := 0;
42   prev INTEGER;
43   ret FND_IMP_RCSID := FND_IMP_RCSID(0,0,0,0,0,0,0,0,0,0,0);
44 BEGIN
45   for i in 1..10 loop
46     prev := x+1;
47     x := instr(rcsname, '.', prev);
48     if(x = 0) then
49       ret(1) := i;
50       ret(i+1) := substr(rcsname, prev);
51       return ret;
52     end if;
53     ret(i+1) := to_number(substr(rcsname, prev, x-prev));
54   end loop;
55   ret(1) := 10;
56   return ret;
57 END get_rcsid;
58 
59 FUNCTION compare_rcsid(rcsid1 fnd_imp_rcsid, rcsid2 fnd_imp_rcsid)
60 RETURN INTEGER IS
61   commonSz INTEGER;
62   maxSz INTEGER;
63   diff INTEGER;
64 BEGIN
65   commonSz := LEAST(rcsid1(1), rcsid2(1)) + 1;
66   maxSz := GREATEST(rcsid1(1), rcsid2(1)) + 1;
67   for i in 2..commonSz loop
68     diff := SIGN(rcsid2(i) - rcsid1(i));
69     if(diff <> 0) then
70       return diff;
71     end if;
72   end loop;
73   return SIGN(rcsid2(maxSz) - rcsid1(maxSz));
74 END compare_rcsid;
75 
76 /*
77   -1 - new file
78   0 - mainline file overwritten by mainline file
79   1 - branched file overwritten by branched file in the same branch
80   2 - branched file overwritten by branched file in a different branch
81   3 - mainline file overwritten by a branched file
82   4 - branched file overwritten by a mainline file
83   5 - branched file overwritten by branched file in a different branch (different rcsid size altogether)
84 */
85 FUNCTION check_branching(rcsname1 varchar2, rcsname2 varchar2)
86 RETURN INTEGER IS
87   x INTEGER;
88   rcsid1 FND_IMP_RCSID;
89   rcsid2 FND_IMP_RCSID;
90 BEGIN
91   if(rcsname1 IS NULL) then
92     return -1;
93   end if;
94   rcsid1 := get_rcsid(rcsname1);
95   rcsid2 := get_rcsid(rcsname2);
96   x := check_branching(rcsid1, rcsid2);
97   return x;
98 END check_branching;
99 
100 FUNCTION check_branching(rcsid1 fnd_imp_rcsid, rcsid2 fnd_imp_rcsid)
101 RETURN INTEGER IS
102   commonSz INTEGER;
103   maxSz INTEGER;
104 BEGIN
105   if (rcsid1(1) = rcsid2(1) and rcsid1(1) = 2) then
106     return 0;
107   end if;
108   if (rcsid1(1) = rcsid2(1)) then
109     for i in 2..rcsid1(1) loop
110       if (rcsid1(i) <> rcsid2(i)) then
111         return 2;
112       end if;
113     end loop;
114     return 1;
115   else
116     if (rcsid1(1) = 2) then
117       return 3;
118     end if;
119     if (rcsid2(1) = 2) then
120       return 4;
121     end if;
122     return 5;
123   end if;
124 END check_branching;
125 
126 PROCEDURE uninstall IS
127   CURSOR drop_lst IS
128         select 'drop '||object_type||' '||owner||'.'||object_name
129                 from all_objects
130                 where object_name like 'FND_IMP_%'
131                   and object_type IN ('TABLE', 'VIEW', 'SYNONYM')
132                   and owner IN ('APPS', 'APPLSYS');
133         clean_cmd VARCHAR2(300);
134 BEGIN
135         OPEN drop_lst;
136         LOOP
137                 FETCH drop_lst into clean_cmd;
138                 EXIT WHEN drop_lst%NOTFOUND;
139                 -- dbms_output.put_line(''||clean_cmd);
140                 execute immediate ''||clean_cmd;
141         END LOOP;
142         CLOSE drop_lst;
143 END uninstall;
144 
145 END FND_IMP_CONV_PKG;