将unicode文本插入Oracle数据库表

时间:2015-09-08 07:51:19

标签: database oracle unicode oracle-sqldeveloper oracle-apex

我通过 SQL Developer 4.1.1

OracleDB 11c 中创建一个表
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

请告诉我如何解决?

2 个答案:

答案 0 :(得分:2)

尝试在插入BLOB字段之前将varchar2值转换为RAW格式 -

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);

答案 1 :(得分:2)

大部分内容都是不必要的,你有一个带有字符集AL32UTF8的数据库,即一个已经在unicode字符集中的数据库 - 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>

NVARCHAR2,NLOB等比标准数据类型更难处理。为避免疑义;这是一个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