powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / комбинированная выгрузка данных из таблицы в файл
7 сообщений из 7, страница 1 из 1
комбинированная выгрузка данных из таблицы в файл
    #39316501
Имеется таблица:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
CREATE TABLE FLATFILE
(
  NR              NUMBER,
  BINARY_OR_CHAR  NUMBER(1)                     NOT NULL,
  TEXT            VARCHAR2(1024 BYTE),
  BINARYS         BLOB
);

COMMENT ON COLUMN FLATFILE.BINARY_OR_CHAR IS '0 - Char
1 - Binary';



CREATE UNIQUE INDEX FLATFILE_PK ON FLATFILE
(NR);


ALTER TABLE FLATFILE ADD (
  CONSTRAINT CHECK1
  CHECK (binary_or_char in (0,1))
  ENABLE VALIDATE,
  CONSTRAINT FLATFILE_PK
  PRIMARY KEY
  (NR)
  USING INDEX FLATFILE_PK
  ENABLE VALIDATE);



В таблице хранятся данные, которые нужно выгружать в фаил.
Выгружать нужно построчно содержимое полей TEXT или BINARYS. Причем, если BINARY_OR_CHAR = 0, тогда выгружается поле TEXT, в противном случае (BINARY_OR_CHAR = 1) BINARYS. В конце каждой выгруженной табличной строки, нужно записывать carriage return CHR(13). Coртировать даныые нужно по NR (asc).
Посоветуйте, в каком направлении двигаться.
Спасибо.
...
Рейтинг: 0 / 0
комбинированная выгрузка данных из таблицы в файл
    #39316504
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Insert into YMEJER.FLATFILE
   (NR, BINARY_OR_CHAR, TEXT)
 Values
   (1, 0, 'TEST1');
Insert into YMEJER.FLATFILE
   (NR, BINARY_OR_CHAR, TEXT)
 Values
   (2, 0, 'TEST2');
Insert into YMEJER.FLATFILE
   (NR, BINARY_OR_CHAR, TEXT)
 Values
   (3, 0, 'TEST3');
Insert into YMEJER.FLATFILE
   (NR, BINARY_OR_CHAR,binarys)
 Values
   (4, 1, UTL_RAW.CAST_TO_RAW('xhu'));
COMMIT;
...
Рейтинг: 0 / 0
комбинированная выгрузка данных из таблицы в файл
    #39316520
Hans Christian Andersen,

9966 рублей. аванс 33%
...
Рейтинг: 0 / 0
комбинированная выгрузка данных из таблицы в файл
    #39316522
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В один файл?
Все в кучу?
Одним запросом или PL/SQL?

авторПосоветуйте, в каком направлении двигаться.

Фигня в общем то выйдет, но если не можешь прекратить, нужно возглавить:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select 
cast(
case 
when ... then ...
when ... then ...
end as raw) ||  CHR(13) as file_line
from ... 
order by ...


Вот только каша из текста и бинарных данных, тем более BLOB ...

p.s. Даже проверять не хочу...
...
Рейтинг: 0 / 0
комбинированная выгрузка данных из таблицы в файл
    #39316523
Вы правы, нужна каша.
...
Рейтинг: 0 / 0
комбинированная выгрузка данных из таблицы в файл
    #39316746
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hans Christian AndersenВы правы, нужна каша.

Ну тогда PL/SQL
открываете UTL_FILE.FOPEN
в бинарной моде
И валите туда данные в цикле
Только прочитайте как правильно обрабатывать BLOB
...
Рейтинг: 0 / 0
комбинированная выгрузка данных из таблицы в файл
    #39316803
Vadim Lejnin,

Спасибо.
Представляю себе такую рутину:
Обрабатываю текст с помощъю этого блока:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
DECLARE
  /* Declare local input variables. */
  lv_location      VARCHAR2(60) := 'DIR';
  lv_file_name     VARCHAR2(40) := 'FT20160928';
 
  /* Declare a file reference pointer and buffer. */
  lv_file     UTL_FILE.FILE_TYPE;  -- File reference
  lv_line     VARCHAR2(32767);     -- Reading buffer
  chunk_size  BINARY_INTEGER := 32767;
  CURSOR c_ektr20
      is
      SELECT datensatz_upload_CHAR||CHR(13) as datensatz_upload_CHAR, BINARYS  FROM FLATFILE
      ORDER BY nr asc;
       
BEGIN
 
  /* Check for open file and close when open. */
  IF UTL_FILE.is_open(lv_file) THEN
    UTL_FILE.fclose(lv_file);
  END IF;

  lv_file := UTL_FILE.fopen( location     => lv_location
                           , filename     => lv_file_name
                           , open_mode    => 'a'
                           , max_linesize => chunk_size);
 

  FOR r_ektr20 in c_ektr20 LOOP


     UTL_FILE.PUT_LINE( file   => lv_file
                     , buffer => r_ektr20.datensatz_upload_CHAR );
 
  END LOOP;
  
  UTL_FILE.FCLOSE( file =>lv_file);

EXCEPTION
  WHEN NO_DATA_FOUND THEN
    UTL_FILE.fclose(lv_file);
END;


В цикл курсора помещу рутину, которя будет выгружать бинарное поле, если BINARY_OR_CHAR=1.
Правильно понял?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / комбинированная выгрузка данных из таблицы в файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]