| 221 |
vnguyen |
1 |
CREATE PACKAGE BODY "RELEASE_MANAGER"."PK_RMAPI"
|
|
|
2 |
IS
|
|
|
3 |
/*
|
|
|
4 |
------------------------------
|
|
|
5 |
|| Last Modified: Jeremy Tweddle
|
|
|
6 |
|| Modified Date: 08/Feb/2008
|
|
|
7 |
|| Body Version: 3.3
|
|
|
8 |
------------------------------
|
|
|
9 |
*/
|
|
|
10 |
|
|
|
11 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
12 |
FUNCTION package_dependencies (pkgname VARCHAR2, pkgversion VARCHAR2)
|
|
|
13 |
RETURN typecur
|
|
|
14 |
IS
|
|
|
15 |
npvid NUMBER := 0;
|
|
|
16 |
RECORDS typecur;
|
|
|
17 |
BEGIN
|
|
|
18 |
BEGIN
|
|
|
19 |
-- Get PV_ID --
|
|
|
20 |
SELECT pv.pv_id
|
|
|
21 |
INTO npvid
|
|
|
22 |
FROM PACKAGES pkg, package_versions pv
|
|
|
23 |
WHERE pv.pkg_id = pkg.pkg_id
|
|
|
24 |
AND pkg.pkg_name = pkgname
|
|
|
25 |
AND pv.pkg_version = pkgversion;
|
|
|
26 |
EXCEPTION
|
|
|
27 |
WHEN NO_DATA_FOUND
|
|
|
28 |
THEN
|
|
|
29 |
raise_application_error (-20000, 'Package Not Found!');
|
|
|
30 |
--WHEN OTHERS THEN
|
|
|
31 |
-- Consider logging the error and then re-raise
|
|
|
32 |
RAISE;
|
|
|
33 |
END;
|
|
|
34 |
|
|
|
35 |
-- Finally get package dependencies --
|
|
|
36 |
OPEN RECORDS FOR
|
|
|
37 |
SELECT dpv.pv_id, dpkg.pkg_name, dpv.pkg_version
|
|
|
38 |
FROM package_dependencies dep, PACKAGES dpkg, package_versions dpv
|
|
|
39 |
WHERE dep.pv_id = npvid
|
|
|
40 |
AND dpv.pkg_id = dpkg.pkg_id
|
|
|
41 |
AND dpv.pv_id = dep.dpv_id;
|
|
|
42 |
|
|
|
43 |
RETURN RECORDS;
|
|
|
44 |
END;
|
|
|
45 |
|
|
|
46 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
47 |
FUNCTION wip_iteration_package (
|
|
|
48 |
projname VARCHAR2,
|
|
|
49 |
iterationname VARCHAR2,
|
|
|
50 |
pkgname VARCHAR2
|
|
|
51 |
)
|
|
|
52 |
RETURN typecur
|
|
|
53 |
IS
|
|
|
54 |
nrtagid NUMBER := 0;
|
|
|
55 |
RECORDS typecur;
|
|
|
56 |
BEGIN
|
|
|
57 |
BEGIN
|
|
|
58 |
-- Get latest rtag_id --
|
|
|
59 |
SELECT rt.rtag_id
|
|
|
60 |
INTO nrtagid
|
|
|
61 |
FROM projects proj, release_tags rt
|
|
|
62 |
WHERE rt.proj_id = proj.proj_id
|
|
|
63 |
AND UPPER (proj.proj_name) = UPPER (projname)
|
|
|
64 |
AND UPPER (rt.rtag_name) = UPPER (iterationname);
|
|
|
65 |
|
|
|
66 |
IF (nrtagid IS NULL)
|
|
|
67 |
THEN
|
|
|
68 |
raise_application_error (-20000,
|
|
|
69 |
'Work In Progress is Not Found!');
|
|
|
70 |
END IF;
|
|
|
71 |
EXCEPTION
|
|
|
72 |
WHEN NO_DATA_FOUND
|
|
|
73 |
THEN
|
|
|
74 |
raise_application_error (-20000,
|
|
|
75 |
'Work In Progress is Not Found!');
|
|
|
76 |
RAISE;
|
|
|
77 |
END;
|
|
|
78 |
|
|
|
79 |
-- Finally get package dependencies --
|
|
|
80 |
OPEN RECORDS FOR
|
|
|
81 |
SELECT pv.pkg_version, pv.dlocked AS is_official, pv.pkg_label,
|
|
|
82 |
pv.src_path
|
|
|
83 |
FROM PACKAGES pkg, package_versions pv, work_in_progress wip
|
|
|
84 |
WHERE pv.pkg_id = pkg.pkg_id
|
|
|
85 |
AND wip.pv_id = pv.pv_id
|
|
|
86 |
AND wip.rtag_id = nrtagid
|
|
|
87 |
AND pkg.pkg_name = pkgname;
|
|
|
88 |
|
|
|
89 |
RETURN RECORDS;
|
|
|
90 |
END;
|
|
|
91 |
|
|
|
92 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
93 |
FUNCTION auto_make_release (
|
|
|
94 |
rtagid IN NUMBER,
|
|
|
95 |
pkgname IN VARCHAR2,
|
|
|
96 |
vext IN VARCHAR2,
|
|
|
97 |
newpkgversion IN VARCHAR2,
|
|
|
98 |
label IN VARCHAR2,
|
|
|
99 |
dependenciesimportlist IN VARCHAR2,
|
|
|
100 |
isrippled IN NUMBER,
|
|
|
101 |
username IN VARCHAR2
|
|
|
102 |
)
|
|
|
103 |
RETURN NUMBER
|
|
|
104 |
IS
|
|
|
105 |
pkgid NUMBER;
|
|
|
106 |
pvid NUMBER := 0;
|
|
|
107 |
userid NUMBER;
|
|
|
108 |
dlocked VARCHAR2 (20) := NULL;
|
|
|
109 |
clonefrompvid NUMBER;
|
|
|
110 |
ssv_mm package_versions.v_mm%TYPE;
|
|
|
111 |
ssv_nmm package_versions.v_nmm%TYPE;
|
|
|
112 |
ssv_ext package_versions.v_ext%TYPE;
|
|
|
113 |
return_package_not_found NUMBER := -1;
|
|
|
114 |
return_package_already_exists NUMBER := -2;
|
|
|
115 |
return_not_approved NUMBER := -3;
|
|
|
116 |
BEGIN
|
|
|
117 |
/*--------------- Business Rules Here -------------------*/
|
|
|
118 |
IF (rtagid IS NULL)
|
|
|
119 |
THEN
|
|
|
120 |
raise_application_error (-20000, 'RtagId must be supplied.');
|
|
|
121 |
END IF;
|
|
|
122 |
|
|
|
123 |
IF (pkgname IS NULL)
|
|
|
124 |
THEN
|
|
|
125 |
raise_application_error (-20000, 'PkgName must be supplied.');
|
|
|
126 |
END IF;
|
|
|
127 |
|
|
|
128 |
IF (newpkgversion IS NULL)
|
|
|
129 |
THEN
|
|
|
130 |
raise_application_error (-20000, 'PkgVersion must be supplied.');
|
|
|
131 |
END IF;
|
|
|
132 |
|
|
|
133 |
IF (label IS NULL)
|
|
|
134 |
THEN
|
|
|
135 |
raise_application_error (-20000, 'Label must be supplied.');
|
|
|
136 |
END IF;
|
|
|
137 |
|
|
|
138 |
IF (isrippled IS NULL) OR (isrippled < 0) OR (isrippled > 1)
|
|
|
139 |
THEN
|
|
|
140 |
raise_application_error
|
|
|
141 |
(-20000,
|
|
|
142 |
'IsRippled must be set to 1 (Is rippled build) or 0 (Is planned build).'
|
|
|
143 |
);
|
|
|
144 |
END IF;
|
|
|
145 |
|
|
|
146 |
IF (username IS NULL)
|
|
|
147 |
THEN
|
|
|
148 |
raise_application_error (-20000, 'UserName must be supplied.');
|
|
|
149 |
END IF;
|
|
|
150 |
|
|
|
151 |
-- Get user_id
|
|
|
152 |
BEGIN
|
|
|
153 |
SELECT usr.user_id
|
|
|
154 |
INTO userid
|
|
|
155 |
FROM users usr
|
|
|
156 |
WHERE UPPER (usr.user_name) = UPPER (username)
|
|
|
157 |
AND usr.is_disabled IS NULL;
|
|
|
158 |
EXCEPTION
|
|
|
159 |
WHEN NO_DATA_FOUND
|
|
|
160 |
THEN
|
|
|
161 |
raise_application_error (-20000,
|
|
|
162 |
'UserName '
|
|
|
163 |
|| username
|
|
|
164 |
|| ' is not valid or disabled.'
|
|
|
165 |
);
|
|
|
166 |
END;
|
|
|
167 |
|
|
|
168 |
/*-------------------------------------------------------*/
|
|
|
169 |
|
|
|
170 |
-- Create package if necessary
|
|
|
171 |
IF isrippled = 1
|
|
|
172 |
THEN
|
|
|
173 |
/* Ripple Build */
|
|
|
174 |
BEGIN
|
|
|
175 |
-- Make sure that package does not exist
|
|
|
176 |
SELECT pv.pv_id
|
|
|
177 |
INTO pvid
|
|
|
178 |
FROM package_versions pv, PACKAGES pkg
|
|
|
179 |
WHERE pv.pkg_id = pkg.pkg_id
|
|
|
180 |
AND pkg.pkg_name = pkgname
|
|
|
181 |
AND pv.pkg_version = newpkgversion;
|
|
|
182 |
EXCEPTION
|
|
|
183 |
WHEN NO_DATA_FOUND
|
|
|
184 |
THEN
|
|
|
185 |
pvid := 0;
|
|
|
186 |
END;
|
|
|
187 |
|
|
|
188 |
IF (pvid = 0)
|
|
|
189 |
THEN
|
|
|
190 |
-- Split current version in parts
|
|
|
191 |
split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
|
|
|
192 |
|
|
|
193 |
BEGIN
|
|
|
194 |
-- Find package to be replaced with thie ripple package
|
|
|
195 |
IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
|
|
|
196 |
THEN
|
|
|
197 |
SELECT pv.pv_id
|
|
|
198 |
INTO clonefrompvid
|
|
|
199 |
FROM PACKAGES pkg, package_versions pv,
|
|
|
200 |
release_content rc
|
|
|
201 |
WHERE rc.pv_id = pv.pv_id
|
|
|
202 |
AND pv.pkg_id = pkg.pkg_id
|
|
|
203 |
AND rc.rtag_id = rtagid
|
|
|
204 |
AND pkg.pkg_name = pkgname
|
|
|
205 |
AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|');
|
|
|
206 |
ELSE
|
|
|
207 |
SELECT pv.pv_id
|
|
|
208 |
INTO clonefrompvid
|
|
|
209 |
FROM PACKAGES pkg, package_versions pv,
|
|
|
210 |
release_content rc
|
|
|
211 |
WHERE rc.pv_id = pv.pv_id
|
|
|
212 |
AND pv.pkg_id = pkg.pkg_id
|
|
|
213 |
AND rc.rtag_id = rtagid
|
|
|
214 |
AND pkg.pkg_name = pkgname
|
|
|
215 |
AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
|
|
|
216 |
END IF;
|
|
|
217 |
EXCEPTION
|
|
|
218 |
WHEN NO_DATA_FOUND
|
|
|
219 |
THEN
|
|
|
220 |
raise_application_error
|
|
|
221 |
(-20000,
|
|
|
222 |
'Cannot get CloneFromPvId. VExt='
|
|
|
223 |
|| vext
|
|
|
224 |
|| ', RtagId='
|
|
|
225 |
|| rtagid
|
|
|
226 |
|| ', PkgName='
|
|
|
227 |
|| pkgname
|
|
|
228 |
|| ', SSV_EXT='
|
|
|
229 |
|| ssv_ext
|
|
|
230 |
);
|
|
|
231 |
END;
|
|
|
232 |
|
|
|
233 |
IF NVL (vext, '|LINK_A_NULL|') = NVL (ssv_ext, '|LINK_A_NULL|')
|
|
|
234 |
THEN
|
|
|
235 |
|
|
|
236 |
-- Create package
|
|
|
237 |
seed_package_names_versions (pkgname,
|
|
|
238 |
newpkgversion,
|
|
|
239 |
userid,
|
|
|
240 |
pvid,
|
|
|
241 |
clonefrompvid
|
|
|
242 |
);
|
|
|
243 |
ELSE
|
|
|
244 |
-- Create package
|
|
|
245 |
seed_package_names_versions2 (pkgname,
|
|
|
246 |
newpkgversion,
|
|
|
247 |
userid,
|
|
|
248 |
pvid,
|
|
|
249 |
clonefrompvid
|
|
|
250 |
);
|
|
|
251 |
END IF;
|
|
|
252 |
|
|
|
253 |
-- Update Package reason for release
|
|
|
254 |
UPDATE package_versions pv
|
|
|
255 |
SET pv.comments = 'Rippled Build.',
|
|
|
256 |
pv.build_type = 'Y'
|
|
|
257 |
WHERE pv.pv_id = pvid;
|
|
|
258 |
ELSE
|
|
|
259 |
-- Package already exists, hence cannot be used for ripple build
|
|
|
260 |
RETURN return_package_already_exists;
|
|
|
261 |
END IF;
|
|
|
262 |
ELSE
|
|
|
263 |
/* Auto build from Pending area */
|
|
|
264 |
|
|
|
265 |
-- Find package in pending area
|
|
|
266 |
BEGIN
|
|
|
267 |
SELECT pv.pv_id, pv.dlocked
|
|
|
268 |
INTO pvid, dlocked
|
|
|
269 |
FROM planned pl, package_versions pv, PACKAGES pkg
|
|
|
270 |
WHERE pl.pv_id = pv.pv_id
|
|
|
271 |
AND pv.pkg_id = pkg.pkg_id
|
|
|
272 |
AND pl.rtag_id = rtagid
|
|
|
273 |
AND pkg.pkg_name = pkgname
|
|
|
274 |
AND pv.dlocked = 'A'
|
|
|
275 |
AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
|
|
|
276 |
EXCEPTION
|
|
|
277 |
WHEN NO_DATA_FOUND
|
|
|
278 |
THEN
|
|
|
279 |
pvid := 0;
|
|
|
280 |
END;
|
|
|
281 |
|
|
|
282 |
IF (pvid = 0)
|
|
|
283 |
THEN
|
|
|
284 |
-- Package does not exist in pending area, hence report it
|
|
|
285 |
RETURN return_package_not_found;
|
|
|
286 |
ELSIF (dlocked != 'A')
|
|
|
287 |
THEN
|
|
|
288 |
-- Package is not approved for autobuild
|
|
|
289 |
RETURN return_not_approved;
|
|
|
290 |
END IF;
|
|
|
291 |
END IF;
|
|
|
292 |
|
|
|
293 |
BEGIN
|
|
|
294 |
-- Import Dependencies
|
|
|
295 |
import_dependencies (pvid, dependenciesimportlist, userid);
|
|
|
296 |
END;
|
|
|
297 |
|
|
|
298 |
BEGIN
|
|
|
299 |
-- Split current version in parts
|
|
|
300 |
split_version (newpkgversion, ssv_mm, ssv_nmm, ssv_ext);
|
|
|
301 |
|
|
|
302 |
-- Update Package Details
|
|
|
303 |
UPDATE package_versions pv
|
|
|
304 |
SET pv.pkg_version = newpkgversion,
|
|
|
305 |
pv.v_ext = ssv_ext,
|
|
|
306 |
pv.v_mm = ssv_mm,
|
|
|
307 |
pv.v_nmm = ssv_nmm,
|
|
|
308 |
pv.pkg_label = label
|
|
|
309 |
WHERE pv.pv_id = pvid;
|
|
|
310 |
EXCEPTION
|
|
|
311 |
WHEN DUP_VAL_ON_INDEX
|
|
|
312 |
THEN
|
|
|
313 |
-- Package already exists, hence cannot be used for ripple build
|
|
|
314 |
RETURN return_package_already_exists;
|
|
|
315 |
END;
|
|
|
316 |
|
|
|
317 |
-- Update the is_autobuildable
|
|
|
318 |
UPDATE package_versions
|
|
|
319 |
SET is_autobuildable = 'Y'
|
|
|
320 |
WHERE pv_id = pvid;
|
|
|
321 |
|
|
|
322 |
-- Now release package
|
|
|
323 |
pk_environment.auto_make_release (pvid,
|
|
|
324 |
rtagid,
|
|
|
325 |
userid,
|
|
|
326 |
vext,
|
|
|
327 |
ssv_ext,
|
|
|
328 |
clonefrompvid
|
|
|
329 |
);
|
|
|
330 |
|
|
|
331 |
--Now clean the PLANNED_VERSIONS table
|
|
|
332 |
SELECT pkg_id
|
|
|
333 |
INTO pkgid
|
|
|
334 |
FROM PACKAGES
|
|
|
335 |
WHERE pkg_name = pkgname;
|
|
|
336 |
|
|
|
337 |
DELETE FROM planned_versions
|
|
|
338 |
WHERE pkg_id = pkgid AND pkg_version = newpkgversion;
|
|
|
339 |
|
|
|
340 |
RETURN pvid;
|
|
|
341 |
END;
|
|
|
342 |
|
|
|
343 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
344 |
PROCEDURE import_dependencies (
|
|
|
345 |
pvid IN NUMBER,
|
|
|
346 |
dependenciesimportlist IN VARCHAR2,
|
|
|
347 |
userid IN NUMBER
|
|
|
348 |
)
|
|
|
349 |
IS
|
|
|
350 |
/*
|
|
|
351 |
|| DependenciesImportList Format:
|
|
|
352 |
|| "pkgA","1.0.0";"pkgB","2.0.0";
|
|
|
353 |
|| OR 'pkgA','1.0.0';'pkgB','2.0.0';
|
|
|
354 |
*/
|
|
|
355 |
TYPE tdictionary IS TABLE OF VARCHAR2 (4000)
|
|
|
356 |
INDEX BY VARCHAR2 (4000);
|
|
|
357 |
|
|
|
358 |
seperator VARCHAR2 (2) := '||';
|
|
|
359 |
pkgname VARCHAR2 (4000);
|
|
|
360 |
pkgversion VARCHAR2 (4000);
|
|
|
361 |
buildtype VARCHAR2 (50);
|
|
|
362 |
pkgid NUMBER;
|
|
|
363 |
vext VARCHAR2 (4000);
|
|
|
364 |
dpvid NUMBER;
|
|
|
365 |
slist VARCHAR2 (4000);
|
|
|
366 |
cbuildtypes tdictionary;
|
|
|
367 |
dependencyrow NUMBER;
|
|
|
368 |
sdependency VARCHAR2 (4000);
|
|
|
369 |
first_pos VARCHAR2 (4000);
|
|
|
370 |
second_pos VARCHAR2 (4000);
|
|
|
371 |
third_pos VARCHAR2 (4000);
|
|
|
372 |
forth_pos VARCHAR2 (4000);
|
|
|
373 |
citemcollection relmgr_varchar2_tab_t := relmgr_varchar2_tab_t ();
|
|
|
374 |
|
|
|
375 |
CURSOR curbuildtype
|
|
|
376 |
IS
|
|
|
377 |
SELECT dpv.pkg_id || seperator || dpv.v_ext AS pkgid_ext,
|
|
|
378 |
dep.build_type
|
|
|
379 |
FROM package_dependencies dep, package_versions dpv
|
|
|
380 |
WHERE dep.pv_id = pvid AND dep.dpv_id = dpv.pv_id;
|
|
|
381 |
|
|
|
382 |
recbuildtype curbuildtype%ROWTYPE;
|
|
|
383 |
BEGIN
|
|
|
384 |
slist := dependenciesimportlist;
|
|
|
385 |
|
|
|
386 |
-- Preformat String
|
|
|
387 |
IF NOT slist IS NULL
|
|
|
388 |
THEN
|
|
|
389 |
slist := REPLACE (slist, ' '); -- Remove spaces
|
|
|
390 |
slist := REPLACE (slist, UTL_TCP.crlf);
|
|
|
391 |
-- Remove new line and carriage-return characters
|
|
|
392 |
slist := REPLACE (slist, '''', '"'); -- Replace ' with "
|
|
|
393 |
END IF;
|
|
|
394 |
|
|
|
395 |
-- Get Current Dependencies
|
|
|
396 |
OPEN curbuildtype;
|
|
|
397 |
|
|
|
398 |
FETCH curbuildtype
|
|
|
399 |
INTO recbuildtype;
|
|
|
400 |
|
|
|
401 |
WHILE curbuildtype%FOUND
|
|
|
402 |
LOOP
|
|
|
403 |
cbuildtypes (recbuildtype.pkgid_ext) := recbuildtype.build_type;
|
|
|
404 |
|
|
|
405 |
FETCH curbuildtype
|
|
|
406 |
INTO recbuildtype;
|
|
|
407 |
END LOOP;
|
|
|
408 |
|
|
|
409 |
CLOSE curbuildtype;
|
|
|
410 |
|
|
|
411 |
-- Separate dependencies with ; separator
|
|
|
412 |
citemcollection := in_list_varchar2 (slist, ';');
|
|
|
413 |
|
|
|
414 |
BEGIN
|
|
|
415 |
-- Remove old dependencies
|
|
|
416 |
DELETE FROM package_dependencies dep
|
|
|
417 |
WHERE dep.pv_id = pvid;
|
|
|
418 |
|
|
|
419 |
-- Loop through dependencies
|
|
|
420 |
FOR dependencyrow IN 1 .. citemcollection.COUNT
|
|
|
421 |
LOOP
|
|
|
422 |
-- Extract pkg_name and pkg_version
|
|
|
423 |
sdependency := citemcollection (dependencyrow);
|
|
|
424 |
first_pos := INSTR (sdependency, '"', 1, 1);
|
|
|
425 |
second_pos := INSTR (sdependency, '"', 1, 2);
|
|
|
426 |
third_pos := INSTR (sdependency, '"', 1, 3);
|
|
|
427 |
forth_pos := INSTR (sdependency, '"', 1, 4);
|
|
|
428 |
pkgname :=
|
|
|
429 |
SUBSTR (sdependency,
|
|
|
430 |
(first_pos + 1),
|
|
|
431 |
(second_pos - first_pos - 1)
|
|
|
432 |
);
|
|
|
433 |
pkgversion :=
|
|
|
434 |
SUBSTR (sdependency,
|
|
|
435 |
(third_pos + 1),
|
|
|
436 |
(forth_pos - third_pos - 1)
|
|
|
437 |
);
|
|
|
438 |
|
|
|
439 |
-- Dependency must exits to be linked against
|
|
|
440 |
BEGIN
|
|
|
441 |
SELECT pv.pv_id, pv.pkg_id, pv.v_ext
|
|
|
442 |
INTO dpvid, pkgid, vext
|
|
|
443 |
FROM package_versions pv, PACKAGES pkg
|
|
|
444 |
WHERE pv.pkg_id = pkg.pkg_id
|
|
|
445 |
AND pkg.pkg_name = pkgname
|
|
|
446 |
AND pv.pkg_version = pkgversion;
|
|
|
447 |
EXCEPTION
|
|
|
448 |
WHEN NO_DATA_FOUND
|
|
|
449 |
THEN
|
|
|
450 |
raise_application_error
|
|
|
451 |
(-20000,
|
|
|
452 |
'Dependency ['
|
|
|
453 |
|| pkgname
|
|
|
454 |
|| ' '
|
|
|
455 |
|| pkgversion
|
|
|
456 |
|| '] does not exist yet and cannot be used!'
|
|
|
457 |
);
|
|
|
458 |
END;
|
|
|
459 |
|
|
|
460 |
-- Get Build Type (i.e. BuildPackageArchive or LinkPackageArchive)
|
|
|
461 |
BEGIN
|
|
|
462 |
buildtype := cbuildtypes (pkgid || seperator || vext);
|
|
|
463 |
|
|
|
464 |
IF buildtype IS NULL
|
|
|
465 |
THEN
|
|
|
466 |
-- Set build type to LinkPackageArchive by default
|
|
|
467 |
buildtype := 'L';
|
|
|
468 |
END IF;
|
|
|
469 |
EXCEPTION
|
|
|
470 |
WHEN NO_DATA_FOUND
|
|
|
471 |
THEN
|
|
|
472 |
buildtype := 'L';
|
|
|
473 |
END;
|
|
|
474 |
|
|
|
475 |
-- Insert Dependencies
|
|
|
476 |
|
|
|
477 |
update_package_dependency (pvid,
|
|
|
478 |
pkgname,
|
|
|
479 |
pkgversion,
|
|
|
480 |
buildtype,
|
|
|
481 |
userid,
|
|
|
482 |
|
|
|
483 |
);
|
|
|
484 |
END LOOP;
|
|
|
485 |
END;
|
|
|
486 |
END;
|
|
|
487 |
|
|
|
488 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
489 |
FUNCTION return_last_package_version (pkgname IN VARCHAR2, rtagid IN NUMBER)
|
|
|
490 |
RETURN VARCHAR2
|
|
|
491 |
IS
|
|
|
492 |
pkgversion VARCHAR2 (4000);
|
|
|
493 |
BEGIN
|
|
|
494 |
BEGIN
|
|
|
495 |
SELECT pv.pkg_version
|
|
|
496 |
INTO pkgversion
|
|
|
497 |
FROM PACKAGES pkg, release_content rc, package_versions pv
|
|
|
498 |
WHERE pv.pv_id = rc.pv_id
|
|
|
499 |
AND pkg.pkg_id = pv.pkg_id
|
|
|
500 |
AND pkg.pkg_name = pkgname
|
|
|
501 |
AND rc.rtag_id = rtagid;
|
|
|
502 |
|
|
|
503 |
RETURN pkgversion;
|
|
|
504 |
END;
|
|
|
505 |
END;
|
|
|
506 |
|
|
|
507 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
508 |
FUNCTION return_wip (pkgname IN VARCHAR2, rtagid IN NUMBER)
|
|
|
509 |
RETURN VARCHAR2
|
|
|
510 |
IS
|
|
|
511 |
pkgversion VARCHAR2 (4000);
|
|
|
512 |
BEGIN
|
|
|
513 |
BEGIN
|
|
|
514 |
SELECT pv.pkg_version
|
|
|
515 |
INTO pkgversion
|
|
|
516 |
FROM PACKAGES pkg, work_in_progress wip, package_versions pv
|
|
|
517 |
WHERE pv.pv_id = wip.pv_id
|
|
|
518 |
AND pkg.pkg_id = pv.pkg_id
|
|
|
519 |
AND pkg.pkg_name = pkgname
|
|
|
520 |
AND wip.rtag_id = rtagid;
|
|
|
521 |
|
|
|
522 |
IF pkgversion IS NULL
|
|
|
523 |
THEN
|
|
|
524 |
SELECT pv.pkg_version
|
|
|
525 |
INTO pkgversion
|
|
|
526 |
FROM PACKAGES pkg, planned pl, package_versions pv
|
|
|
527 |
WHERE pv.pv_id = pl.pv_id
|
|
|
528 |
AND pkg.pkg_id = pv.pkg_id
|
|
|
529 |
AND pkg.pkg_name = pkgname
|
|
|
530 |
AND pl.rtag_id = rtagid;
|
|
|
531 |
END IF;
|
|
|
532 |
|
|
|
533 |
RETURN pkgversion;
|
|
|
534 |
END;
|
|
|
535 |
END;
|
|
|
536 |
|
|
|
537 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
538 |
PROCEDURE update_dash_board (rtagid IN NUMBER)
|
|
|
539 |
IS
|
|
|
540 |
projid NUMBER;
|
|
|
541 |
projiddb NUMBER;
|
|
|
542 |
total NUMBER;
|
|
|
543 |
auto_total NUMBER;
|
|
|
544 |
rtagiddb NUMBER;
|
|
|
545 |
BEGIN
|
|
|
546 |
SELECT COUNT (*)
|
|
|
547 |
INTO total
|
|
|
548 |
FROM release_content rc, package_versions pv
|
|
|
549 |
WHERE pv.pv_id = rc.pv_id AND rc.rtag_id = rtagid;
|
|
|
550 |
|
|
|
551 |
SELECT COUNT (*)
|
|
|
552 |
INTO auto_total
|
|
|
553 |
FROM release_content rc, package_versions pv
|
|
|
554 |
WHERE pv.pv_id = rc.pv_id
|
|
|
555 |
AND pv.is_autobuildable = 'Y'
|
|
|
556 |
AND rc.rtag_id = rtagid;
|
|
|
557 |
|
|
|
558 |
BEGIN
|
|
|
559 |
SELECT rtag_id
|
|
|
560 |
INTO rtagiddb
|
|
|
561 |
FROM dash_board
|
|
|
562 |
WHERE rtag_id = rtagid;
|
|
|
563 |
|
|
|
564 |
SELECT proj_id
|
|
|
565 |
INTO projiddb
|
|
|
566 |
FROM dash_board
|
|
|
567 |
WHERE rtag_id = rtagid;
|
|
|
568 |
EXCEPTION
|
|
|
569 |
WHEN NO_DATA_FOUND
|
|
|
570 |
THEN
|
|
|
571 |
rtagiddb := '';
|
|
|
572 |
END;
|
|
|
573 |
|
|
|
574 |
IF rtagiddb IS NULL
|
|
|
575 |
THEN
|
|
|
576 |
SELECT proj_id
|
|
|
577 |
INTO projid
|
|
|
578 |
FROM release_tags
|
|
|
579 |
WHERE rtag_id = rtagid;
|
|
|
580 |
|
|
|
581 |
INSERT INTO dash_board
|
|
|
582 |
(proj_id, rtag_id, last_build_time, automated_packages,
|
|
|
583 |
total_packages
|
|
|
584 |
)
|
|
|
585 |
VALUES (projid, rtagid, ora_sysdatetime, auto_total,
|
|
|
586 |
total
|
|
|
587 |
);
|
|
|
588 |
ELSE
|
|
|
589 |
UPDATE dash_board
|
|
|
590 |
SET last_build_time = ora_sysdatetime,
|
|
|
591 |
automated_packages = auto_total,
|
|
|
592 |
total_packages = total
|
|
|
593 |
WHERE proj_id = projiddb AND rtag_id = rtagiddb;
|
|
|
594 |
END IF;
|
|
|
595 |
END;
|
|
|
596 |
|
|
|
597 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
598 |
FUNCTION exclude_from_build (
|
|
|
599 |
pvid IN NUMBER,
|
|
|
600 |
spkgversion IN VARCHAR2,
|
|
|
601 |
rtagid IN NUMBER,
|
|
|
602 |
username IN VARCHAR2
|
|
|
603 |
)
|
|
|
604 |
RETURN NUMBER
|
|
|
605 |
IS
|
|
|
606 |
userid NUMBER;
|
|
|
607 |
outerrcode NUMBER;
|
|
|
608 |
pkgid NUMBER;
|
|
|
609 |
|
|
|
610 |
CURSOR dnr_duplicate_cur
|
|
|
611 |
IS
|
|
|
612 |
SELECT *
|
|
|
613 |
FROM do_not_ripple
|
|
|
614 |
WHERE pv_id = pvid AND rtag_id = rtagid;
|
|
|
615 |
|
|
|
616 |
dnr_duplicate_rec dnr_duplicate_cur%ROWTYPE;
|
|
|
617 |
BEGIN
|
|
|
618 |
outerrcode := -1; -- Set default return error code to ERROR state
|
|
|
619 |
|
|
|
620 |
/*--------------- Business Rules Here -------------------*/
|
|
|
621 |
IF (rtagid IS NULL)
|
|
|
622 |
THEN
|
|
|
623 |
RETURN outerrcode;
|
|
|
624 |
-- raise_application_error (-20000, 'RtagId must be supplied.');
|
|
|
625 |
END IF;
|
|
|
626 |
|
|
|
627 |
IF (pvid IS NULL)
|
|
|
628 |
THEN
|
|
|
629 |
RETURN outerrcode;
|
|
|
630 |
-- raise_application_error (-20000, 'PvId must be supplied.');
|
|
|
631 |
END IF;
|
|
|
632 |
|
|
|
633 |
IF (username IS NULL)
|
|
|
634 |
THEN
|
|
|
635 |
RETURN outerrcode;
|
|
|
636 |
-- raise_application_error (-20000, 'UserName must be supplied.');
|
|
|
637 |
END IF;
|
|
|
638 |
|
|
|
639 |
-- Get user_id
|
|
|
640 |
BEGIN
|
|
|
641 |
SELECT usr.user_id
|
|
|
642 |
INTO userid
|
|
|
643 |
FROM users usr
|
|
|
644 |
WHERE UPPER (usr.user_name) = UPPER (username)
|
|
|
645 |
AND usr.is_disabled IS NULL;
|
|
|
646 |
EXCEPTION
|
|
|
647 |
WHEN NO_DATA_FOUND
|
|
|
648 |
THEN
|
|
|
649 |
RETURN outerrcode;
|
|
|
650 |
-- raise_application_error (-20000,
|
|
|
651 |
-- 'UserName '
|
|
|
652 |
-- || username
|
|
|
653 |
-- || ' is not valid or disabled.'
|
|
|
654 |
-- );
|
|
|
655 |
END;
|
|
|
656 |
|
|
|
657 |
OPEN dnr_duplicate_cur;
|
|
|
658 |
|
|
|
659 |
FETCH dnr_duplicate_cur
|
|
|
660 |
INTO dnr_duplicate_rec;
|
|
|
661 |
|
|
|
662 |
IF dnr_duplicate_cur%FOUND
|
|
|
663 |
THEN
|
|
|
664 |
outerrcode := 0;
|
|
|
665 |
END IF;
|
|
|
666 |
|
|
|
667 |
IF dnr_duplicate_cur%NOTFOUND
|
|
|
668 |
THEN
|
|
|
669 |
/* No duplicate recordset */
|
|
|
670 |
unripple_package (pvid, rtagid, userid);
|
|
|
671 |
outerrcode := 0; -- Set return to SUCCESS
|
|
|
672 |
END IF;
|
|
|
673 |
|
|
|
674 |
CLOSE dnr_duplicate_cur;
|
|
|
675 |
|
|
|
676 |
SELECT pkg_id
|
|
|
677 |
INTO pkgid
|
|
|
678 |
FROM package_versions
|
|
|
679 |
WHERE pv_id = pvid;
|
|
|
680 |
|
|
|
681 |
DELETE FROM planned_versions
|
|
|
682 |
WHERE pkg_id = pkgid AND pkg_version = spkgversion;
|
|
|
683 |
|
|
|
684 |
RETURN outerrcode;
|
|
|
685 |
END;
|
|
|
686 |
|
|
|
687 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
688 |
PROCEDURE insert_abt_actionlog (rconid IN NUMBER, action IN VARCHAR2)
|
|
|
689 |
IS
|
|
|
690 |
BEGIN
|
|
|
691 |
INSERT INTO abt_action_log
|
|
|
692 |
(rcon_id, action_datetime, action
|
|
|
693 |
)
|
|
|
694 |
VALUES (rconid, ora_sysdatetime, action
|
|
|
695 |
);
|
|
|
696 |
END;
|
|
|
697 |
|
|
|
698 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
699 |
FUNCTION insert_package_metrics (
|
|
|
700 |
rtagid IN NUMBER,
|
|
|
701 |
pkgname IN VARCHAR2,
|
|
|
702 |
vext IN VARCHAR2,
|
|
|
703 |
metricstring IN VARCHAR2
|
|
|
704 |
)
|
|
|
705 |
RETURN NUMBER
|
|
|
706 |
IS
|
|
|
707 |
citemcollection relmgr_varchar2_tab_t := relmgr_varchar2_tab_t ();
|
|
|
708 |
pvid NUMBER := 0;
|
|
|
709 |
rownumber NUMBER;
|
|
|
710 |
rowcontent VARCHAR2(4000);
|
|
|
711 |
metricname VARCHAR2(1000);
|
|
|
712 |
metricvalue VARCHAR2(4000);
|
|
|
713 |
return_insert_error NUMBER := -1;
|
|
|
714 |
return_insert_success NUMBER := 0;
|
|
|
715 |
|
|
|
716 |
/* Metrics */
|
|
|
717 |
branches NUMBER;
|
|
|
718 |
branchlist VARCHAR2(4000);
|
|
|
719 |
codefiles NUMBER;
|
|
|
720 |
ignoredfiles NUMBER;
|
|
|
721 |
directories NUMBER;
|
|
|
722 |
directorydepth NUMBER;
|
|
|
723 |
totalfiles NUMBER;
|
|
|
724 |
makefiles NUMBER;
|
|
|
725 |
blanklines NUMBER;
|
|
|
726 |
codelines NUMBER;
|
|
|
727 |
commentlines NUMBER;
|
|
|
728 |
|
|
|
729 |
BEGIN
|
|
|
730 |
/*--------------- Business Rules Here -------------------*/
|
|
|
731 |
IF (rtagid IS NULL)
|
|
|
732 |
THEN
|
|
|
733 |
RETURN return_insert_error;
|
|
|
734 |
END IF;
|
|
|
735 |
|
|
|
736 |
IF (pkgname IS NULL)
|
|
|
737 |
THEN
|
|
|
738 |
RETURN return_insert_error;
|
|
|
739 |
END IF;
|
|
|
740 |
|
|
|
741 |
IF (metricstring IS NULL)
|
|
|
742 |
THEN
|
|
|
743 |
RETURN return_insert_error;
|
|
|
744 |
END IF;
|
|
|
745 |
|
|
|
746 |
BEGIN
|
|
|
747 |
SELECT pv.pv_id
|
|
|
748 |
INTO pvid
|
|
|
749 |
FROM package_versions pv, packages pkg, release_content rc
|
|
|
750 |
WHERE
|
|
|
751 |
pv.pkg_id = pkg.pkg_id
|
|
|
752 |
AND rc.rtag_id = rtagid
|
|
|
753 |
AND pv.pv_id = rc.pv_id
|
|
|
754 |
AND pkg.pkg_name = pkgname
|
|
|
755 |
AND NVL (pv.v_ext, '|LINK_A_NULL|') = NVL (vext, '|LINK_A_NULL|');
|
|
|
756 |
EXCEPTION
|
|
|
757 |
WHEN NO_DATA_FOUND
|
|
|
758 |
THEN
|
|
|
759 |
pvid := 0;
|
|
|
760 |
END;
|
|
|
761 |
|
|
|
762 |
citemcollection := in_list_varchar2 (metricstring, ';');
|
|
|
763 |
|
|
|
764 |
FOR rownumber IN 1 .. citemcollection.COUNT
|
|
|
765 |
LOOP
|
|
|
766 |
rowcontent := citemcollection(rownumber);
|
|
|
767 |
metricvalue := SUBSTR(rowcontent, (INSTR(rowcontent, '=') + 1));
|
|
|
768 |
metricname := REGEXP_REPLACE(rowcontent, '=.*$', '');
|
|
|
769 |
|
|
|
770 |
IF metricname = 'ccbranch.count' THEN branches := metricvalue;
|
|
|
771 |
ELSIF metricname = 'ccbranch.list' THEN branchlist := metricvalue;
|
|
|
772 |
ELSIF metricname = 'code.files' THEN codefiles := metricvalue;
|
|
|
773 |
ELSIF metricname = 'code.ignored' THEN ignoredfiles := metricvalue;
|
|
|
774 |
ELSIF metricname = 'count.dir' THEN directories := metricvalue;
|
|
|
775 |
ELSIF metricname = 'count.dirdepth' THEN directorydepth := metricvalue;
|
|
|
776 |
ELSIF metricname = 'count.file' THEN totalfiles := metricvalue;
|
|
|
777 |
ELSIF metricname = 'count.makefile' THEN makefiles := metricvalue;
|
|
|
778 |
ELSIF metricname = 'lines.blank' THEN blanklines := metricvalue;
|
|
|
779 |
ELSIF metricname = 'lines.code' THEN codelines := metricvalue;
|
|
|
780 |
ELSIF metricname = 'lines.comment' THEN commentlines := metricvalue;
|
|
|
781 |
END IF;
|
|
|
782 |
END LOOP;
|
|
|
783 |
|
|
|
784 |
IF (pvid > 0)
|
|
|
785 |
THEN
|
|
|
786 |
-- Delete any existing entries for this package version to makes sure our data is untainted
|
|
|
787 |
DELETE FROM package_metrics pm
|
|
|
788 |
WHERE pm.pv_id = pvid;
|
|
|
789 |
|
|
|
790 |
-- Insert the new data into the metrics table
|
|
|
791 |
INSERT INTO package_metrics
|
|
|
792 |
(pv_id, branches, branch_list, code_files, ignored_files, directories, directory_depth,
|
|
|
793 |
total_files, makefiles, blank_lines, code_lines, comment_lines, created_stamp
|
|
|
794 |
)
|
|
|
795 |
VALUES (pvid, branches, branchlist, codefiles, ignoredfiles, directories, directorydepth,
|
|
|
796 |
totalfiles, makefiles, blanklines, codelines, commentlines, ora_sysdatetime
|
|
|
797 |
);
|
|
|
798 |
|
|
|
799 |
-- Now update the Release_Metrics Table
|
|
|
800 |
update_release_metrics(rtagid);
|
|
|
801 |
|
|
|
802 |
RETURN return_insert_success;
|
|
|
803 |
ELSE
|
|
|
804 |
RETURN return_insert_error;
|
|
|
805 |
END IF;
|
|
|
806 |
END;
|
|
|
807 |
|
|
|
808 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
809 |
PROCEDURE update_release_metrics (rtagid IN NUMBER)
|
|
|
810 |
IS
|
|
|
811 |
totalpackages NUMBER;
|
|
|
812 |
autobuilt NUMBER;
|
|
|
813 |
linesofcode NUMBER;
|
|
|
814 |
unittested NUMBER;
|
|
|
815 |
autotested NUMBER;
|
|
|
816 |
numOfbranches NUMBER;
|
|
|
817 |
lastbuildtime DATE;
|
|
|
818 |
BEGIN
|
|
|
819 |
IF (rtagid > 0)
|
|
|
820 |
THEN
|
|
|
821 |
-- Get the total number of packages in this release and the number of
|
|
|
822 |
-- those that are autobuilt
|
|
|
823 |
SELECT COUNT (DISTINCT rc.pv_id),
|
|
|
824 |
COUNT (DISTINCT autobuilt_qry.pv_id)
|
|
|
825 |
INTO totalpackages, autobuilt
|
|
|
826 |
FROM release_content rc,
|
|
|
827 |
package_versions pv,
|
|
|
828 |
(
|
|
|
829 |
SELECT rc.pv_id
|
|
|
830 |
FROM release_content rc,
|
|
|
831 |
package_versions pv
|
|
|
832 |
WHERE pv.is_autobuildable = 'Y'
|
|
|
833 |
AND pv.pv_id = rc.pv_id
|
|
|
834 |
AND rc.rtag_id = rtagid
|
|
|
835 |
) autobuilt_qry
|
|
|
836 |
WHERE pv.pv_id = rc.pv_id
|
|
|
837 |
AND rc.rtag_id = rtagid
|
|
|
838 |
AND autobuilt_qry.pv_id (+) = rc.pv_id;
|
|
|
839 |
|
|
|
840 |
-- Get the build time of the last package built in this release and the
|
|
|
841 |
-- total number of lines of code
|
|
|
842 |
SELECT MAX(pm.created_stamp),
|
|
|
843 |
SUM(pm.code_lines)
|
|
|
844 |
INTO lastbuildtime, linesofcode
|
|
|
845 |
FROM package_metrics pm, release_content rc
|
|
|
846 |
WHERE pm.pv_id = rc.pv_id
|
|
|
847 |
AND rc.rtag_id = rtagid;
|
|
|
848 |
|
|
|
849 |
-- Get the number of packages with unit tests in this release and the
|
|
|
850 |
-- number of those that are autotested
|
|
|
851 |
SELECT COUNT(DISTINCT ut.pv_id),
|
|
|
852 |
COUNT(DISTINCT autotest_qry.pv_id)
|
|
|
853 |
INTO unittested, autotested
|
|
|
854 |
FROM unit_tests ut,
|
|
|
855 |
release_content rc,
|
|
|
856 |
(
|
|
|
857 |
SELECT ut.pv_id
|
|
|
858 |
FROM unit_tests ut, release_content rc
|
|
|
859 |
WHERE ut.pv_id = rc.pv_id
|
|
|
860 |
AND rc.rtag_id = rtagid
|
|
|
861 |
AND ut.test_types_fk = 7
|
|
|
862 |
) autotest_qry
|
|
|
863 |
WHERE ut.pv_id = rc.pv_id
|
|
|
864 |
AND rc.rtag_id = rtagid
|
|
|
865 |
AND autotest_qry.pv_id (+) = ut.pv_id;
|
|
|
866 |
|
|
|
867 |
-- Count the number of unique branches in the packages in this release.
|
|
|
868 |
-- SELECT COUNT(DISTINCT branch) INTO numOfbranches
|
|
|
869 |
-- FROM (
|
|
|
870 |
-- SELECT pv_id,
|
|
|
871 |
-- regexp_substr(str, '[^,]+', 1, level) branch,
|
|
|
872 |
-- level lv,
|
|
|
873 |
-- lag(level, 1, 0) over (partition by pv_id order by level) lg
|
|
|
874 |
-- FROM (
|
|
|
875 |
-- SELECT pm.pv_id,
|
|
|
876 |
-- ','||pm.branch_list str
|
|
|
877 |
-- FROM package_metrics pm,
|
|
|
878 |
-- release_content rc
|
|
|
879 |
-- WHERE pm.pv_id = rc.pv_id
|
|
|
880 |
-- AND rc.rtag_id = rtagid
|
|
|
881 |
-- )
|
|
|
882 |
-- CONNECT BY regexp_substr(str, '[^,]+', 1, LEVEL) IS NOT NULL
|
|
|
883 |
-- )
|
|
|
884 |
-- WHERE lv != lg;
|
|
|
885 |
|
|
|
886 |
UPDATE release_metrics rm
|
|
|
887 |
SET rm.total_packages = totalpackages,
|
|
|
888 |
rm.autobuilt = autobuilt,
|
|
|
889 |
rm.lines_of_code = linesofcode,
|
|
|
890 |
rm.unit_tested = unittested,
|
|
|
891 |
rm.autotested = autotested,
|
|
|
892 |
-- rm.branches = numOfbranches,
|
|
|
893 |
rm.last_build_time = lastbuildtime
|
|
|
894 |
WHERE rtag_id = rtagid;
|
|
|
895 |
|
|
|
896 |
IF (SQL%ROWCOUNT = 0)
|
|
|
897 |
THEN
|
|
|
898 |
INSERT INTO release_metrics
|
|
|
899 |
(rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
|
|
|
900 |
autotested, last_build_time
|
|
|
901 |
)
|
|
|
902 |
VALUES (rtagid, totalpackages, autobuilt, linesofcode, unittested,
|
|
|
903 |
autotested, lastbuildtime
|
|
|
904 |
);
|
|
|
905 |
END IF;
|
|
|
906 |
-- IF (SQL%ROWCOUNT = 0)
|
|
|
907 |
-- THEN
|
|
|
908 |
-- INSERT INTO release_metrics
|
|
|
909 |
-- (rtag_id, total_packages, autobuilt, lines_of_code, unit_tested,
|
|
|
910 |
-- autotested, branches, last_build_time
|
|
|
911 |
-- )
|
|
|
912 |
-- VALUES (rtagid, totalpackages, autobuilt, linesofcode, unittested,
|
|
|
913 |
-- autotested, numOfbranches, lastbuildtime
|
|
|
914 |
-- );
|
|
|
915 |
-- END IF;
|
|
|
916 |
-- ELSE
|
|
|
917 |
-- raise_application_error (-20000, 'RtagId must be supplied.');
|
|
|
918 |
END IF;
|
|
|
919 |
END;
|
|
|
920 |
/*-------------------------------------------------------------------------------------------------------*/
|
|
|
921 |
END pk_rmapi;
|
|
|
922 |
/
|
|
|
923 |
ALTER PACKAGE "RELEASE_MANAGER"."PK_RMAPI"
|
|
|
924 |
COMPILE BODY
|
|
|
925 |
PLSQL_OPTIMIZE_LEVEL= 2
|
|
|
926 |
PLSQL_CODE_TYPE= INTERPRETED
|
|
|
927 |
PLSQL_DEBUG= TRUE
|
|
|
928 |
REUSE SETTINGS TIMESTAMP '2008-05-09 14:47:11'
|
|
|
929 |
/
|