Мне нужно сохранить текст файла XML, который я уже сохранил в местоположении FTP, в поле таблицы в базе данных, я использую пакет UTL_FILE
для чтения файлов мне не очень понятно, как работает пакет, и я просто начинаю с топи c процедур в PL / SQL. Мой подход к дате:
- Используйте
UTL_FILE.FOPEN
, чтобы открыть файл. - Создайте
INSERT
внутреннюю процедуру для хранения в поле базы данных
Для этого я выполняю процедуру в PL / SQL Я не знаю, правильно ли это для того, что мне требуется
DECLARE
l_bfile BFILE;
l_clob CLOB;
VFILE UTL_FILE.file_type;
TEXT VARCHAR2(32767);
L_CONN UTL_TCP.connection;
P_CMTT_CODE SPRCMNT.SPRCMNT_CMTT_CODE%TYPE;
P_TEXT SPRCMNT.SPRCMNT_TEXT%TYPE;
P_TEXT_NAR SPRCMNT.SPRCMNT_TEXT_NAR%TYPE;
BEGIN
L_CONN := FTP.LOGIN('000.00.000.00', '00', '*********', '*********');
FTP.ASCII(P_CONN => L_CONN);
FTP.GET(P_CONN => L_CONN, p_from_file => '/xml_file/ES0000251446027471.xml', p_to_dir => 'UPLOAD_DIR', p_to_file => 'ES0000251446027471.xml');
ftp.logout(l_conn);
VFILE := UTL_FILE.fopen('UPLOAD_DIR', 'ES0000251446027471.xml', 'R', 4000);
LOOP
BEGIN
UTL_FILE.GET_LINE(VFILE, TEXT, 32767);
DBMS_OUTPUT.PUT_LINE(TEXT);
INSERT INTO SPRCMNT (
SPRCMNT_PIDM,
SPRCMNT_CMTT_CODE,
SPRCMNT_TEXT,
SPRCMNT_TEXT_NAR,
SPRCMNT_ACTIVITY_DATE)
VALUES('15218',
'15',
P_TEXT,
P_TEXT_NAR,
SYSDATE)
RETURN SPRCMNT_TEXT_NAR INTO l_clob;
l_bfile := BFILENAME ('BAN_GUAUPLP_UPLOAD_DIR', 'ES0000251446027471.xml');
dbms_lob.fileopen( l_bfile, dbms_lob.FILE_READONLY );
dbms_lob.loadfromfile( l_clob, l_bfile, dbms_lob.getlength(l_bfile) );
dbms_lob.fileclose( l_bfile );
COMMIT;
EXCEPTION
WHEN OTHERS THEN EXIT;
dbms_output.put_line('Error al cargar el archivo');
END;
END LOOP;
UTL_FILE.FCLOSE(VFILE);
END;
Где это P_CMTT_CODE
собираемся сохранить по умолчанию значение 15, P_TEXT
сохранить имя файла XML и P_TEXT_NAR
все содержимое, я имею в виду все XML текст в таблице SPRCMNT
Я все еще не могу вставить весь текст XML в P_TEXT_NAR
поле таблицы SPRCMNT
.
Я стараюсь придерживаться моей простой философии, но я новичок во всем этом и буду очень признателен за отзывы о том, как это сделать лучше.
Основная ошибка в том, что он не сохраняет XML имя и что файл XML содержит в соответствующих полях
ОБНОВЛЕНИЕ:
Тр y, чтобы сделать это с помощью функции BFILENAME
, но во время вставки сохраните ее следующим образом, кроме того, она не сохраняет имя файла XML: