powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / длиннннее 4000к в external tabel
15 сообщений из 15, страница 1 из 1
длиннннее 4000к в external tabel
    #39572823
dbmsoutput
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые, подскажите как прочитать csv с текстом больше 4к в external таблицу
Я поискал на форуме, но такой ситуации не нашел.... у меня руки связанны, очень мало возможностей кроме как сделать приметивнмую ext table

ситуация:
У меня csv (формат и содержание файла, изменить никак нельзя; поставщик данных ничего не меняет).
Все строчки очень важны. bad file недопустим
В файле штук десять колонок. посередине стоит текст который может быть до 20к например. Не часто, попадаются строки с текстовым полем > 4к.

Если просто в лоб делать (char 4000) то рекорд падает в помойку, bad file. Текстовое поле мне в принципе и не нужно, а вот остальные 9 нужны. Поэтому хотелось бы рекорд прочитать в таблицу.

Меня устроит например
1. 4000 первых позиций длинного поля
2. на крайняк вообще без этого длинного поля. ('перепрыгнуть' его :) )

Лишь бы рекорд полностью не сваливалась в помойку, 9 колонок очень нужны.

Если можно то желательно решение без препроцесса, весьма ограниченные возможности на дб (директории или скрипты делать)

дб 12.1
os unix

большое спасибо, Ром
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572868
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbmsoutput,

А что, CLOBы уже отменили?

SY.
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572893
dbmsoutput
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYdbmsoutput,

А что, CLOBы уже отменили?

SY.

Не не отменили, я наверно плохо описал ситуацию.

только внизу клоб нельзя, а char, varchar не работает и рекорд падает в bad

CREATE TABLE VPTGIR.EXT_GIR_HANDHAVEN
(
LRK_ID NUMBER,
SOORT_VOORZIENING VARCHAR2(100 BYTE),
NAAM_VOORZIENING VARCHAR2(100 BYTE),
ADRES VARCHAR2(100 BYTE),
POSTCODE VARCHAR2(10 BYTE),
PLAATS VARCHAR2(100 BYTE),
HUIDIGE_STATUS VARCHAR2(100 BYTE),
DATUM_STATUS DATE,
SOORT_INSPECTIE VARCHAR2(100 BYTE),
DATUM_INSPECTIE DATE,
DATUM_AFGESLOTEN DATE,
TEKORTKOMINGEN_OVERTRED VARCHAR2(1000 BYTE),
AANTAL NUMBER,
OPSOM_OVERTRED_INSPECTIE VARCHAR2(4000 BYTE),
BESLISSING_GEMEENTE VARCHAR2(100 BYTE),
BEHANDELAAR VARCHAR2(100 BYTE),
HANDHAVING_TRAJECT VARCHAR2(100 BYTE),
OPENSTAANDE_OVERTRED VARCHAR2(100 BYTE),
opsom_overtred_hndhv_traject <<========= тут можно clob,
KVK_HOUDER VARCHAR2(100 BYTE),
NAAM_HOUDER VARCHAR2(100 BYTE)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY STG_FILE_DUO
ACCESS PARAMETERS
( records delimited by "\r"
badfile stg_file_duo:'gir_handhaven.bad'
discardfile stg_file_duo:'gir_handhaven.dsc'
logfile stg_file_duo:'gir_handhaven.log'
skip 1
fields terminated by ';' optionally enclosed by '"'
missing field values are null
reject rows with all null fields
( lrk_id
, soort_voorziening
, naam_voorziening
, adres
, postcode
, plaats
, huidige_status
, datum_status date "dd-mm-yyyy"
, soort_inspectie
, datum_inspectie date "dd-mm-yyyy"
, datum_afgesloten date "dd-mm-yyyy"
, tekortkomingen_overtred
, aantal
, opsom_overtred_inspectie char(4000)
, beslissing_gemeente
, behandelaar
, handhaving_traject
, openstaande_overtred
, opsom_overtred_hndhv_traject <<<<<===больше 4к ====, clob тут нельзя
, kvk_houder
, naam_houder
)
)
LOCATION (STG_FILE_DUO:'gir_handhaven.csv')
)
REJECT LIMIT UNLIMITED;
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572929
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbmsoutput,

Ну вообще-то можно через COLUMN TRANSFORMS, но я упустил "весьма ограниченные возможности на дб (директории или скрипты делать)". Ну тогдa (если строки файла < 32K) через UTL_FILE.

SY.
P.S. хотя "препроцесс" то создается один раз, так-что...
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572930
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYчерез UTL_FILE.
Ну так-то и через BFILENAME можно - один фиг руками парсить...
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572936
dbmsoutput
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYdbmsoutput,

Ну тогдa (если строки файла < 32K) через UTL_FILE.


SY, если не сложно как utl_file здесь прикрутить? Строка меньше 32к

А колонку вообще проигнорировать нельзя, насколько я понимаю?
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572961
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbmsoutputА колонку вообще проигнорировать нельзя, насколько я понимаю?

