Я получил странное поведение с внешними таблицами с символами Unicode в 18c, чего раньше не было в 12.2
В качестве тестового сценария я создал файл с символом Unicode + ABCD:
declare
v_file utl_file.file_type;
v_bas varchar2(20):='ABCD';
begin
v_file := utl_file.fopen('ORDER_ENTRY', 'datei.csv', 'W');
utl_file.put_line(v_file, '12;'||unistr('\C2B0')||v_bas);
utl_file.FFLUSH(v_file);
utl_file.fclose(v_file);
end;
/
Для чтения данных я создал 3 разные внешние таблицы:
CREATE TABLE system.test_datei_csv_wep1
( rn number(10),
col1 VARCHAR2(10 CHAR)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "ORDER_ENTRY"
ACCESS PARAMETERS
( RECORDS DELIMITED BY '\n'
STRING SIZES ARE IN CHARACTERS
CHARACTERSET 'WE8ISO8859P1'
TERRITORY 'GERMANY'
NODISCARDFILE
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
MISSING FIELD VALUES ARE NULL
( rn char(10),
col1 CHAR (10) )
)
LOCATION
( 'datei.csv' )
);
2-й:
CREATE TABLE system.test_datei_csv_utf8
( rn number(10),
col1 VARCHAR2(10 CHAR)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "ORDER_ENTRY"
ACCESS PARAMETERS
( RECORDS DELIMITED BY '\n'
STRING SIZES ARE IN CHARACTERS
CHARACTERSET 'UTF8'
TERRITORY 'GERMANY'
NODISCARDFILE
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
MISSING FIELD VALUES ARE NULL
( rn char(10),
col1 CHAR (200) )
)
LOCATION
( 'datei.csv')
);
3-й:
CREATE TABLE system.test_datei_csv_utf8_in_byte
( rn number(10),
col1 VARCHAR2(10 CHAR)
)
ORGANIZATION EXTERNAL
( TYPE ORACLE_LOADER
DEFAULT DIRECTORY "ORDER_ENTRY"
ACCESS PARAMETERS
( RECORDS DELIMITED BY '\n'
STRING SIZES ARE IN bytes
CHARACTERSET 'UTF8'
TERRITORY 'GERMANY'
NODISCARDFILE
FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"'
MISSING FIELD VALUES ARE NULL
( rn char(10),
col1 CHAR (10) )
)
LOCATION
( 'datei.csv'
)
);
В качестве результата для выбора я получаю12.2:
SQL> select * from system.test_datei_csv_wep1;
RN COL1
12 Š ° ABCD
SQL> select * from system.test_datei_csv_utf8;
RN COL1
12 슰 ABCD
SQL> выберите * из system.test_datei_csv_utf8_in_byte;
RN COL1
12 슰 ABCD
что нормально.Но в 18c я получаю:
SQL> select * from system.test_datei_csv_wep1;
RN COL1
12 ° ° ABCD
SQL> select * fromsystem.test_datei_csv_utf8;
RN COL1
12 슰 AB
SQL> выбрать * из system.test_datei_csv_utf8_in_byte;
RN COL1
12 슰 ABCD
В результате для настройки внешней таблицы по умолчанию (STRING SIZES IN CHARACTERS по умолчанию) в system.test_datei_csv_utf8 CD отсутствует.Кто-нибудь знает, если новое поведение правильно?
С наилучшими пожеланиями Томас