оракул ebcdic sqlldr выпуск - PullRequest
       48

оракул ebcdic sqlldr выпуск

0 голосов
/ 08 декабря 2018

У меня вопрос о том, как загрузить файл EBCDIC в таблицу Oracle.Я прочитал многочисленные темы об этой проблеме;однако, я все еще не могу добиться прогресса.

На основании определения, данного мне из копии COBOL, я сконструировал контрольный файл следующим образом: EBCDIC.ctl

LOAD DATA
    CHARACTERSET WE8EBCDIC500
    INFILE 'File.ebc' "fix 45"
    BADFILE 'File.bad'
    DISCARDFILE 'File.dis'
    INTO TABLE test.ETEST APPEND TRAILING NULLCOLS
    (
    recordone   POSITION(0001:0010)     INTEGER EXTERNAL,
    recordtwo   POSITION(0011:0015)     CHAR,
    recordthree     POSITION(0016:0020)     INTEGER EXTERNAL,
    recordfour      POSITION(0021:0030)     DATE,
    recordfive  POSITION(0031:0040)     CHAR "TO_NUMBER(:recordfive,'99999999.99')",
    recordsix   POSITION(0041:0045)     INTEGER EXTERNAL
)

Моя таблицав Oracle был определен следующим образом:

CREATE TABLE ETEST
(
    recordone               NUMBER(10),
    recordtwo       VARCHAR2(5),
    recordthree     NUMBER(5),
    recordfour      DATE,
    recordfive              NUMBER(10,2),
    recordsix               NUMBER(5),
)
TABLESPACE users STORAGE ( INITIAL 50K);

Это синтаксис, который я использую для запуска SQLLDR:

sqlldr userid=test/test control=EBCDIC.ctl

Поскольку у меня нет доступа к файлу EBCDIC за пределами нашей интрасетии я хотел провести некоторое тестирование на своем персональном ноутбуке, я создаю запись EBCDIC, используя следующую запись:

6234598345
ASDFD
34524
sysdate
50000000.00
74564

На следующем веб-сайте (не уверен, насколько авторитетен этот сайт), https://www.browserling.com/tools/text-to-ascii, Я преобразовал эти значения

6234598345ASDFD34524sysdate50000000.0074564

в ASCII:

54 50 51 52 53 57 56 51 52 53 65 83 68 70 68 51 52 53 50 52 115 121 115 100 97 116 101 53 48 48 48 48 48 48 48 46 48 48 55 52 53 54 52 10

Я поставил «10» в качестве символа новой строки в конце для SQLLDR.Затем я преобразовал ASCII в EBCDIC на следующем сайте, https://shop.alterlinks.com/ascii-ebcdic-conversion/ascii-ebcdic-conversion-us.php,, который дал мне:

õô@õð@õñ@õò@õó@õ÷@õö@õñ@õò@õó@öõ@øó@öø@÷ð@öø@õñ@õò@õó@õð@õò@ññõ@ñòñ@ññõ@ñðð@ù÷@ññö@ñðñ@õó@ôø@ôø@ôø@ôø@ôø@ôø@ôø@ôö@ôø@ôø@õõ@õò@õó@õô@õò@ñð

Я использовал следующий оператор INSERT, чтобы эти значения загружались в таблицу базы данных ETEST

insert into etest values (6234598345, 'ASDFD', 34524, sysdate, 50000000.00, 74564)

Я продолжаю получать следующие выходные данные в файле журнала:

Table TEST.ETEST, loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect

Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
RECORDONE                            1:10    10           CHARACTER
RECORDTWO                           11:15     5           CHARACTER
RECORDTHREE                         16:20     5           CHARACTER
RECORDFOUR                          21:30    10           DATE DD-MON-RR
RECORDFIVE                          31:40    10           CHARACTER
SQL string for column : "TO_NUMBER(:recordfive,'99999999.99')"
RECORDSIX                           41:45     5           CHARACTER

Record 1: Rejected - Error on table TEST.ETEST, column RECORDONE.
ORA-01722: invalid number

Record 2: Rejected - Error on table TEST.ETEST, column RECORDONE.
ORA-01722: invalid number

Record 3: Rejected - Error on table TEST.ETEST, column RECORDONE.
ORA-01722: invalid number

Record 4: Rejected - Error on table TEST.ETEST, column RECORDONE.
ORA-01722: invalid number

Record 5: Rejected - Error on table TEST.ETEST, column RECORDONE.
ORA-01722: invalid number

SQL*Loader-501: Unable to read file (File.ebc)
SQL*Loader-566: partial record found at end of datafile
SQL*Loader-2026: the load was aborted because SQL Loader cannot continue.
Specify SKIP=5 when continuing the load.

Может кто-нибудь помочь мне понять, почему я получаю: сначала: ошибка "ORA-01722: неверный номер";во-вторых, почему SQLLDR считает, что в файле пять записей;в-третьих, почему я вижу «SQL * Loader-566: частичная запись найдена в конце файла данных»?

Спасибо!

...