84:
85: IF ( p_action = 'BEGIN' ) THEN
86:
87: -- Empty the LOB, if this is the first chunk of text to append
88: DBMS_LOB.Trim ( lob_loc => x_tlob, newlen => 0 );
89:
90: g_Buffer := p_string;
91: g_Buffer_Length := -1;
92:
102: -- Write buffer to LOB if required
103:
104: IF ( g_Buffer_Length + l_String_Length >= l_Max_Length ) THEN
105: IF ( start_writing ) THEN
106: DBMS_LOB.Write ( lob_loc => x_tlob
107: , amount => Length (g_Buffer)
108: , offset => l_offset
109: , buffer => g_Buffer
110: );
108: , offset => l_offset
109: , buffer => g_Buffer
110: );
111: ELSE
112: DBMS_LOB.WriteAppend ( lob_loc => x_tlob
113: , amount => Length (g_Buffer)
114: , buffer => g_Buffer
115: );
116: END IF;
125:
126: IF ( p_action = 'END' ) THEN
127: start_writing := ( g_Buffer_Length = -1 );
128: IF ( start_writing ) THEN
129: DBMS_LOB.Write ( lob_loc => x_tlob
130: , amount => Length (g_Buffer)
131: , offset => l_offset
132: , buffer => g_Buffer
133: );
131: , offset => l_offset
132: , buffer => g_Buffer
133: );
134: ELSE
135: DBMS_LOB.WriteAppend ( lob_loc => x_tlob
136: , amount => Length (g_Buffer)
137: , buffer => g_Buffer
138: );
139: END IF;
200: --DBMS_OUTPUT.put_line('LOB contents:');
201:
202: -- Read portions of LOB
203: LOOP
204: DBMS_LOB.Read ( lob_loc => p_tlob_loc
205: , amount => l_amount
206: , offset => l_offset
207: , buffer => l_buffer
208: );