DBA Data[Home] [Help]

PACKAGE BODY: APPS.FA_CMP_STRING_PKG

Source


1 PACKAGE BODY fa_cmp_string_pkg AS
2 /* $Header: facpstrb.pls 120.0 2006/03/06 22:15:17 bridgway noship $   */
3 /*===========================================================================+
4 |             Copyright (c) 2001-2002 Oracle Corporation                     |
5 |                       Redwood Shores, CA, USA                              |
6 |                         All rights reserved.                               |
7 +============================================================================+
8 | PACKAGE NAME                                                               |
9 |     fa_cmp_string_pkg                                                      |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |     This is a FA private package, which contains all the logic required    |
13 |     to handle the text generated by the compiler                           |
14 |                                                                            |
15 | HISTORY                                                                    |
16 |     25-FEB-2006 BRIDGWAY    Created                                        |
17 +===========================================================================*/
18 
19 --+==========================================================================+
20 --|                                                                          |
21 --| OVERVIEW of private procedures and functions                             |
22 --|                                                                          |
23 --+==========================================================================+
24 
25 g_Max_line            CONSTANT NUMBER        := 255;
26 g_chr_quote           CONSTANT VARCHAR2(9)   := '''';
27 g_chr_space           CONSTANT VARCHAR2(9)   := ' ';
28 G_MAX_PACKAGE_LINE_LENGTH CONSTANT INTEGER := 255;
29 
30 --=============================================================================
31 --               *********** Local Trace Routine **********
32 --=============================================================================
33 
34 G_CURRENT_RUNTIME_LEVEL        NUMBER := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
35 
36 G_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
37 G_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
38 G_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
39 G_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
40 G_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
41 G_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
42 
43 G_MODULE_NAME         CONSTANT VARCHAR2(50):= 'fa.plsql.fa_cmp_string_pkg';
44 
45 --+==========================================================================+
46 --|                                                                          |
47 --| PUBLIC Function                                                          |
48 --|                                                                          |
49 --+==========================================================================+
50 
51 FUNCTION  ConcatTwoStrings (
52                    p_array_string_1           IN DBMS_SQL.VARCHAR2S
53                   ,p_array_string_2           IN DBMS_SQL.VARCHAR2S
54 ) RETURN DBMS_SQL.VARCHAR2S IS
55 
56    l_array_string       DBMS_SQL.VARCHAR2S;
57    l_Index              BINARY_INTEGER;
58    l_procedure_name  varchar2(80) := 'ConcatTwoStrings';
59 
60 BEGIN
61 
62    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
63       fnd_log.string(G_LEVEL_PROCEDURE,
64                      G_MODULE_NAME||l_procedure_name||'.begin',
65                      'Beginning of procedure');
66    END IF;
67 
68 
69    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
70       fnd_log.string(G_LEVEL_STATEMENT,
71                      G_MODULE_NAME||l_procedure_name,
72                      'LENGTH string 1 = '||p_array_string_1.COUNT);
73       fnd_log.string(G_LEVEL_STATEMENT,
74                      G_MODULE_NAME||l_procedure_name,
75                      'LENGTH string 2 = '||p_array_string_2.COUNT);
76    END IF;
77 
78    l_array_string := p_array_string_1;
79 
80    IF p_array_string_2.COUNT > 0 THEN
81 
82       l_Index        := NVL(l_array_string.LAST,0);
83 
84       FOR Idx IN p_array_string_2.FIRST .. p_array_string_2.LAST LOOP
85 
86         IF p_array_string_2.EXISTS(Idx) THEN
87 
88            l_Index                 := l_Index + 1;
89            l_array_string(l_Index) := p_array_string_2(Idx);
90 
91         END IF;
92 
93       END LOOP;
94 
95    END IF;
96 
97    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
98       fnd_log.string(G_LEVEL_STATEMENT,
99                      G_MODULE_NAME||l_procedure_name,
100                      'LENGTH result = '||l_array_string.COUNT);
101    END IF;
102 
103    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
104       fnd_log.string(G_LEVEL_PROCEDURE,
105                      G_MODULE_NAME||l_procedure_name||'.end',
106                      'End of procedure');
107    END IF;
108 
109    RETURN l_array_string;
110 
111 EXCEPTION
112    WHEN OTHERS    THEN
113         IF (G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL ) THEN
114            fnd_message.set_name('OFA','FA_SHARED_ORACLE_ERR');
115            fnd_message.set_token('ORACLE_ERR',SQLERRM);
116            FND_LOG.MESSAGE (G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_procedure_name,TRUE);
117         END IF;
118         raise;
119 
120 END ConcatTwoStrings;
121 
122 
123 --+==========================================================================+
124 --| PRIVATE procedures and functions                                         |
125 --|    CreateString                                                          |
126 --|    transforms CLOB lines (length > 255) into a list of lines not         |
127 --|    exceeding 255 characters                                              |
128 --|                                                                          |
129 --|    Modified this procedure to improve performance bug 3918467            |
130 --+==========================================================================+
131 
132 PROCEDURE CreateString
133         (p_package_text  IN  CLOB
134         ,p_array_string  OUT NOCOPY DBMS_SQL.VARCHAR2S) IS
135 
136    l_Text                VARCHAR2(32000);
137    l_SubText             VARCHAR2(256);
138 
139    l_MaxLine             NUMBER   := 255;
140 
141    l_NewLine             BOOLEAN;
142    l_Literal             BOOLEAN;
143    l_Space               BOOLEAN;
144 
145    l_pos                 NUMBER         ;
146 
147    l_Idx                 BINARY_INTEGER;
148    l_array_string        DBMS_SQL.VARCHAR2S;
149    l_procedure_name      varchar2(80) := 'CreateString';
150 
151    l_clob_string         CLOB;
152    l_maxLength           NUMBER := 8000;
153 
154    l_length              number;
155    l_iteration           number;
156 
157 BEGIN
158 
159    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
160       fnd_log.string(G_LEVEL_PROCEDURE,
161                      G_MODULE_NAME||l_procedure_name||'.begin',
162                      'Beginning of procedure');
163    END IF;
164 
165    l_clob_string := p_package_text;
166 
167    l_pos       := 0;
168    l_NewLine   := FALSE;
169    l_Literal   := FALSE;
170    l_Space     := FALSE;
171    l_Idx       := 0;
172 
173    IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
174       fnd_log.string(G_LEVEL_STATEMENT,
175                      G_MODULE_NAME||l_procedure_name,
176                      'Begin looping....');
177    END IF;
178 
179    WHILE length(l_clob_string) > 0 LOOP
180 
181       l_text := substr(l_clob_string,1,l_maxLength);
182 
183       WHILE ( LENGTH(l_Text) >= l_MaxLine ) LOOP
184          BEGIN
185 
186             l_SubText   := SUBSTR(l_Text,1,l_MaxLine);
187             l_pos       := INSTR(l_SubText,g_chr_newline,1,1);
188 
189             IF l_pos = 0 THEN
190                l_NewLine := FALSE;
191                l_pos := INSTR(l_SubText,g_chr_quote,1,1);
192                IF l_pos = 0 THEN
193                   l_Literal := FALSE;
194                   l_pos     := INSTR(l_SubText,g_chr_space,1,1);
195                   l_Space   := (l_pos = 0);
196                ELSE
197                   l_Literal := TRUE;
198                END IF;
199             ELSE
200                l_NewLine := TRUE;
201             END IF;
202 
203             IF l_newline THEN
204                l_Idx                  := l_Idx + 1;
205                l_array_string(l_Idx)  := SUBSTR(l_SubText,1,l_pos);
206                l_Text                 := SUBSTR(l_Text,l_pos + 1);
207             ELSIF l_Literal THEN
208                l_Idx                  := l_Idx + 1;
209                l_array_string(l_Idx)  := SUBSTR(l_SubText,1,l_pos-1) || g_chr_newline;
210                l_Text                 := SUBSTR(l_Text,l_pos);
211             ELSIF l_Space   THEN
212                l_Idx                  := l_Idx + 1;
213                l_array_string(l_Idx)  := SUBSTR(l_SubText,1,l_pos-1) || g_chr_newline;
214                l_Text                 := SUBSTR(l_Text,l_pos + 1);
215             ELSE
216                l_Idx                  := l_Idx + 1;
217                l_array_string(l_Idx)  := l_SubText;
218                l_Text                 := SUBSTR(l_Text,l_MaxLine + 1);
219             END IF;
220          END;
221       END LOOP;
222 
223       IF (length(l_clob_string)-l_maxLength) >= 0 THEN
224          l_clob_string := substr(l_clob_string,(l_maxLength - length(l_Text) + 1));
225       ELSE
226          l_clob_string := NULL;
227          l_Idx                 := l_Idx + 1;
228          l_array_string(l_Idx) := l_Text;
229       END IF;
230 
231    END LOOP;
232 
233    p_array_string := l_array_string;
234 
235    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
236       fnd_log.string(G_LEVEL_PROCEDURE,
237                      G_MODULE_NAME||l_procedure_name||'.end',
238                      'End of procedure');
239    END IF;
240 
241 END CreateString;
242 
243 --+==========================================================================+
244 --| PRIVATE procedures and functions                                         |
245 --|    AddNewLine                                                            |
246 --|    transforms CLOB lines (length > 255) into a list of lines not         |
247 --|    exceeding 255 characters                                              |
248 --|                                                                          |
249 --|                                                                          |
250 --+==========================================================================+
251 
252 PROCEDURE AddNewLine(p_array_string  IN  OUT NOCOPY DBMS_SQL.VARCHAR2S) IS
253 
254    l_Idx                 BINARY_INTEGER;
255    l_array_string        DBMS_SQL.VARCHAR2S;
256    l_procedure_name      varchar2(80) := 'AddNewLine';
257 
258 BEGIN
259 
260    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
261       fnd_log.string(G_LEVEL_PROCEDURE,
262                      G_MODULE_NAME||l_procedure_name||'.begin',
263                      'Beginning of procedure');
264    END IF;
265 
266    l_array_string := p_array_string;
267 
268    IF l_array_string.COUNT > 0 THEN
269 
270       FOR Idx IN l_array_string.FIRST .. l_array_string.LAST LOOP
271 
272          IF l_array_string.EXISTS(Idx) THEN
273 
274             IF SUBSTR(l_array_string(Idx),LENGTH(l_array_string(Idx))) <> g_chr_newline THEN
275 
276                l_array_string(Idx) := l_array_string(Idx) || g_chr_newline;
277 
278             END IF;
279 
280          END IF;
281 
282       END LOOP;
283 
284    END IF;
285 
286    p_array_string := l_array_string;
287 
288    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
289       fnd_log.string(G_LEVEL_PROCEDURE,
290                      G_MODULE_NAME||l_procedure_name||'.end',
291                      'End of procedure');
292    END IF;
293 
294 EXCEPTION
295 
296    WHEN OTHERS    THEN
297         IF (G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL ) THEN
298            fnd_message.set_name('OFA','FA_SHARED_ORACLE_ERR');
299            fnd_message.set_token('ORACLE_ERR',SQLERRM);
300            FND_LOG.MESSAGE (G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_procedure_name,TRUE);
301         END IF;
302         raise;
303 
304 END AddNewLine;
305 
309 --|    truncate_lines                                                        |
306 
307 --+==========================================================================+
308 --| PRIVATE procedures and functions                                         |
310 --|    transforms CLOB lines (length > 255) into a list of lines not         |
311 --|    exceeding 255 characters, this constraint was inposed by MRC product  |
312 --|                                                                          |
313 --|                                                                          |
314 --+==========================================================================+
315 
316 PROCEDURE truncate_lines(p_package_text IN OUT NOCOPY CLOB) IS
317 
318 
319    l_Text                CLOB;
320    l_SubText             VARCHAR2(256);
321 
322    l_MaxLine             NUMBER   := g_Max_line;
323 
324    l_NewLine             BOOLEAN;
325    l_Literal             BOOLEAN;
326    l_Space               BOOLEAN;
327 
328    l_pos                 NUMBER         ;
329 
330    l_Output              CLOB;
331    l_procedure_name     varchar2(80) := 'truncate_lines';
332 
333 
334 BEGIN
335 
336    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
337       fnd_log.string(G_LEVEL_PROCEDURE,
338                      G_MODULE_NAME||l_procedure_name||'.begin',
339                      'Beginning of procedure');
340    END IF;
341 
342 
343    l_Text      := p_package_text;
344    l_pos       := 0;
345    l_NewLine   := FALSE;
346    l_Literal   := FALSE;
347    l_Space     := FALSE;
348    l_Output    := NULL;
349 
350    WHILE ( LENGTH(l_Text) >= l_MaxLine ) LOOP
351 
352       BEGIN
353 
354          l_SubText   := SUBSTR(l_Text,1,l_MaxLine);
355          l_pos       := INSTR(l_SubText,g_chr_newline,1,1);
356 
357          IF l_pos = 0 THEN
358 
359             l_NewLine := FALSE;
360             l_pos := INSTR(l_SubText,g_chr_quote,1,1);
361 
362             IF l_pos = 0 THEN
363 
364                l_Literal := FALSE;
365                l_pos     := INSTR(l_SubText,g_chr_space,1,1);
366                l_Space   := (l_pos = 0);
367 
368             ELSE
369 
370                l_Literal := TRUE;
371 
372             END IF;
373 
374          ELSE
375 
376             l_NewLine := TRUE;
377 
378          END IF;
379 
380 
381          IF l_newline THEN
382 
383             l_Output               := l_Output || SUBSTR(l_SubText,1,l_pos);
384             l_Text                 := SUBSTR(l_Text,l_pos + 1);
385 
386          ELSIF l_Literal THEN
387 
388             l_Output               := l_Output || SUBSTR(l_SubText,1,l_pos-1) || g_chr_newline;
389             l_Text                 := SUBSTR(l_Text,l_pos);
390 
391          ELSIF l_Space   THEN
392 
393             l_Output               := l_Output || SUBSTR(l_SubText,1,l_pos-1) || g_chr_newline;
394             l_Text                 := SUBSTR(l_Text,l_pos + 1);
395 
396          ELSE
397 
398             l_Output               := l_Output || l_SubText;
399             l_Text                 := SUBSTR(l_Text,l_MaxLine + 1);
400 
401          END IF;
402 
403       END;
404 
405    END LOOP;
406 
407 
408    IF LENGTH(l_Text) > 0 THEN
409 
410       l_Output              := l_Output|| l_Text;
411 
412    END IF;
413 
414    p_package_text := l_Output;
415 
416    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
417       fnd_log.string(G_LEVEL_PROCEDURE,
418                      G_MODULE_NAME||l_procedure_name||'.end',
419                      'End of procedure');
420    END IF;
421 
422 EXCEPTION
423    WHEN OTHERS    THEN
424         IF (G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL ) THEN
425            fnd_message.set_name('OFA','FA_SHARED_ORACLE_ERR');
426            fnd_message.set_token('ORACLE_ERR',SQLERRM);
427            FND_LOG.MESSAGE (G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_procedure_name,TRUE);
428         END IF;
429         raise;
430 
431 END truncate_lines;
432 
433 --+==========================================================================+
434 --|                                                                          |
435 --| PUBLIC Procedure                                                         |
436 --|                                                                          |
437 --+==========================================================================+
438 
439 PROCEDURE DumpLines (p_array_output_string      IN DBMS_SQL.VARCHAR2S) IS
440 
441    l_array_string    DBMS_SQL.VARCHAR2S;
442    l_procedure_name  varchar2(80) := 'DumpLines';
443 
444 BEGIN
445 
446    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
447       fnd_log.string(G_LEVEL_PROCEDURE,
448                      G_MODULE_NAME||l_procedure_name||'.begin',
449                      'Beginning of procedure');
450    END IF;
451 
452    IF p_array_output_string.COUNT > 0 THEN
453 
454       FOR Idx IN p_array_output_string.FIRST .. p_array_output_string.LAST LOOP
455 
456          IF p_array_output_string.EXISTS(Idx) THEN
457 
458             IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
459                fnd_log.string(G_LEVEL_STATEMENT,
460                               G_MODULE_NAME||l_procedure_name,
461                                RPAD(Idx,10,' ')||' '||p_array_output_string(Idx));
462             END IF;
463 
464          END IF;
465 
466       END LOOP;
467 
468    END IF;
469 
473                      'End of procedure');
470    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
471       fnd_log.string(G_LEVEL_PROCEDURE,
472                      G_MODULE_NAME||l_procedure_name||'.end',
474    END IF;
475 
476 EXCEPTION
477    WHEN OTHERS    THEN
478         IF (G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL ) THEN
479            fnd_message.set_name('OFA','FA_SHARED_ORACLE_ERR');
480            fnd_message.set_token('ORACLE_ERR',SQLERRM);
481            FND_LOG.MESSAGE (G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_procedure_name,TRUE);
482         END IF;
483         raise;
484 
485 
486 END DumpLines;
487 
488 --+==========================================================================+
489 --|                                                                          |
490 --| PUBLIC Procedure                                                         |
491 --|                                                                          |
492 --+==========================================================================+
493 
494 FUNCTION replace_token
495        (p_original_text             IN  CLOB
496        ,p_token                     IN  VARCHAR2
497        ,p_replacement_text          IN  CLOB) RETURN CLOB IS
498 
499    l_found_position        INTEGER;
500    l_return_value          CLOB;
501    l_procedure_name        varchar2(80) := 'replace_token';
502 
503 BEGIN
504 
505    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
506       fnd_log.string(G_LEVEL_PROCEDURE,
507                      G_MODULE_NAME||l_procedure_name||'.begin',
508                      'Beginning of procedure');
509    END IF;
510 
511 
512    -- Copy the original clob into a local variable
513    l_return_value   := p_original_text;
514 
515 
516    -- Find the first occurrence of the token
517    l_found_position := INSTR(l_return_value, p_token);
518 
519 
520    -- If not found exit
521    IF l_found_position = 0 OR l_found_position IS NULL THEN
522       NULL;
523    ELSE
524       -- Extract the portions around the token and embed the replacement
525       -- Bug 4444678. Used the iterative call to replace_token
526 
527       l_return_value := SUBSTR(l_return_value ,1 ,l_found_position - 1) ||
528                         p_replacement_text  ||
529                         replace_token
530                            (SUBSTR(l_return_value,l_found_position + LENGTH(p_token))
531                            ,p_token
532                            ,p_replacement_text);
533    END IF;
534 
535    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
536       fnd_log.string(G_LEVEL_PROCEDURE,
537                      G_MODULE_NAME||l_procedure_name||'.end',
538                      'End of procedure');
539    END IF;
540 
541    RETURN l_return_value;
542 
543 EXCEPTION
544    WHEN OTHERS    THEN
545         IF (G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL ) THEN
546            fnd_message.set_name('OFA','FA_SHARED_ORACLE_ERR');
547            fnd_message.set_token('ORACLE_ERR',SQLERRM);
548            FND_LOG.MESSAGE (G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_procedure_name,TRUE);
549         END IF;
550         raise;
551 
552 END replace_token;
553 
554 
555 PROCEDURE clob_to_varchar2s
556                     (
557                       p_clob          IN  CLOB
558                      ,p_varchar2s     OUT NOCOPY DBMS_SQL.VARCHAR2S
559                     )
560 IS
561    l_current_table_index PLS_INTEGER;
562    l_current_pos_in_clob PLS_INTEGER;
563    l_next_newline_pos    PLS_INTEGER;
564    l_clob_length         PLS_INTEGER;
565    l_subarray            DBMS_SQL.VARCHAR2S;
566    l_procedure_name        varchar2(80) := 'replace_token';
567 
568 BEGIN
569 
570    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
571       fnd_log.string(G_LEVEL_PROCEDURE,
572                      G_MODULE_NAME||l_procedure_name||'.begin',
573                      'Beginning of procedure');
574    END IF;
575 
576    l_clob_length         := LENGTH(p_clob);
577    l_current_table_index := -1;
578    l_current_pos_in_clob := 1;
579 
580    WHILE l_current_pos_in_clob < l_clob_length LOOP
581       l_current_table_index := l_current_table_index + 1;
582       l_next_newline_pos    := INSTR
583         ( p_clob                --clob to search
584          ,g_chr_newline         --character to look for
585          ,l_current_pos_in_clob --starting position
586          ,1                     --occurrence
587         );
588 
589       IF l_next_newline_pos = 0 THEN
590          --no new line found, take all the string to the end
591          --if the length of the substring exceeds the maximum
592          --break it into substrings
593          IF (l_clob_length - l_current_pos_in_clob + 1 )
594              <= G_MAX_PACKAGE_LINE_LENGTH THEN
595             --the chunk length is within the maximum
596             p_varchar2s(l_current_table_index) := SUBSTR
597                                                   ( p_clob
598                                                    ,l_current_pos_in_clob
599                                                   );
600          ELSE
601             CreateString
602                    (
603                      p_package_text => SUBSTR
604                                           ( p_clob
605                                            ,l_current_pos_in_clob
606                                           )
607                     ,p_array_string => l_subarray
608                    );
609             FOR i IN l_subarray.FIRST..l_subarray.LAST LOOP
610                IF i > l_subarray.FIRST THEN
611                   l_current_table_index := l_current_table_index + 1;
615          END IF;
612                END IF;
613                p_varchar2s(l_current_table_index) := l_subarray(i);
614             END LOOP;
616 
617          l_current_pos_in_clob              := l_clob_length;
618 
619       ELSIF l_next_newline_pos IS NULL THEN
620          --probably offset > LOBMAXSIZE
621          NULL;
622          --raise exception
623       ELSE
624          IF (l_next_newline_pos - l_current_pos_in_clob + 1 )
625             <= G_MAX_PACKAGE_LINE_LENGTH
626          THEN
627             --take the portion
628             p_varchar2s(l_current_table_index) := SUBSTR
629                                                   ( p_clob
630                                                    ,l_current_pos_in_clob
631                                                    ,l_next_newline_pos
632                                                     - l_current_pos_in_clob
633                                                     + 1
634                                                   );
635          ELSE
636             CreateString
637                    (
638                      p_package_text => SUBSTR
639                                                   ( p_clob
640                                                    ,l_current_pos_in_clob
641                                                    ,l_next_newline_pos
642                                                     - l_current_pos_in_clob
643                                                     + 1
644                                                   )
645                     ,p_array_string => l_subarray
646                    );
647             FOR i IN l_subarray.FIRST..l_subarray.LAST
648             LOOP
649                IF i > l_subarray.FIRST
650                THEN
651                   l_current_table_index := l_current_table_index + 1;
652                END IF;
653                p_varchar2s(l_current_table_index) := l_subarray(i);
654             END LOOP;
655          END IF;
656 
657          l_current_pos_in_clob              := l_next_newline_pos + 1;
658 
659       END IF;
660    END LOOP;
661 
662    IF (G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL ) THEN
663       fnd_log.string(G_LEVEL_PROCEDURE,
664                      G_MODULE_NAME||l_procedure_name||'.end',
665                      'End of procedure');
666    END IF;
667 
668 EXCEPTION
669    WHEN OTHERS    THEN
670         IF (G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL ) THEN
671            fnd_message.set_name('OFA','FA_SHARED_ORACLE_ERR');
672            fnd_message.set_token('ORACLE_ERR',SQLERRM);
673            FND_LOG.MESSAGE (G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_procedure_name,TRUE);
674         END IF;
675         raise;
676 
677 END clob_to_varchar2s;
678 
679 --=============================================================================
680 
681 END fa_cmp_string_pkg;