Re: v$process_memory_detail: Category=Other, HEAP_NAME = kolaslAssign

From: Rumpi Gravenstein <rgravens_at_gmail.com>
Date: Sun, 28 Feb 2016 16:05:28 -0500
Message-ID: <CAEpg1wBW+BZzwbZq=ebQTGUnCW2v-3Ee4aut0cf6o2EccefJ=Q_at_mail.gmail.com>



I just noticed that I missed the last few statements of my function call. The full statement is as shown here. One more comment. In one of our bad actor test cases the array that we pass in is only ever one record long and never over 100 chars -- but we do call the function over 6M times within an a direct path INSERT statement.

CREATE OR REPLACE FUNCTION ISUZU_WW_CS_TARG_DLR_21.get_nclob_concat ( in_nclob_tab IN nclob_tab_type,
in_delimiter IN VARCHAR2 DEFAULT ',')
RETURN NCLOB
IS

l_nclob NCLOB;
l_nvarchar2 NVARCHAR2 (16000);
l_need_nclob BOOLEAN := FALSE;
l_delimiter NVARCHAR2 (1) := in_delimiter;
BEGIN
FOR i IN in_nclob_tab.FIRST .. in_nclob_tab.LAST LOOP
-- No special handling on first record to match existing
  • code which starts with the delimiter IF l_need_nclob THEN l_nclob := l_nclob || l_delimiter || in_nclob_tab (i); ELSE BEGIN l_nvarchar2 := l_nvarchar2 || l_delimiter || in_nclob_tab (i); EXCEPTION WHEN VALUE_ERROR -- ORA 6502 THEN l_need_nclob := TRUE; l_nclob := l_nvarchar2 || l_delimiter || in_nclob_tab (i); END; END IF; END LOOP;
IF l_need_nclob
THEN
RETURN l_nclob || l_delimiter;
ELSE
l_nclob := l_nvarchar2 || l_delimiter;
RETURN l_nclob;
END IF;
END get_nclob_concat;
/
--
http://www.freelists.org/webpage/oracle-l
Received on Sun Feb 28 2016 - 22:05:28 CET

Original text of this message