Да запрoсто:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE XT_TEST(
                     col1 number,
                      col3 varchar2(10)
                    )
  ORGANIZATION EXTERNAL(
                        TYPE ORACLE_LOADER
                        DEFAULT DIRECTORY TEMP
                        ACCESS PARAMETERS(
                                          FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
                                          MISSING FIELD VALUES ARE NULL
                                          (
                                           col1,
                                           skip_this_column char(40000),
                                           col3
                                          )
                                         )
                        LOCATION(
                                 'ext_test.txt'
                                )
                       )
/
SELECT * FROM XT_TEST
/



SY.
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572968
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно и SUBSTRING выдрать (правда тоько начиная с позиции 1):

Код: 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.
DROP TABLE XT_TEST
/
CREATE TABLE XT_TEST(
                     col1 number,
                     col2 varchar2(34),
                     col3 varchar2(10)
                    )
  ORGANIZATION EXTERNAL(
                        TYPE ORACLE_LOADER
                        DEFAULT DIRECTORY TEMP
                        ACCESS PARAMETERS(
                                          FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
                                          MISSING FIELD VALUES ARE NULL
                                          (
                                           col1,
                                           very_long_column char(40000),
                                           col3
                                          )
                                          COLUMN TRANSFORMS(
                                                            col2 FROM STARTOF very_long_column(34)
                                                           )
                                         )
                        LOCATION(
                                 'ext_test.txt'
                                )
                       )
/
SELECT * FROM XT_TEST
/

      COL1 COL2                               COL3
---------- ---------------------------------- ----------
         1 FIRST 34 CHARS OF VERY LONG STRING ABC

SQL>



SY.
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572976
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати - прекрасно хавает CLOBы непосредственно в файле (во всяком случае на 12.2):

Код: 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.
42.
43.
44.
45.
46.
47.
SQL> SELECT  BANNER
  2    FROM  V$VERSION
  3  /

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE    12.2.0.1.0      Production
TNS for 64-bit Windows: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

SQL> CREATE TABLE XT_TEST(
  2                       col1 number,
  3                       very_long_column clob,
  4                       col3 varchar2(10)
  5                      )
  6    ORGANIZATION EXTERNAL(
  7                          TYPE ORACLE_LOADER
  8                          DEFAULT DIRECTORY TEMP
  9                          ACCESS PARAMETERS(
 10                                            FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
 11                                            MISSING FIELD VALUES ARE NULL
 12                                            (
 13                                             col1,
 14                                             very_long_column char(200000),
 15                                             col3
 16                                            )
 17                                           )
 18                          LOCATION(
 19                                   'ext_test.txt'
 20                                  )
 21                         )
 22  /

Table created.

SQL> SELECT  X.*,
  2          LENGTH(VERY_LONG_COLUMN) L
  3    FROM  XT_TEST X
  4  /

COL1 VERY_LONG_COLUMN                                                                 COL3          L
---- -------------------------------------------------------------------------------- ---- ----------
   1 FIRST 34 CHARS OF VERY LONG STRINGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ABC      131646

SQL>



SY.
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39572989
dbmsoutput
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY, спасибо буду сейчас пробовать

Вариант a-la ваш very_long_column char(200000) у меня не пролез, это первое что я пробовал сам. Рекорд падала в помойку..... дб 12.2 тоже.

Сейчас попробую остальные и отпишусь. Большое сэнкс
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39573008
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbmsoutput,

Скорее всего у тебя перевод строки внутри полей.

SY.
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39573020
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя нет:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> SELECT  X.*,
  2          LENGTH(VERY_LONG_COLUMN) L
  3    FROM  XT_TEST X
  4  /

ERROR:
ORA-29913: error in executing ODCIEXTTABLEFETCH callout
ORA-29400: data cartridge error
KUP-04020: found record longer than buffer size supported, 524288, in C:\TEMP\ext_test.txt (offset=0)



no rows selected

SQL>



Так-что пoхоже с external table ты пролетаешь (без preprocessor). А с UTL_FILE только разве что через binary read.

SY.
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39573043
dbmsoutput
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYdbmsoutput,

Скорее всего у тебя перевод строки внутри полей.

SY.

SY, спасибо.... работает.... просто собственная глупость и слепота :) у меня 2 длинных колонки в таблице. Строчки валились на другой колонке :) (которую не изменил)

Column transforms работает прекрасно! закачиваем первые 4к

хорошего вечера, Ром
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39573058
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbmsoutput,

T.e. 4000к (4m) в названии темы действительности не соответствует и на ограничение "KUP-04020: found record longer than buffer size supported, 524288" - 512k не нарываешься.

SY.
...
Рейтинг: 0 / 0
длиннннее 4000к в external tabel
    #39573436
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbmsoutput, кто такой этот "Ром"?
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / длиннннее 4000к в external tabel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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