Tenha em mente que strings SQL não podem ter mais de 4000 bytes, enquanto Pl/SQL pode ter strings de até 32767 bytes. veja abaixo um exemplo de inserção de uma string grande por meio de um bloco anônimo que acredito que fará tudo o que você precisa.
observe que alterei o varchar2(32000) para CLOB
set serveroutput ON
CREATE TABLE testclob
(
id NUMBER,
c CLOB,
d VARCHAR2(4000)
);
DECLARE
reallybigtextstring CLOB := '123';
i INT;
BEGIN
WHILE Length(reallybigtextstring) <= 60000 LOOP
reallybigtextstring := reallybigtextstring
|| '000000000000000000000000000000000';
END LOOP;
INSERT INTO testclob
(id,
c,
d)
VALUES (0,
reallybigtextstring,
'done');
dbms_output.Put_line('I have finished inputting your clob: '
|| Length(reallybigtextstring));
END;
/
SELECT *
FROM testclob;
"I have finished inputting your clob: 60030"