[Home] [Help]
PACKAGE BODY: APPS.XLA_TAB_PKG
Source
1 PACKAGE BODY xla_tab_pkg AS
2 /* $Header: xlatbtab.pkb 120.2 2005/04/28 18:45:45 masada ship $ */
3 /*======================================================================+
4 | Copyright (c) 1995-2002 Oracle Corporation |
5 | Redwood Shores, CA, USA |
6 | All rights reserved. |
7 +=======================================================================+
8 | PACKAGE NAME |
9 | xla_tab_pkg |
10 | |
11 | DESCRIPTION |
12 | Transaction Account Builder API |
13 | |
14 | HISTORY |
15 | |
16 | 26-JAN-04 A. Quaglia Created |
17 | 28-JUL-04 A. Quaglia Changed message tokens |
18 | run: |
19 | added logic to derive token values |
20 | |
21 +======================================================================*/
22
23 -- Private exceptions
24
25 le_fatal_error EXCEPTION;
26
27
28 --Public constants
29 C_RET_STS_SUCCESS CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
30 C_RET_STS_ERROR CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_ERROR;
31 C_RET_STS_UNEXP_ERROR CONSTANT VARCHAR2(1) := FND_API.G_RET_STS_UNEXP_ERROR;
32 C_FALSE CONSTANT VARCHAR2(1) := FND_API.G_FALSE;
33 C_TRUE CONSTANT VARCHAR2(1) := FND_API.G_TRUE;
34
35
36 --Private constants
37 C_API_VERSION CONSTANT NUMBER := 1;
38 C_PACKAGE_NAME CONSTANT VARCHAR2(30) := 'XLA_TAB_PKG';
39
40 G_COMPILE_STATUS_YES CONSTANT VARCHAR2(1) := 'Y';
41 G_COMPILE_STATUS_NO CONSTANT VARCHAR2(1) := 'N';
42 G_COMPILE_STATUS_RUNNING CONSTANT VARCHAR2(1) := 'R';
43 G_COMPILE_STATUS_ERROR CONSTANT VARCHAR2(1) := 'E';
44
45 G_DEFAULT_AMB_CONTEXT CONSTANT VARCHAR2(30) := 'DEFAULT';
46
47
48 -- Private variables
49 g_application_info xla_cmp_common_pkg.lt_application_info;
50
51
52 --=============================================================================
53 -- *********** Local Trace Routine **********
54 --=============================================================================
55 C_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
56 C_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
57 C_LEVEL_EVENT CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
58 C_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
59 C_LEVEL_ERROR CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
60 C_LEVEL_UNEXPECTED CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
61
62 C_LEVEL_LOG_DISABLED CONSTANT NUMBER := 99;
63 C_DEFAULT_MODULE CONSTANT VARCHAR2(240) := 'xla.plsql.xla_tab_pkg';
64
65 g_log_level NUMBER;
66 g_log_enabled BOOLEAN;
67
68 --1-STATEMENT, 2-PROCEDURE, 3-EVENT, 4-EXCEPTION, 5-ERROR, 6-UNEXPECTED
69
70 PROCEDURE trace
71 ( p_module IN VARCHAR2 DEFAULT C_DEFAULT_MODULE
72 ,p_msg IN VARCHAR2
73 ,p_level IN NUMBER
74 ) IS
75 BEGIN
76 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
77 fnd_log.message(p_level, p_module);
78 ELSIF p_level >= g_log_level THEN
79 fnd_log.string(p_level, p_module, p_msg);
80 END IF;
81
82 EXCEPTION
83 WHEN xla_exceptions_pkg.application_exception THEN
84 RAISE;
85 WHEN OTHERS THEN
86 xla_exceptions_pkg.raise_message
87 (p_location => 'xla_tab_pkg.trace');
88 END trace;
89
90
91
92 PROCEDURE run
93 (
94 p_api_version IN NUMBER
95 ,p_application_id IN NUMBER
96 ,p_account_definition_type_code IN VARCHAR2
97 ,p_account_definition_code IN VARCHAR2
98 ,p_transaction_coa_id IN NUMBER
99 ,p_mode IN VARCHAR2
100 ,x_return_status OUT NOCOPY VARCHAR2
101 ,x_msg_count OUT NOCOPY NUMBER
102 ,x_msg_data OUT NOCOPY VARCHAR2
103 )
104 IS
105 l_compile_status_code VARCHAR2( 1);
106 l_tad_coa_id NUMBER;
107 l_tad_coa_name VARCHAR2(80);
108 l_transaction_coa_name VARCHAR2(80);
109 l_tad_name VARCHAR2(80);
110 l_amb_context_code VARCHAR2(30);
111 l_tad_package_name VARCHAR2(30);
112 l_tad_procedure_name VARCHAR2(30);
113 l_dynamic_sql VARCHAR2(5000);
114 l_return_status VARCHAR2(1);
115 l_msg_count NUMBER;
116 l_msg_data VARCHAR2(2000);
117
118 l_return_msg_name VARCHAR2(30);
119 l_log_module VARCHAR2 (2000);
120 BEGIN
121 IF g_log_enabled THEN
122 l_log_module := C_DEFAULT_MODULE||'.run';
123 END IF;
124
125 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
126 trace
127 (p_module => l_log_module
128 ,p_msg => 'BEGIN ' || l_log_module
129 ,p_level => C_LEVEL_PROCEDURE);
130 END IF;
131
132 IF NOT FND_API.Compatible_API_Call
133 (
134 p_current_version_number => C_API_VERSION
135 ,p_caller_version_number => p_api_version
136 ,p_api_name => 'write_online_tab'
137 ,p_pkg_name => C_PACKAGE_NAME
138 )
139 THEN
140 IF (C_LEVEL_UNEXPECTED >= g_log_level) THEN
141 trace
142 ( p_module => l_log_module
143 ,p_msg => 'Incompatible API versions!'
144 ,p_level => C_LEVEL_UNEXPECTED);
145 trace
146 (p_module => l_log_module
147 ,p_msg => 'Current version: ' || C_API_VERSION
148 ,p_level => C_LEVEL_UNEXPECTED);
149 trace
150 ( p_module => l_log_module
151 ,p_msg => 'Caller version: ' || p_api_version
152 ,p_level => C_LEVEL_UNEXPECTED);
153 END IF;
154 l_return_status := C_RET_STS_UNEXP_ERROR;
155 l_return_msg_name := 'XLA_TAB_INCOMP_API_VERSION';
156 RAISE le_fatal_error;
157 END IF;
158
159 BEGIN
160 --Get the chart of accounts name
161 SELECT id_flex_structure_name
162 INTO l_transaction_coa_name
163 FROM fnd_id_flex_structures_vl ffsvl
164 WHERE ffsvl.application_id = 101
165 AND ffsvl.id_flex_code = 'GL#'
166 AND ffsvl.id_flex_num = p_transaction_coa_id;
167 EXCEPTION
168 WHEN NO_DATA_FOUND
169 THEN
170 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
171 trace
172 (p_msg => 'EXCEPTION:'
173 ,p_level => C_LEVEL_EXCEPTION);
174 trace
175 (p_msg => 'The specified Chart Of accounts Id cannot be found.'
176 ,p_level => C_LEVEL_EXCEPTION);
177 trace
178 ( p_msg => 'p_transaction_coa_id : '
179 || p_transaction_coa_id
180 ,p_level => C_LEVEL_ERROR);
181 END IF;
182 l_return_status := C_RET_STS_UNEXP_ERROR;
183
184 fnd_message.set_name
185 (
186 application => 'XLA'
187 ,name => 'XLA_TAB_COA_NOT_FOUND'
188 );
189 fnd_message.set_token
190 (
191 token => 'STRUCTURE_ID'
192 ,value => p_transaction_coa_id
193 );
194 fnd_msg_pub.add;
195 RAISE le_fatal_error;
196 END;
197
198 --Retrieve and set the application info
199 IF NOT xla_cmp_common_pkg.get_application_info
200 (
201 p_application_id => p_application_id
202 ,p_application_info => g_application_info
203 )
204 THEN
205 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
206 trace
207 (p_msg => 'EXCEPTION:' ||
208 ' Cannot read application info, aborting...'
209 ,p_level => C_LEVEL_EXCEPTION);
210 END IF;
211 l_return_status := C_RET_STS_UNEXP_ERROR;
212 l_return_msg_name := 'XLA_TAB_CANT_READ_APP_INFO';
213 RAISE le_fatal_error;
214 END IF;
215
216 --Retrieve the AMB context code
217 l_amb_context_code := NVL( fnd_profile.value('XLA_AMB_CONTEXT')
218 ,G_DEFAULT_AMB_CONTEXT
219 );
220
221 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
222 trace
223 (p_msg => 'Current AMB context code: ' || l_amb_context_code
224 ,p_level => C_LEVEL_STATEMENT);
225 END IF;
226
227 --Retrieve the compilation status of the TAD and the chart of accounts id
228 BEGIN
229 SELECT compile_status_code
230 ,chart_of_accounts_id
231 ,name
232 INTO l_compile_status_code
233 ,l_tad_coa_id
234 ,l_tad_name
235 FROM xla_tab_acct_defs_vl xtd
236 WHERE xtd.application_id = g_application_info.application_id
237 AND xtd.account_definition_code = p_account_definition_code
238 AND xtd.account_definition_type_code = p_account_definition_type_code
239 AND xtd.amb_context_code = l_amb_context_code;
240
241 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
242 trace
243 (p_module => l_log_module
244 ,p_msg => 'TAD Compile status: ' || l_compile_status_code
245 ,p_level => C_LEVEL_STATEMENT);
246 trace
247 (p_module => l_log_module
248 ,p_msg => 'TAD Chart of Accounts Id: '
249 || l_tad_coa_id
250 ,p_level => C_LEVEL_STATEMENT);
251 END IF;
252
253 --If not compiled or compiled in error try to compile it
254 IF l_compile_status_code = G_COMPILE_STATUS_NO
255 OR l_compile_status_code = G_COMPILE_STATUS_ERROR
256 THEN
257 --If compilation failed abort
258 IF NOT xla_cmp_tad_pkg.compile_tad_AUTONOMOUS
259 ( p_application_id => 222
260 ,p_account_definition_code => p_account_definition_code
261 ,p_account_definition_type_code => p_account_definition_type_code
262 ,p_amb_context_code => l_amb_context_code
263 )
264 THEN
265 IF (C_LEVEL_ERROR >= g_log_level) THEN
266 trace
267 ( p_msg => 'ERROR:'
268 ,p_level => C_LEVEL_ERROR);
269 trace
270 ( p_msg => 'The TAD is not compiled and the '
271 || 'recompilation fails.'
272 ,p_level => C_LEVEL_ERROR);
273 trace
274 ( p_msg => 'Please go to the Transaction Account '
275 || 'Definition Setup page and recompile it' ||
276 ' manually'
277 ,p_level => C_LEVEL_ERROR);
278 trace
279 ( p_msg => 'p_account_definition_code : '
280 || p_account_definition_code
281 ,p_level => C_LEVEL_ERROR);
282 trace
283 ( p_msg => 'p_account_definition_type_code: '
284 || p_account_definition_type_code
285 ,p_level => C_LEVEL_ERROR);
286 trace
287 ( p_msg => 'amb_context_code : '
288 || l_amb_context_code
289 ,p_level => C_LEVEL_ERROR);
290 END IF;
291 l_return_msg_name := 'XLA_TAB_CANT_COMPILE_TAD';
292 l_return_status := C_RET_STS_ERROR;
293 RAISE le_fatal_error;
294 END IF;
295 --
296 ELSIF l_compile_status_code = G_COMPILE_STATUS_RUNNING
297 THEN
298 IF (C_LEVEL_ERROR >= g_log_level) THEN
299 trace
300 ( p_msg => 'ERROR:'
301 ,p_level => C_LEVEL_ERROR);
302 trace
303 ( p_msg => 'The TAD is being recompiled. Try again later.'
304 ,p_level => C_LEVEL_ERROR);
305 trace
306 ( p_msg => 'p_account_definition_code : '
307 || p_account_definition_code
308 ,p_level => C_LEVEL_ERROR);
309 trace
310 ( p_msg => 'p_account_definition_type_code: '
311 || p_account_definition_type_code
312 ,p_level => C_LEVEL_ERROR);
313 trace
314 ( p_msg => 'amb_context_code : '
315 || l_amb_context_code
316 ,p_level => C_LEVEL_ERROR);
317 END IF;
318 l_return_msg_name := 'XLA_TAB_TAD_COMP_RUNNING';
319 l_return_status := C_RET_STS_ERROR;
320 RAISE le_fatal_error;
321 END IF;
322 EXCEPTION
323 WHEN NO_DATA_FOUND
324 THEN
325 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
326 trace
327 (p_msg => 'EXCEPTION:'
328 ,p_level => C_LEVEL_EXCEPTION);
329 trace
330 (p_msg => 'The specified TAD cannot be found '
331 || 'in the table xla_tab_acct_defs_b:'
332 ,p_level => C_LEVEL_EXCEPTION);
333 trace
334 ( p_msg => 'p_account_definition_code : '
335 || p_account_definition_code
336 ,p_level => C_LEVEL_ERROR);
337 trace
338 ( p_msg => 'p_account_definition_type_code: '
339 || p_account_definition_type_code
340 ,p_level => C_LEVEL_ERROR);
341 trace
342 ( p_msg => 'amb_context_code : '
343 || l_amb_context_code
344 ,p_level => C_LEVEL_ERROR);
345 END IF;
346 l_return_status := C_RET_STS_UNEXP_ERROR;
347
348 DECLARE
349 l_amb_context_meaning VARCHAR2(80);
350 l_owner_meaning VARCHAR2(80);
351 BEGIN
352 --Try to get the meaning of the amb context code
353 BEGIN
354 l_amb_context_meaning := xla_lookups_pkg.get_meaning
355 (
356 p_lookup_type => 'XLA_AMB_CONTEXT_TYPE'
357 ,p_lookup_code => l_amb_context_code
358 );
359 EXCEPTION
360 --If not possible use the amb context code
361 WHEN OTHERS
362 THEN
363 l_amb_context_meaning := l_amb_context_code;
364 END;
365 --Try to get the meaning of the owner
366 BEGIN
367
368 l_owner_meaning := xla_lookups_pkg.get_meaning
369 (
370 p_lookup_type => 'XLA_OWNER_TYPE'
371 ,p_lookup_code => p_account_definition_type_code
372 );
373 EXCEPTION
374 --If not possible use the the type_code
375 WHEN OTHERS
376 THEN
377 l_owner_meaning := p_account_definition_type_code;
378 END;
379
380 fnd_message.set_name
381 (
382 application => 'XLA'
383 ,name => 'XLA_TAB_CANT_FIND_TAD'
384 );
385 fnd_message.set_token
386 (
387 token => 'AMB_CONTEXT'
388 ,value => l_amb_context_meaning
389 );
390 fnd_message.set_token
391 (
392 token => 'OWNER'
393 ,value => l_owner_meaning
394 );
395 fnd_message.set_token
396 (
397 token => 'TRX_ACCT_DEF_CODE'
398 ,value => p_account_definition_code
399 );
400 fnd_msg_pub.add;
401
402 RAISE le_fatal_error;
403 END;
404 END;
405
406 --If the TAD chart of accounts id is not null
407 --and it does not match p_transaction_coa_id
408 IF l_tad_coa_id IS NOT NULL
409 AND l_tad_coa_id <> p_transaction_coa_id
410 THEN
411 BEGIN
412 --Get the tad chart of accounts name
413 SELECT id_flex_structure_name
414 INTO l_tad_coa_name
415 FROM fnd_id_flex_structures_vl ffsvl
416 WHERE ffsvl.application_id = 101
417 AND ffsvl.id_flex_code = 'GL#'
418 AND ffsvl.id_flex_num = l_tad_coa_id;
419
420
421 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
422 trace
423 (p_msg => 'EXCEPTION:'
424 ,p_level => C_LEVEL_EXCEPTION);
425 trace
426 (p_msg => 'TAD coa id and p_transaction_coa_id cannot differ'
427 ,p_level => C_LEVEL_EXCEPTION);
428 trace
429 (p_msg => 'l_tad_coa_id = ' || l_tad_coa_id
430 ,p_level => C_LEVEL_EXCEPTION);
431 trace
432 (p_msg => 'p_transaction_coa_id = ' || p_transaction_coa_id
433 ,p_level => C_LEVEL_EXCEPTION);
434 END IF;
435
436 fnd_message.set_name
437 (
438 application => 'XLA'
439 ,name => 'XLA_TAB_TAD_COA_DIFF_TRANS_COA'
440 );
441 fnd_message.set_token
442 (
443 token => 'TRX_ACCT_DEF'
444 ,value => l_tad_name
445 );
446 fnd_message.set_token
447 (
448 token => 'STRUCTURE_NAME'
449 ,value => l_tad_coa_name
450 );
451 fnd_msg_pub.add;
452 RAISE le_fatal_error;
453 END;
454
455 END IF;
456
457 --Build the package name
458 IF NOT xla_cmp_tad_pkg.get_tad_package_name
459 (
460 p_application_id => p_application_id
461 ,p_account_definition_code => p_account_definition_code
462 ,p_account_definition_type_code => p_account_definition_type_code
463 ,p_amb_context_code => l_amb_context_code
464 ,p_tad_package_name => l_tad_package_name
465 )
466 THEN
467 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
468 trace
469 (p_msg => 'EXCEPTION:' ||
470 'get_tad_package_name failed'
471 ,p_level => C_LEVEL_EXCEPTION);
472 END IF;
473 x_return_status := C_RET_STS_UNEXP_ERROR;
474 RAISE le_fatal_error;
475 END IF;
476
477 IF p_mode = 'ONLINE'
478 THEN
479 l_tad_procedure_name := 'trans_account_def_online';
480 ELSIF p_mode = 'BATCH'
481 THEN
482 l_tad_procedure_name := 'trans_account_def_batch';
483 ELSE
484 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
485 trace
486 (p_msg => 'EXCEPTION:' ||
487 'Invalid p_mode:' || p_mode
488 ,p_level => C_LEVEL_EXCEPTION);
489 END IF;
490 --Set the message on the stack
491 fnd_message.set_name
492 (
493 application => 'XLA'
494 ,name => 'XLA_TAB_INVALID_MODE'
495 );
496 fnd_message.set_token
497 (
498 token => 'FUNCTION_NAME'
499 ,value => 'XLA_TAB_PKG.run'
500 );
501 fnd_message.set_token
502 (
503 token => 'MODE'
504 ,value => NVL(p_mode, '(NULL)')
505 );
506 --Add the message to the stack
507 fnd_msg_pub.add;
508 --Raise a local exception
509 RAISE le_fatal_error;
510 END IF;
511
512 l_dynamic_sql :=
513 'BEGIN ' || l_tad_package_name || '.' || l_tad_procedure_name
514 || '
515 (
516 p_transaction_coa_id => :1
517 ,p_accounting_coa_id => :2
518 ,x_return_status => :3
519 ,x_msg_count => :4
520 ,x_msg_data => :5
521 );
522 END;
523 ';
524
525 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
526
527 trace
528 (p_msg => 'Dynamic sql'
529 ,p_level => C_LEVEL_STATEMENT);
530
531 xla_cmp_common_pkg.dump_text
532 (
533 p_text => l_dynamic_sql
534 );
535 END IF;
536
537 --execute the dynamic SQL in an anonymous block
538 BEGIN
539 EXECUTE IMMEDIATE l_dynamic_sql
540 USING IN p_transaction_coa_id
541 ,IN p_transaction_coa_id
542 ,OUT l_return_status
543 ,OUT l_msg_count
544 ,OUT l_msg_data;
545
546 EXCEPTION
547 WHEN OTHERS
548 THEN
549
550 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
551 trace
552 (p_msg => 'EXCEPTION:' ||
553 'The TAD procedure '
554 ,p_level => C_LEVEL_EXCEPTION);
555 trace
556 (p_msg => 'EXCEPTION:' ||
557 l_tad_package_name || '.' || l_tad_procedure_name
558 ,p_level => C_LEVEL_EXCEPTION);
559 trace
560 (p_msg => 'EXCEPTION:' ||
561 'could not be invoked because of the following '
562 ,p_level => C_LEVEL_EXCEPTION);
563 trace
564 (p_msg => 'EXCEPTION:' ||
565 'database error: '
566 ,p_level => C_LEVEL_EXCEPTION);
567 trace
568 (p_msg => 'Error message: '|| SQLERRM
569 ,p_level => C_LEVEL_EXCEPTION);
570 END IF;
571 fnd_message.set_name
572 (
573 application => 'XLA'
574 ,name => 'XLA_TAB_CANT_INVOKE_TAD_PROC'
575 );
576 fnd_message.set_token
577 (
578 token => 'PROCEDURE'
579 ,value => l_tad_package_name || '.' || l_tad_procedure_name
580 );
581 fnd_message.set_token
582 (
583 token => 'ERROR'
584 ,value => SQLERRM
585 );
586 fnd_msg_pub.add;
587
588 RAISE le_fatal_error;
589 END;
590
591 --Assign out parameters
592 x_msg_count := NVL(l_msg_count, 0); --NVL for java callers
593 x_msg_data := l_msg_data;
594 x_return_status := l_return_status;
595
596 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
597 trace
598 (p_module => l_log_module
599 ,p_msg => 'END ' || l_log_module
600 ,p_level => C_LEVEL_PROCEDURE);
601 END IF;
602
603 EXCEPTION
604 WHEN le_fatal_error
605 THEN
606 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
607 trace
608 (p_msg => 'EXCEPTION:' ||
609 ' Fatal error, aborting...'
610 ,p_level => C_LEVEL_EXCEPTION);
611 END IF;
612 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
613 trace
614 (p_module => l_log_module
615 ,p_msg => 'END ' || l_log_module
616 ,p_level => C_LEVEL_PROCEDURE);
617 END IF;
618 IF l_return_status IS NULL
619 THEN
620 l_return_status := C_RET_STS_UNEXP_ERROR;
621 END IF;
622 IF l_return_msg_name IS NOT NULL
623 THEN
624 --There is a detailed message to push
625 fnd_message.set_name
626 (
627 application => 'XLA'
628 ,name => l_return_msg_name
629 );
630 fnd_msg_pub.add;
631 END IF;
632 fnd_msg_pub.Count_And_Get
633 (
634 p_count => l_msg_count
635 ,p_data => l_msg_data
636 );
637 --for Forms callers
638 fnd_message.set_encoded
639 (
640 encoded_message => l_msg_data
641 );
642 --Assign out parameters
643 x_msg_count := NVL(l_msg_count, 0); --NVL for java callers
644 x_msg_data := l_msg_data;
645 x_return_status := l_return_status;
646
647 WHEN xla_exceptions_pkg.application_exception
648 THEN
649 RAISE;
650 WHEN OTHERS
651 THEN
652 xla_exceptions_pkg.raise_message
653 (p_location => 'xla_tab_pkg.run');
654
655 END run;
656
657
658
659
660 --Trace initialization
661 BEGIN
662 g_log_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
663 g_log_enabled := fnd_log.test
664 (log_level => g_log_level
665 ,module => C_DEFAULT_MODULE);
666
667 IF NOT g_log_enabled THEN
668 g_log_level := C_LEVEL_LOG_DISABLED;
669 END IF;
670
671 END xla_tab_pkg;