2015-09-08 3 views
1

создать таблицу в OracleDB 11с через SQL Developer 4.1.1Вставьте юникода текст в таблицу базы данных Oracle

CREATE TABLE FAC.FAC_CODE_CPQLDN( 
    ID NUMBER(10), 
    CODE NVARCHAR2(100) NOT NULL, 
    NAME NLOB, 
    NOTE NLOB, 
    PARENT_ID NUMBER(10), 
    CONSTRAINT FAC_CODE_CPQLDN_PK PRIMARY KEY (ID) 
); 

После этого я вставить данные в этой таблице

REM INSERTING into FAC_CODE_CPQLDN 
SET DEFINE OFF; 
insert into FAC_CODE_CPQLDN(ID, CODE, NAME, NOTE, PARENT_ID) values (1, 'C1.1', 'Chi phí công ty', '', 0); 

Но я получаю ошибку

SQL Error: ORA-01465: invalid hex number 

Пожалуйста, дайте мне знать, как это исправить?

+1

Что такого CharacterSet вашей базы данных? 'select * from nls_database_parameters где параметр = 'NLS_CHARACTERSET'' Я бы избежал использования NVARCHAR2s и NLOBs, если это было возможно, и просто имел базу данных UTF-8 (AL32UTF8 в Oracle). – Ben

+0

NLS_CHARACTERSET ------ AL32UTF8 –

+0

Итак, у вас уже есть база данных юникода. Попробуйте заново создать таблицу только с столбцами VARCHAR2 и повторно вставить. – Ben

ответ

2

Попытка преобразовать значения VARCHAR2 в RAW-формат перед вставкой в ​​BLOB полей -

insert into FAC_CODE_CPQLDN(ID, CODE, NAME, NOTE, PARENT_ID) 
values (1, 'C1.1', UTL_RAW.CAST_TO_RAW('Chi phí công ty'), null, 0); 
+0

Wao, он отлично работает. Спасибо –

+0

В этом случае следует использовать NLOB или BLOB? VARCHAR2 или NVARCHAR2? –

+0

Маленькая строка юникода, которую вы можете хранить в полях NVARCHAR2, большой - в NCLOB. BLOB обычно используется для двоичных данных, а не для строк. – Stawros

2

Большинство из этого не нужно, у вас есть база данных с CharacterSet AL32UTF8, то есть тот, который уже в юникод CharacterSet - UTF-8.

Если вы объявите столбцы как VARCHAR2, тогда вы сможете просто вставить данные.

SQL> create table fac_code_cpqldn(name varchar2(100)); 

Table created. 

SQL> insert into fac_code_cpqldn values ('chi phí công ty'); 

1 row created. 

SQL> 

NVARCHAR2s, NLOBs и т.д. гораздо труднее работать, чем стандартные типы данных. Чтобы избежать сомнений; это 11,2 база данных:

SQL> select * from v$version; 

BANNER 
--------------------------------------------------------- 
Oracle Database 11g Release 11.2.0.3.0 - 64bit Production 

Вы можете узнать свой NLS_DATABASE_PARAMETERS из кодировки символов, как я первоначально прокомментировал:

SQL> select value 
    2 from nls_database_parameters 
    3 where parameter = 'NLS_CHARACTERSET'; 

VALUE 
------------------------------------------- 
AL32UTF8 
Смежные вопросы