[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;