DBA Data[Home] [Help]

PACKAGE BODY: APPS.AD_PATCH_LEVEL

Source


1 package body ad_patch_level as
2 /*$Header: adplvlb.pls 115.1 2004/06/01 10:51:13 sallamse noship $ */
3 
4 -- Procedure GET_PATCH_LEVEL (apps_short_name (IN), FP_LEVEL (out))
5 -- This procedure takes an application_short_name (case insensitive)
6 -- and passes back the level.
7 
8 
9 procedure get_patch_level(apps_short_name in  varchar2,
10                           fp_level        out nocopy varchar2)
11 is
12   c                     integer;
13   rows_processed        integer;
14   c_statement           varchar2(500);
15   l_patch_level         varchar2(30);
16 
17 begin
18 
19   c := dbms_sql.open_cursor;
20 
21   c_statement:= 'SELECT PI.PATCH_LEVEL FROM ' ||
22                 'FND_PRODUCT_INSTALLATIONS PI, FND_APPLICATION FA ' ||
23                 'WHERE FA.APPLICATION_ID = PI.APPLICATION_ID AND ' ||
24                 'UPPER(APPLICATION_SHORT_NAME)=' ||
25                 'UPPER(:short_name)';
26 
27   dbms_sql.parse(c, c_statement, dbms_sql.native);
28   dbms_sql.bind_variable(c,'short_name',apps_short_name);
29   dbms_sql.define_column(c,1,l_patch_level,30);
30 
31   rows_processed := dbms_sql.execute(c);
32 
33   if dbms_sql.fetch_rows(c) > 0 then
34       dbms_sql.column_value(c,1,l_patch_level);
35   else
36       raise no_data_found;
37   end if;
38 
39   dbms_sql.close_cursor(c);
40 
41   fp_level := l_patch_level;
42 
43 exception
44     when others then
45       dbms_sql.close_cursor(c);
46       raise;
47 end;
48 
49 
50 
51 -- Procedure GET_RELEASELEVEL (apps_release_level (out))
52 -- This procedure passes back the release level.
53 
54 
55 procedure get_release_level(apps_release_level out nocopy varchar2)
56 is
57   c                     integer;
58   rows_processed        integer;
59   c_statement           varchar2(500);
60   l_release_name        varchar2(50);
61 
62 begin
63 
64   c := dbms_sql.open_cursor;
65 
66   c_statement:= 'SELECT RELEASE_NAME FROM ' ||
67                 'FND_PRODUCT_GROUPS WHERE PRODUCT_GROUP_ID=1';
68 
69   dbms_sql.parse(c, c_statement, dbms_sql.native);
70   dbms_sql.define_column(c,1,l_release_name,30);
71 
72   rows_processed := dbms_sql.execute(c);
73 
74   if dbms_sql.fetch_rows(c) > 0 then
75       dbms_sql.column_value(c,1,l_release_name);
76   else
77       raise no_data_found;
78   end if;
79 
80   dbms_sql.close_cursor(c);
81 
82   apps_release_level := l_release_name;
83 
84 exception
85     when others then
86       dbms_sql.close_cursor(c);
87       raise;
88 end;
89 
90 
91 
92 
93 -- Procedure compare releases. Copied from AD_PATCH.compare_versions()
94 -- Compare passed release_levels.
95 --
96 -- Result:
97 --
98 -- -1 release_1 < release_2
99 --  0 release_1 = release_2
100 --  1 release_1 > release_2
101 --
102 
103 
104 procedure compare_release_levels(release_1 in  varchar2,
105                                 release_2 in  varchar2,
106                                 result    out nocopy number)
107 is
108 
109   release_1_str  varchar2(132);
110   release_2_str  varchar2(132);
111   release_1_ver number;
112   release_2_ver number;
113   ret_status number            :=0;
114 
115 begin
116   release_1_str   := release_1 || '.';
117   release_2_str   := release_2 || '.';
118 
119   while release_1_str is not null or release_2_str is not null loop
120 
121       -- Parse out a version from release_1
122 
123       if (release_1_str is null) then
124          release_1_ver := 0;
125       else
126          release_1_ver := nvl(to_number(substr(release_1_str,1,
127                              instr(release_1_str,'.')-1)),-1);
128          release_1_str := substr(release_1_str,instr(release_1_str,'.')+1);
129       end if;
130 
131       -- Next parse out a version from release_2
132 
133       if (release_2_str is null)
134       then
135         release_2_ver := 0;
136       else
137         release_2_ver := nvl(to_number(substr(release_2_str,1,
138                              instr(release_2_str,'.')-1)),-1);
139         release_2_str := substr(release_2_str,instr(release_2_str,'.')+1);
140       end if;
141 
142 
143       if (release_1_ver > release_2_ver)
144       then
145         ret_status := 1;
146         result     := ret_status;
147         exit;
148       elsif (release_1_ver < release_2_ver)
149       then
150         ret_status := -1;
151         result     := ret_status;
152         exit;
153       end if;
154 
155       -- Otherwise continue to loop.
156 
157   end loop;
158 
159   result := ret_status;
160 
161 end compare_release_levels;
162 
163 -- Procedure compare patch levels.
164 --
165 -- Result:
166 --
167 -- -1 patchlevel_1 < patchlevel_2
168 --  0 patchlevel_1 = patchlevel_2
169 --  1 patchlevel_1 > patchlevel_2
170 --
171 
172 
173 procedure compare_patch_levels(patchlevel_1 in  varchar2,
174                                patchlevel_2 in  varchar2,
175                                result       out nocopy number)
176 is
177 
178   ret_status number            :=0;
179 
180 begin
181 
182   if (UPPER(TRIM(patchlevel_1)) < UPPER(TRIM(patchlevel_2 )))
183   then
184     ret_status := -1;
185     result     := ret_status;
186   elsif (UPPER(TRIM(patchlevel_1)) > UPPER(TRIM(patchlevel_2 )))
187   then
188     ret_status := 1;
189     result     := ret_status;
190   else
191     ret_status := 0;
192     result     := ret_status;
193   end if;
194 
195 end compare_patch_levels;
196 
197 end ad_patch_level;