У меня есть этот огромный CSV-файл, который содержит более 200 000 строк. каждая строка имеет идентификатор отзыва, идентификатор отеля, дату отзыва и сам отзыв. Столбец обзора вызывает проблемы. Некоторые обзоры очень длинные, длиннее 2000 байт, поэтому они вызывают ошибку:
ORA-20000: ORU-10027: переполнение буфера, ограничение в 20000 байт.
Что я могу сделать, чтобы обойти эту проблему? Вот мой текущий код:
DECLARE
F UTL_FILE.FILE_TYPE;
v_Line VARCHAR2(2000);
v_ReviewID NUMBER;
v_HotelID VARCHAR2(2000);
v_ReviewDate VARCHAR(2000);
v_ReviewName CLOB;
v_Review CLOB;
BEGIN
F := UTL_FILE.FOPEN ('REVIEW_READ', 'Review.csv', 'R', 30000);
IF UTL_FILE.IS_OPEN(F) THEN
LOOP
BEGIN
DBMS_OUTPUT.PUT_LINE('Start');
UTL_FILE.GET_LINE(F, v_Line);
v_ReviewID := REGEXP_SUBSTR(v_Line, '[^,]+', 1, 1);
v_HotelID := REGEXP_SUBSTR(v_Line, '[^,]+', 1, 2);
v_ReviewDate := REGEXP_SUBSTR(v_Line, '[^,]+', 1, 3);
v_ReviewName := REGEXP_SUBSTR(v_Line, '[^,]+', 1, 4);
v_Review := REGEXP_SUBSTR(v_Line, '[^,]+', 1, 5);
INSERT INTO Review
VALUES(v_ReviewID, v_HotelID, v_ReviewDate, v_ReviewName, v_Review);
DBMS_OUTPUT.PUT_LINE(v_Line);
IF v_Line IS NULL THEN
EXIT;
END IF;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
UTL_FILE.FCLOSE(F);
END;