У меня вопрос о том, как загрузить файл 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: частичная запись найдена в конце файла данных»?
Спасибо!