Вставка данных clob в разные столбцы таблицы - PullRequest
0 голосов
/ 11 октября 2018

У меня есть таблица с именем 'uploaded_files', в которой хранятся * csv.files, загруженные пользователем через dropzone (https://github.com/Dani3lSun/apex-plugin-dropzone) пользователем в моем веб-приложении. Содержимое этих файлов хранится в табличной колонке типа данных blob.

Для вставки содержимого файла я использую пакет с именем 'csv_util_pkg' (https://github.com/mortenbra/alexandria-plsql-utils). Мне удалось преобразовать тип blob-объекта в тип clob-datatype и сохранить данные clob в другой таблице, которая называетсяx_dump. Таблица X_Dump Как вы можете видеть на рисунке, значения clob_value разделены и хранятся в «c001» и «c002». Это делается с помощью функции csv_util_pkg.

Теперь яЯ хочу взять эти два значения и сохранить их в таблице под названием «fahrzeug», но это не работает, и я действительно не знаю, почему. Я получаю следующий код ошибки

ORA-01400: Einfügen von NULL in ("RESSOURCE_U"."FAHRZEUG"."VNUMMER") nicht möglich
ORA-06512: in Zeile 14
01400. 00000 -  "cannot insert NULL into (%s)"
*Cause:    An attempt was made to insert NULL into previously listed objects.
*Action:   These objects cannot accept NULL values.

И вотмой код:

DECLARE
    file_content   NUMBER (10);
    l_clob         CLOB;
BEGIN
    SELECT TO_CLOB (
               UTL_RAW.CAST_TO_VARCHAR2 (DBMS_LOB.SUBSTR (FILE_BLOB, 2000)))
      INTO l_clob
      FROM UPLOADED_FILES
     WHERE UPLOADED_FILES.FILENAME LIKE 'A_%_Fahrzeug.csv';

    INSERT INTO X_DUMP (CLOB_VALUE, DUMP_ID)
         VALUES (l_clob, 1);

    INSERT INTO fahrzeug (vnummer, baureihe)
        SELECT c001, c002
          FROM x_dump d, TABLE (csv_util_pkg.clob_to_csv (d.clob_value, ';'));

    COMMIT;
END;

vnummer является первичным ключом моей таблицы 'fahrzeug', и поэтому мы не можем вставить ноль. Но я не понимаю, потому что c001 и c002 содержат значения, поэтому это не может бытьноль..

Спасибо за помощь!

1 Ответ

0 голосов
/ 11 октября 2018

Вы отлаживали или выводили c001 во время выполнения?Попробуйте это:

for tmp IN (select c001 from x_dump d, table(csv_util_pkg.clob_to_csv(d.clob_value, ';')))
LOOP
    DBMS_OUTPUT.put_line ('vnummer: ' || tmp.c001);
END LOOP;
...